數(shù)字日歷時鐘畢業(yè)設(shè)計論文_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  1 引言</b></p><p>  著名數(shù)學(xué)家華羅庚說過:時間是由分秒積成的,善于利用零星時間的人,才會做出更大的成績來。時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時間。忘記了要做的事情,當(dāng)事情不是很重要的時候,這種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能釀成大禍。</p><p>  單片機模塊中最常

2、見的是數(shù)字鐘,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此廣泛用于個人家庭,車站, 碼頭辦公室等公共場所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠遠超過老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定時開關(guān)烘箱、通斷動

3、力設(shè)備、甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字時鐘及擴大其應(yīng)用,有著非?,F(xiàn)實的意義。</p><p>  2 單片機的基本組成與特點</p><p>  單片機也稱單片微型計算機,在結(jié)構(gòu)上它采用大規(guī)模集成電路技術(shù)把微處理器(CPU)和隨機存取數(shù)據(jù)存儲器(RAM)、只讀程序存儲器(ROM)、輸入輸出電路(I/O口)以及定時計數(shù)器、串行通信口(SCI

4、)、時鐘電路、脈寬調(diào)制電路(PWM)、模擬多路轉(zhuǎn)換器及A/D轉(zhuǎn)換器等電路集成到單獨的一塊芯片上,構(gòu)成一個最小的完善的計算機系統(tǒng)。這些電路能在軟件的控制下單獨、準確、迅速、高效的完成程序設(shè)計者事先規(guī)定的任務(wù)。</p><p>  2.1 單片機的基本組成</p><p>  單片機是通過內(nèi)部總線把計算機的各主要部件接為一體,其內(nèi)部總線包括地址總線、數(shù)據(jù)總線和控制總線。其中,地址總線的作用是

5、在進行數(shù)據(jù)交換時提供地址,CPU通過它們將地址輸出到存儲器或I/O接口;/數(shù)據(jù)總線的作用是在CPU與存儲器或I/O接口之間,或存儲器與外設(shè)之間交換數(shù)據(jù);控制總線包括CPU發(fā)出的控制信號線和外部送入CPU的應(yīng)答信號線等。</p><p>  2.2 單片機的特點</p><p>  1種類多,型號全。很多單片機廠家逐年擴大適應(yīng)各種需要,有針對性地推出一系列型號產(chǎn)品,使系統(tǒng)開發(fā)工程師有很大的

6、選擇余地。大部分產(chǎn)品有較好的兼容性,保證了已開發(fā)產(chǎn)品能順利移植,較容易地使產(chǎn)品進行升級換代。</p><p>  2高集成度,體積小,可靠性強單片機將各功能部件集成在一塊晶體芯片上,集成度很高,體積自然也是最小的。芯片本身是按工業(yè)測控環(huán)境要求設(shè)計的,內(nèi)部布線很短,其抗工業(yè)噪音性能優(yōu)于一般通用的CPU。單片機程序指令,常數(shù)及表格等固化在ROM中不易破壞,許多信號通道均在一個芯片內(nèi),故可靠性高</p>

7、<p>  3控制功能強為了滿足對對象的控制要求,單片機的指令系統(tǒng)均有極豐富的條件:分支轉(zhuǎn)移能力,I/O口的邏輯操作及位處理能力,非常適用于專門的控制功能。</p><p>  4低電壓,低功耗,便于生產(chǎn)?,F(xiàn)在新型單片機的功耗越來越小,供電電壓從5V降低到了3.2V,甚至1V,工作電流從mA降到μA級,gz2頻率從十幾兆可編程到幾十千赫茲。特別是很多單片機都設(shè)置了多種工作方式,這些工作方式包括等待,暫停

8、,睡眠,空閑,節(jié)電等。</p><p>  5易擴展。單片機片內(nèi)具有計算機正常運行所必需的部件。芯片外部有許多供擴展用的三總線及并行、串行輸入/輸出管腳,很容易構(gòu)成各種規(guī)模的計算機應(yīng)用系統(tǒng)。把原本是外圍接口芯片的功能集成到一塊芯片內(nèi),在一片芯片中構(gòu)造了一個完整的功能強大的微處理應(yīng)用系統(tǒng)。</p><p>  6優(yōu)異的性價比。單片機的性能極高。為了提高速度和運行效率,單片機已開始使用RISC

9、流水線和DSP等技術(shù)。單片機的尋址能力也已突破64KB的限制,有的已可達到1MB和16MB,片內(nèi)的ROM容量可達62MB,RAM容量則可達2MB。由于單片機的廣泛使用,因而銷量極大,各大公司的商業(yè)競爭更使其價格十分低廉,其性能價格比極高。</p><p>  7具有C語言開發(fā)環(huán)境,友好的人機互動環(huán)境。大多數(shù)單片機都提供基于C語言開發(fā)平臺,并提供大量的函數(shù)供使用,這使產(chǎn)品的開發(fā)周期、代碼可讀性、可移植性都大為提高。

10、</p><p>  2.3 單片機的分類</p><p>  單片機作為計算機發(fā)展的一個重要領(lǐng)域,應(yīng)用一個較科學(xué)的分類方法。根據(jù)目前發(fā)展情況,從不同角度單片機大致可以分為通用型/專用型、總線型/非總線型及工控型/家電型。 </p><p>  2.3.1 通用型/專用型</p><p>  這是按單片機適用范圍來區(qū)分的。例如,

11、80C51是通用型單片機,它不是為某種專用途設(shè)計的;專用型單片機是針對一類產(chǎn)品甚至某一個產(chǎn)品設(shè)計生產(chǎn)的,例如為了滿足電子體溫計的要求,在片內(nèi)集成ADC接口等功能的溫度測量控制電路。</p><p>  2.3.2 總線型/非總線型</p><p>  這是按單片機是否提供并行總線來區(qū)分的??偩€型單片機普遍設(shè)置有并行地址總線、數(shù)據(jù)總線、控制總線,這些引腳用以擴展并行外圍器件都可通過串行口與

12、單片機連接,另外,許多單片機已把所需要的外圍器件及外設(shè)接口集成一片內(nèi),因此在許多情況下可以不要并行擴展總線,大大減省封裝成本和芯片體積,這類單片機稱為非總線型單片機。</p><p>  2.3.3 控制型/家電型</p><p>  這是按照單片機大致應(yīng)用的領(lǐng)域進行區(qū)分的。一般而言,工控型尋址范圍大,運算能力強;用于家電的單片機多為專用型,通常是小封裝、低價格,外圍器件和外設(shè)接口集成度

13、高。 </p><p>  顯然,上述分類并不是惟一的和嚴格的。例如,80C51類單片機既是通用型又是總線型,還可以作工業(yè)控用。</p><p>  3 單片機的應(yīng)用分類</p><p>  單片機具有體積小,重量輕、性價比高、開發(fā)性強、可靠性高和使用靈活扥特點,器應(yīng)用范圍非常廣泛?,F(xiàn)在單片機已經(jīng)被廣泛應(yīng)用到了工業(yè)、商業(yè)、國防和日常生活等人類活動的各個領(lǐng)

14、域</p><p>  3.1 工業(yè)自動化控制</p><p>  在工業(yè)控制系統(tǒng)的設(shè)計中,很多地方都可以看到單片機的身影。設(shè)計者可以根據(jù)自己的實際需要開發(fā)一個單片機控制系統(tǒng)。這種方式具有成本低、設(shè)計靈活、使用方便的特點,適用于工業(yè)產(chǎn)品的開發(fā)。另外,在化工、建筑、也冶金等各種工業(yè)領(lǐng)域都要用單片機進行控制。</p><p>  3.2 智能化儀表</p>

15、;<p>  采用單片機的智能化儀表不但可以大大提升儀表的檔次,而且可以實現(xiàn)采集數(shù)據(jù)處理和存儲、故障診斷、聯(lián)網(wǎng)集控制功能。</p><p><b>  3.3 家用電器</b></p><p>  在家用電器中單片使用非常普遍,常見的有洗衣機、電冰箱、空調(diào)、音響、電視機、手機扥?,F(xiàn)在,在一些高級玩具中也配有單片機。</p><p&g

16、t;  3.4 辦公自動化設(shè)備</p><p>  現(xiàn)代辦公室使用的大量通信和辦公設(shè)備多數(shù)嵌入了單片機。如打印機、復(fù)印機、傳真機、繪圖機、考勤機、電話以及通用計算機中的鍵盤譯碼、磁盤驅(qū)動等。</p><p>  3.5 商業(yè)營銷設(shè)備</p><p>  在商業(yè)營銷系統(tǒng)中已廣泛使用的電子稱、收款機、條形碼閱讀器、IC卡刷卡機、出租車計價器以及倉儲安全監(jiān)測系統(tǒng)、商場

17、保安系統(tǒng)、空氣調(diào)節(jié)系統(tǒng)、冷凍保險系統(tǒng)等都采用了單片機控制。</p><p>  3.6 汽車電子產(chǎn)品</p><p>  現(xiàn)代汽車的集中顯示系統(tǒng)、動力監(jiān)測控制系統(tǒng)、自動駕駛系統(tǒng)、通信系統(tǒng)和運行監(jiān)視器(黑匣子)等都離不開單片機。</p><p>  綜合所述,單片機已成為計算機發(fā)展和應(yīng)用的一個重要方面。另一方面,單片機應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制

18、系統(tǒng)設(shè)計思想和設(shè)計方法。從前必須由模擬電路或數(shù)字電路實現(xiàn)的大部分功能,現(xiàn)在已能用單片機通過軟件方法來實現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。</p><p>  4 數(shù)字日歷時鐘的功能及總體方案介紹</p><p>  4.1 數(shù)字日歷時鐘的功能介紹</p><p>  數(shù)字日歷時鐘采用液晶雙行顯示,第一行顯示年月日,第二行

19、顯示時間,具有閏年補償功能,24小時計時法,可以通過鍵盤設(shè)置時間及日期。通過KEY1進入設(shè)置狀態(tài),按一下設(shè)置秒,按下設(shè)置分,按三下設(shè)置時,按四下設(shè)置日,按五下設(shè)置月,按六下設(shè)置年,按七下退出設(shè)置狀態(tài),時鐘繼續(xù)運行;KEY2為“+”健,每按一下則相對應(yīng)的加一;KEY3為“-”健,每按一下則相對應(yīng)的減一;RST為復(fù)位鍵,該鍵使得程序重新開始運行。</p><p>  4.2 數(shù)字日歷時鐘總體方案介紹</p&g

20、t;<p>  AT89C52是一個低電壓,高性能CMOS 8位單片機,片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,功能強大的AT89C52單片機可解決許多較復(fù)雜系統(tǒng)控制問題,日歷時鐘并不是特別復(fù)雜,采用現(xiàn)有的I/O口便可完成,

21、所以本設(shè)計的基本結(jié)構(gòu)如圖1:</p><p>  4.2.1 計時方案</p><p>  利用AT89C52單片機內(nèi)部的定時/計數(shù)器進行中斷定時,由外部的石英晶體振蕩器提供12MHZ的振蕩頻率,配合軟件延時實現(xiàn)時、分、秒的計時。該方案節(jié)省硬件成本,且能在定時/計數(shù)器的使用、中斷及程序設(shè)計方面得到鍛煉與提高,對單片機的指令系統(tǒng)能有更深入的了解,從而對學(xué)好單片機技術(shù)這門課程起到一定的作用。

22、</p><p>  4.2.2 鍵盤方案</p><p>  AT89C52的P3.0口接KEY1,P3.1口接KEY2,P3.2口接KEY3,這三個鍵的公共端接地,構(gòu)成獨立式鍵盤電路。</p><p>  4.2.3 顯示方案</p><p>  AT89C52的P0口接1602液晶顯示器的D0-D7口,采用的并口通信方式, P3.4

23、口接液晶顯示器的使能端,P3.5口接液晶顯示器的數(shù)據(jù)/命令選擇端,液晶顯示器的端口3與地之間接100K?的電位器,以控制顯示亮度。這樣就構(gòu)成了顯示電路。</p><p>  4.2.4 電源及復(fù)位電路</p><p>  電源采用標(biāo)準的5V電源,可以由USB供電,也可由外部電源適配器供電。</p><p>  復(fù)位電路采用上電復(fù)位兼手動復(fù)位電路,可以方便的使程序回

24、到初始狀態(tài)。</p><p>  5 數(shù)字日歷時鐘的工作原理</p><p>  5.1 實現(xiàn)時鐘計數(shù)的基本方法</p><p>  利用MCS-51系列單片機的可編程定時/計數(shù)器、中斷系統(tǒng)來實現(xiàn)時鐘計數(shù)。采用12MHZ的晶振,一個機器周期是12個振蕩周期,一個振蕩周期為1/12MHZ。所以每個機器周期的時間T=1us,把定時器設(shè)為工作方式0,定時時間為50ms

25、,則計數(shù)溢出20次即得時鐘計時最小單位秒, 采用中斷方式進行溢出次數(shù)累計,計滿20次為秒計時(1秒),從秒到分和從分到時的計時是通過累加和數(shù)值比較實現(xiàn)。</p><p>  5.2 液晶顯示的基本方法</p><p>  液晶顯示采用長沙太陽人電子有限公司的SMC1602A的液晶顯示器,其顯示容量為16×2個字符。接口信號說明見表1</p><p>&l

26、t;b>  其基本操作時序:</b></p><p>  1讀狀態(tài):輸入:RS=L,RW=H,E=H輸出:D0-D7=狀態(tài)字</p><p>  2寫指令:輸入:RS=L,RW=L, D0-D7=指令碼,E=高脈沖輸出:無</p><p>  3讀數(shù)據(jù):輸入:RS=H,RW=H,E=H輸出:D0-D7=數(shù)據(jù)<

27、;/p><p>  4寫數(shù)據(jù):輸入:RS=H,RW=L, D0-D7=數(shù)據(jù),E=高脈沖輸出:D0-D7=狀態(tài)字</p><p><b>  初始化設(shè)置:</b></p><p><b>  顯示模式設(shè)置見表2</b></p><p>  顯示開/關(guān)及光標(biāo)設(shè)置見表3</p><p&

28、gt;<b>  數(shù)據(jù)指針設(shè)置見表4</b></p><p><b>  其他設(shè)置見表5</b></p><p><b>  初始化的過程</b></p><p>  設(shè)置顯示模式為16×2顯示,5×7點陣,8位數(shù)據(jù)接口:指令碼=0x38</p><p> 

29、 開顯示,設(shè)置不顯示光標(biāo),光標(biāo)不閃爍:指令碼=0x0c</p><p>  設(shè)置當(dāng)讀或?qū)懸粋€字符后地址指針加一,且光標(biāo)加一:指令碼=0x06</p><p>  數(shù)據(jù)指針清零,顯示清屏:指令碼=0x01</p><p>  將數(shù)據(jù)指針設(shè)置為80H:指令碼=0x80</p><p><b>  寫指令的過程</b><

30、/p><p>  設(shè)置為命令狀態(tài):RS=0</p><p><b>  使能信號低:E=0</b></p><p>  將指令碼輸入到P0口</p><p><b>  延時5ms</b></p><p><b>  使能型號高:E=1</b></p&

31、gt;<p><b>  延時5ms</b></p><p><b>  使能型號高:E=0</b></p><p><b>  寫數(shù)據(jù)的過程</b></p><p>  設(shè)置為數(shù)據(jù)狀態(tài):RS=1</p><p><b>  使能信號低:E=0</

32、b></p><p><b>  將數(shù)據(jù)輸入到P0口</b></p><p><b>  延時5ms</b></p><p><b>  使能型號高:E=1</b></p><p><b>  延時5ms</b></p><p&g

33、t;<b>  使能型號高:E=0</b></p><p>  通過以上步驟實現(xiàn)對1602液晶顯示器顯示功能。</p><p>  5.3 閏年補償功能實現(xiàn)的基本方法</p><p>  閏年補償是日歷中必不可少的,每隔四年2月份有29天,根據(jù)這一規(guī)律,只要能被4整除且沒有余數(shù)的年就是閏年,實現(xiàn)這一判斷有兩種方法:1.用年份除4取模,模為0表

34、是閏年,不為0則不是閏年;2.用年份與3位與,如果與下的結(jié)果為0為閏年,不為0則不是閏年,我選擇的是第二種方法,這種方法可以減少CPU的運算強度。</p><p>  5.4 鍵盤功能實現(xiàn)的基本方法</p><p>  鍵盤模塊由三個按鍵組成獨立式鍵盤,三個按鍵的常開端接單片機的I/O口,公共端接地,只要按下按鍵對單片機輸入低電平信號,由單片機內(nèi)部的程序?qū)崿F(xiàn)消抖,其消抖的步驟如下:1檢測

35、I/O口是否有低電平信號,2延時5ms,再次檢測I/O口是否有低電平信號,3如確實有低電平信號,向單片機發(fā)出按鍵確認信號,如果沒有,則跳出消抖程序。</p><p>  5.5 復(fù)位功能實現(xiàn)的基本方法</p><p>  本設(shè)計采用上電復(fù)位兼手動復(fù)位,由一電阻串聯(lián)開關(guān)后并聯(lián)一個電容,再和一電阻串聯(lián),單片機接通電原,電容進入充電狀態(tài),給RST一個高電壓,就進入上電復(fù)位狀態(tài)。在單片機運行中,

36、當(dāng)按鈕按下后,由兩電阻組成的串聯(lián)分壓電路,使RST端獲得足夠時間的閥值以上電壓,單片機即進行復(fù)位。在單片機復(fù)位后,松開按鈕,單片機即可開始正常運行程序。</p><p>  6 數(shù)字液晶日歷時鐘的硬件電路</p><p>  6.1 數(shù)字液晶日歷時鐘原理圖</p><p>  在硬件電路中,采用的是AT89C52單片機,AT89C52為40 腳雙列直插封裝的8

37、位通用微處理器,40個端口大致可分為電源、時鐘、I/O口、數(shù)據(jù)總線、地址總線、控制總線幾個部分。他們的功能如下, </p><p><b>  電源:</b></p><p>  Ucc(40端子) 芯片工作電源,+5V</p><p>  Uss (20端子) 電源接地端</p><p><b&

38、gt;  時鐘:</b></p><p>  XTAL1(19端子)接外部石英晶體和微調(diào)電容的一端,也是MCS-51內(nèi)部振蕩電路反相放大器的輸入端。在采用外部時鐘時,該端子應(yīng)接地。</p><p>  XTAL2(18端子)接外部石英晶體和微調(diào)電容的另一端,也是內(nèi)部振蕩電路反相放大器的輸入端。振蕩電路的頻率就是外部石英晶體的固有頻率。當(dāng)采用外部時鐘電路時,該端子輸入外部時鐘脈沖

39、,用示波器觀察此端子是否有脈沖信號輸出,即可判斷MCS-51的振蕩電路是否正常工作。</p><p><b>  控制總線:</b></p><p>  ALE/PROG\(30端子)地址鎖存允許信號。在MCS-51上電正常工作后,該端子不斷以晶體振蕩器1/6的頻率向外輸出正脈沖信號。當(dāng)MCS-51訪問片外存儲器,ALE用來鎖存擴展地址的低8位(P0口)的地址信號,在

40、不訪問外部存儲器ALE也以振蕩器的1/6的頻率固定輸出正脈沖,可用作為外輸出的時鐘信號或用于定時。同樣,可用示波器檢查ALE端子是否有脈沖信號輸出來判斷MCS-51芯片的好壞。在MCS-51訪問外部數(shù)據(jù)存儲器時,將少一個ALE脈沖。ALE端可以驅(qū)動(吸收或輸出電流)8個LSTTL。在8751單片機EPROM編程期間。此端子接編程脈沖,實現(xiàn)其第二功能PROG\.</p><p>  PSEN\(29端子)外部程序存

41、儲器讀選通信號。在訪問外部程序存儲器時,此端子定時輸出負脈沖作為讀取外部存儲器的選通信號。在從外部程序存儲器取命令(或數(shù)據(jù))期間,RSEN在每個機器周期(12個脈沖時期)內(nèi)兩次有效。PSEN\可以驅(qū)動8個LSTTL。</p><p>  RST/Upd(9端子) 復(fù)位信號輸入端。在該端子上保持兩個機器周期的高電平時,可對MCS-51實現(xiàn)復(fù)位操作。該端子的第二功能Upd是作為備用電源的輸入端,在Ucc掉電或電壓降至

42、低電平規(guī)定時,由Upd向外部數(shù)據(jù)存儲器提供電源,以保持存放其中的數(shù)據(jù)。</p><p>  EA\/Upp(31端子)外部程序存儲器地址允許輸入端。在MCS-51內(nèi)、外程序存儲器都具備時,EA為高電平,從內(nèi)部程序存儲器開始訪問,EA為低電平時,則跳過內(nèi)部程序存儲器,從外部存儲器開始訪問。</p><p><b>  并行I/O:</b></p><

43、p>  P0口(32-39端子)它除可以作為一般I/O外,還可作為MCS-51單片機的8位準雙向數(shù)據(jù)總線和低8位地址總線。在MCS-51訪問外部存儲器時,它分別先輸出要訪問存儲單元的低8位地址,然后作為可進行輸入/輸出的數(shù)據(jù)總線。所謂“準雙向”,是指P0口在做輸入口使用時應(yīng)先進行寫“1”操作。P0口中每位能驅(qū)動8個LSTTL負載。</p><p>  P1口(1-8端子)它是一個帶內(nèi)部上拉電阻8位準雙向I/

44、O端子。P1口的每位能驅(qū)動4個LSTTL負載。</p><p>  P2口(21-28端子)它是一個帶內(nèi)部上拉電阻的8位準雙向口。在訪問外部存儲器時,它輸出高8位地址,和P0口輸出的低8位地址共同作為16位地址總線。P2口的每位能驅(qū)動4個LSTTL負載。</p><p>  P3口(10-17端子)P3口是一個內(nèi)部上拉電阻的準雙向I/O口,它的每位能驅(qū)動LSTT</p>&l

45、t;p><b>  負載。</b></p><p>  信號端子的第二功能:</p><p>  由于工藝及標(biāo)準化等原因,芯片的端子數(shù)目是有限制的。例如MCS-51系列把芯片引線端子數(shù)目限定為40個,但單片機為實現(xiàn)其功能所需要的數(shù)目卻遠遠超過此數(shù),因此就出現(xiàn)要與可能的矛盾。如何解決這個矛盾?兼職是唯一可行的辦法,即給一些信號端子賦予雙重功能。如果把前述信號定義為

46、端子第一功能的話,則根據(jù)需要在定義的信號就是它的第二功能。下面介紹某些信號端子的第二功能,P3的8條口線都定義有第二功能見表6:</p><p>  根據(jù)上述端口說明,設(shè)計數(shù)字液晶日歷時鐘原理圖見附錄2</p><p>  6.2 數(shù)字液晶日歷時鐘PCB圖</p><p>  數(shù)字液晶日歷時鐘PCB圖見圖3</p><p>  6.3 數(shù)

47、字液晶日歷時鐘元件清單</p><p>  數(shù)字液晶日歷時鐘元件清單見表7</p><p>  6.4 數(shù)字液晶日歷時鐘實物(用面包板字制作的實物)</p><p>  數(shù)字液晶日歷時鐘實物見圖4</p><p>  7 數(shù)字液晶日歷時鐘的軟件設(shè)計及基于Proteus的軟件仿真</p><p>  7.1 基于單

48、片機的日歷時鐘源程序</p><p>  基于單片機的日歷時鐘源程序見附錄1。</p><p>  7.2 基于Proteus的軟件仿真</p><p>  基于Proteus的軟件仿真圖見圖5:</p><p>  8 數(shù)字日歷時鐘的使用說明及調(diào)試過程</p><p><b>  8.1 使用說明&l

49、t;/b></p><p><b>  時間顯示:</b></p><p>  電子鐘上電后,電子鐘顯示2010-05-0100:00:00并開始運行,如下圖6所示:</p><p><b>  時間調(diào)整:</b></p><p>  按一次SET鍵,光標(biāo)在秒位置閃爍,如圖7所示這時可以設(shè)置

50、秒,按+鍵,數(shù)字依次加一,按-鍵,數(shù)字依次減一,按兩次SET鍵,光標(biāo)在分位置閃爍,這時可以設(shè)置秒,按+鍵,數(shù)字依次加一,按-鍵,數(shù)字依次減一,時、日、月、年設(shè)置方法與分秒相同,當(dāng)按第七次SET鍵,此時時鐘又恢復(fù)正常運行。</p><p><b>  8.2 調(diào)試過程</b></p><p>  將電路按照原理圖在面包板上焊接好,將燒好程序的單片機插入40腳插座,接通

51、電源,此時數(shù)字時鐘顯示初始日期,將日期及時間設(shè)置好后,其正常運行,按下復(fù)位鍵,沒有任何反應(yīng),斷開電源,查看硬件電路,發(fā)現(xiàn)在面包板上單片機I/O口語復(fù)位鍵的那根線沒有連接,將其焊接好以后重新上調(diào)試,這時能正常運行,按下復(fù)位鍵后恢復(fù)到初始狀態(tài)。</p><p><b>  8.3 誤差分析</b></p><p>  在調(diào)試運行過程中,在所有參數(shù)正確的情況下,我的結(jié)果仍

52、出現(xiàn)運行緩慢情況。產(chǎn)生誤差的主要原因是我們用軟件計時,計時1秒是采用定時器的中斷服務(wù)程序。當(dāng)電子鐘運行1秒,執(zhí)行中斷程序需要一定時間,這個時間就是所產(chǎn)生的誤差,這個誤差是不可避免的。同時,單片機工作也會受到環(huán)境的影響,比如溫度、濕度,以及其它電子設(shè)備的干擾。</p><p>  因此,應(yīng)該讓電子鐘工作在適度溫度、干燥和電子干擾較少的環(huán)境下,還有一種方法就是采用實時時鐘芯片,這樣可以使誤差降低到最少。</p&

53、gt;<p><b>  結(jié) 論</b></p><p>  通過兩個月的學(xué)習(xí)和調(diào)試過程,終于完成了單片機模塊數(shù)字日歷時鐘的工作。并且使數(shù)字日歷時鐘能夠順利運行,完成了預(yù)期的目標(biāo)。從單片機數(shù)字日歷時鐘的設(shè)計過程中也找到了一些單片機開發(fā)的規(guī)律:先了解所有元件的具體內(nèi)容,從而畫出其電路圖,使數(shù)字鐘從簡易變成多功能的方式,雖沒有做多功能數(shù)字鐘,卻知曉了其方法。從而讓我踏入了單片機應(yīng)

54、用領(lǐng)域的第一步。然而在調(diào)試過程中有也有許多的不足之處:例如編寫調(diào)試程序有點不足。希望能夠在以后的不斷深入學(xué)習(xí)中能夠彌補自己的不足之處。同時更是朝著單片機應(yīng)用領(lǐng)域邁進。</p><p><b>  致 謝</b></p><p>  在此結(jié)束之際,我要感謝我在學(xué)院求學(xué)期間里,每一位都曾經(jīng)授予我知識和做人道理的老師,在這里我由衷的說一句:老師,你們辛苦啦!在這即將畢業(yè)的

55、時候,我的心里有著不知是什么樣的心情,大學(xué)三年的寒窗苦讀在這一瞬之間也宣告結(jié)束,即將真正走進社會大家庭的我是老師和我的親人在教誨和告誡我,使我的路不是那么的曲折、迷離,在此我要再次感謝我的恩師和我的親人,非常的謝謝你們,一直對我的教導(dǎo)! </p><p><b>  參 考 文 獻</b></p><p>  1 湯競難,沈國琴.51單片機C語言開發(fā)與實例.北京:人

56、民郵電出版社,2008</p><p>  2 耿長清.單片機應(yīng)用技術(shù).北京:化學(xué)工業(yè)出版社,2002</p><p>  3 宋戈,黃鶴松,員玉良,蔣海峰.51單片應(yīng)用開發(fā)范例大全.北京:人民郵電出版社2010</p><p>  4 周潤景,張麗娜,丁莉.基于PROTEUS的電路設(shè)計及單片機設(shè)計與仿真(第2版).北京:北京航天航空大學(xué)出版社,2010<

57、;/p><p>  5 鄭鋒,王巧芝,陳繪兵,王鼎嬡.51單片機應(yīng)用系統(tǒng)典型模塊開發(fā)大全.北京:中國鐵道出版社,2010</p><p>  6 趙廣林.Protel99SE電路設(shè)計與制版.北京:電子工業(yè)出版社,2005</p><p>  7 張毅剛,修林成,胡振江.MCS-51單片機應(yīng)用設(shè)計[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社,1990</p>

58、<p>  8 李華.MCS-51系列單片機實用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1993</p><p>  9 李光飛.單片機課程設(shè)計實例指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2004</p><p>  附錄A:基于單片機的日歷時鐘源程序</p><p>  #include<reg52.h></p>&

59、lt;p>  #define uchar unsigned char </p><p>  #define uint unsigned int</p><p>  sbit key1=P3^0;/*定義設(shè)置鍵*/</p><p>  sbit key2=P3^1;/*定義UP鍵*/</p><p>  sbit key3=P3^

60、2;/*定義DOWN鍵*/</p><p>  sbit lcden=P3^4;/*定義液晶顯示器使能端*/</p><p>  sbit rs=P3^5;/*定義液晶顯示器數(shù)據(jù)與指令使能端*/</p><p>  uchar count,key1num;</p><p>  uint runnian,nian1,nian2;<

61、;/p><p>  char miao,shi,fen,ri,yue;</p><p>  uchar code table[]=" 2010-05-23";</p><p>  uchar code table1[]=" 00:00:00";</p><p>  void delay(uint

62、z)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }<

63、/b></p><p>  void write_com(uchar com)/*寫指令程序*/</p><p><b>  {</b></p><p><b>  rs=0;</b></p><p><b>  lcden=0;</b></p>&

64、lt;p><b>  P0=com;</b></p><p><b>  delay(5);</b></p><p><b>  lcden=1;</b></p><p><b>  delay(5);</b></p><p><b>  

65、lcden=0;</b></p><p><b>  }</b></p><p>  void write_date(uchar date)/*寫數(shù)據(jù)程序*/</p><p><b>  {</b></p><p><b>  rs=1;</b></

66、p><p><b>  lcden=0;</b></p><p><b>  P0=date;</b></p><p><b>  delay(5);</b></p><p><b>  lcden=1;</b></p><p><

67、;b>  delay(5);</b></p><p><b>  lcden=0;</b></p><p><b>  }</b></p><p>  void init()/*初始化程序*/</p><p><b>  {</b></

68、p><p>  uchar num;</p><p><b>  lcden=0;</b></p><p><b>  miao=0;</b></p><p><b>  fen=0;</b></p><p><b>  shi=0;</b&

69、gt;</p><p><b>  ri=23;</b></p><p><b>  yue=05;</b></p><p><b>  nian1=10;</b></p><p><b>  nian2=20;</b></p><p&

70、gt;  write_com(0x38);</p><p>  write_com(0x0c);</p><p>  write_com(0x06);</p><p>  write_com(0x01);</p><p>  write_com(0x80);</p><p>  for(num=0;num<

71、13;num++)</p><p><b>  {</b></p><p>  write_date(table[num]);</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p>  write

72、_com(0x80+0x40);</p><p>  for(num=0;num<12;num++)</p><p><b>  {</b></p><p>  write_date(table1[num]);</p><p><b>  delay(5);</b></p>&l

73、t;p><b>  }</b></p><p>  TMOD=0x01;/*定時器0,16位工作方式*/</p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;</p><p>  EA=1;</p>

74、<p>  ET0=1;/*打開定時器0中斷*/</p><p>  TR0=1;/*啟動定時器*/</p><p><b>  }</b></p><p>  void write_nyr(uchar add,uchar date)/*寫年月日程序*/</p><p>&

75、lt;b>  {</b></p><p>  uchar shi,ge;</p><p>  shi=date/10;</p><p>  ge=date%10;</p><p>  write_com(0x80+add);</p><p>  write_date(0x30+shi);</p&

76、gt;<p>  write_date(0x30+ge);</p><p><b>  }</b></p><p>  void write_sfm(uchar add,uchar date)/*寫時分秒程序*/</p><p><b>  {</b></p><p>  uchar

77、 shi,ge;</p><p>  shi=date/10;</p><p>  ge=date%10;</p><p>  write_com(0x80+0x40+add);</p><p>  write_date(0x30+shi);</p><p>  write_date(0x30+ge);</p&

78、gt;<p><b>  }</b></p><p>  void panduannian()/*判斷閏年程序*/</p><p><b>  {</b></p><p><b>  uint a;</b></p><p>  a=nian1&

79、3;</p><p><b>  if(a==0)</b></p><p><b>  {</b></p><p>  runnian=1;</p><p><b>  }</b></p><p><b>  else</b><

80、;/p><p><b>  {</b></p><p>  runnian=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void keyscan()/*鍵盤設(shè)置程序*/</p&

81、gt;<p><b>  {</b></p><p>  if(key1==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key1==0)/*鍵盤1消抖程序*/<

82、/p><p>  {key1num++;</p><p>  while(!key1);</p><p>  if(key1num==1)</p><p><b>  {</b></p><p><b>  TR0=0;</b></p><p>  wr

83、ite_com(0x80+0x40+10);</p><p>  write_com(0x0f);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key1num==2)</p><p>  write_com(0x8

84、0+0x40+7);</p><p>  if(key1num==3)</p><p>  write_com(0x80+0x40+4);</p><p>  if(key1num==4)</p><p>  write_com(0x80+11);</p><p>  if(key1num==5)</p>

85、<p>  write_com(0x80+8);</p><p>  if(key1num==6)</p><p>  write_com(0x80+5);</p><p>  if(key1num==7)</p><p><b>  {</b></p><p>  key1num=0

86、;</p><p>  write_com(0x0c);</p><p><b>  TR0=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key1num!=0)</p&

87、gt;<p><b>  {</b></p><p>  if(key2==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key2==0)/*鍵盤2消抖程序*/</p

88、><p><b>  {</b></p><p>  while(!key2);</p><p>  if(key1num==1)</p><p><b>  {</b></p><p><b>  miao++;</b></p><p&

89、gt;  if(miao==60)</p><p><b>  miao=0;</b></p><p>  write_sfm(10,miao);</p><p>  write_com(0x80+0x40+10);</p><p><b>  }</b></p><p>

90、  if(key1num==2)</p><p><b>  {</b></p><p><b>  fen++;</b></p><p>  if(fen==60)</p><p><b>  fen=0;</b></p><p>  write_sf

91、m(7,fen);</p><p>  write_com(0x80+0x40+7);</p><p><b>  }</b></p><p>  if(key1num==3)</p><p><b>  {</b></p><p><b>  shi++;<

92、/b></p><p>  if(shi==24)</p><p><b>  shi=0;</b></p><p>  write_sfm(4,shi);</p><p>  write_com(0x80+0x40+4);</p><p><b>  }</b><

93、;/p><p>  if(key1num==4)</p><p><b>  {</b></p><p><b>  ri++;</b></p><p>  if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)</p>&

94、lt;p><b>  {</b></p><p>  if(ri==32)</p><p><b>  ri=1;</b></p><p><b>  }</b></p><p>  if(yue==4||yue==6||yue==9||yue==11)</p>

95、;<p><b>  {</b></p><p>  if(ri==31)</p><p><b>  ri=1;</b></p><p><b>  }</b></p><p>  if(yue==2&&runnian==1&&r

96、i==30)</p><p><b>  ri=1;</b></p><p>  if(yue==2&&runnian==0&&ri==29)</p><p><b>  ri=1;</b></p><p>  write_nyr(11,ri);</

97、p><p>  write_com(0x80+11);</p><p><b>  }</b></p><p>  if(key1num==5)</p><p><b>  {</b></p><p><b>  yue++;</b></p>

98、<p>  if(yue==13)</p><p><b>  yue=1;</b></p><p>  write_nyr(8,yue);</p><p>  write_com(0x80+8);</p><p><b>  }</b></p><p>  if(

99、key1num==6)</p><p><b>  {</b></p><p><b>  nian1++;</b></p><p>  if(nian1==100)</p><p><b>  {</b></p><p><b>  nian

100、1=0;</b></p><p><b>  nian2++;</b></p><p>  if(nian2==100)</p><p><b>  nian2=0;</b></p><p>  write_nyr(3,nian2);</p><p>  writ

101、e_com(0x80+3);</p><p><b>  }</b></p><p>  write_nyr(5,nian1);</p><p>  write_com(0x80+5);</p><p><b>  }</b></p><p><b>  }<

102、/b></p><p><b>  }</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key3==0)/*鍵

103、盤3消抖程序*/</p><p><b>  {</b></p><p>  while(!key3);</p><p>  if(key1num==1)</p><p><b>  {</b></p><p><b>  miao--;</b><

104、/p><p>  if(miao==-1)</p><p><b>  miao=59;</b></p><p>  write_sfm(10,miao);</p><p>  write_com(0x80+0x40+10);</p><p><b>  }</b></p&

105、gt;<p>  if(key1num==2)</p><p><b>  {</b></p><p><b>  fen--;</b></p><p>  if(fen==-1)</p><p><b>  fen=59;</b></p><

106、p>  write_sfm(7,fen);</p><p>  write_com(0x80+0x40+7);</p><p><b>  }</b></p><p>  if(key1num==3)</p><p><b>  {</b></p><p><b&

107、gt;  shi--;</b></p><p>  if(shi==-1)</p><p><b>  shi=23;</b></p><p>  write_sfm(4,shi);</p><p>  write_com(0x80+0x40+4);</p><p><b>

108、  }</b></p><p>  if(key1num==4)</p><p><b>  {</b></p><p><b>  ri--;</b></p><p>  if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==

109、12)</p><p><b>  {</b></p><p>  if(ri==-1)</p><p><b>  ri=31;</b></p><p>  }/*對31天的月份進行判斷程序*/</p><p>  if(yue==4||yue==6||yue

110、==9||yue==11)</p><p><b>  {</b></p><p>  if(ri==-1)</p><p><b>  ri=30;</b></p><p>  }/*對30天的月份進行判斷程序*/</p><p>  if(yue==2&am

111、p;&runnian==1&&ri==-1)</p><p><b>  ri=29;</b></p><p>  if(yue==2&&runnian==0&&ri==-1)</p><p><b>  ri=28;</b></p><p>

112、  write_nyr(11,ri);</p><p>  write_com(0x80+11);</p><p><b>  }</b></p><p>  if(key1num==5)</p><p><b>  {</b></p><p><b>  yue-

113、-;</b></p><p>  if(yue==0)</p><p><b>  yue=12;</b></p><p>  write_nyr(8,yue);</p><p>  write_com(0x80+8);</p><p><b>  }</b>&l

114、t;/p><p>  if(key1num==6)</p><p><b>  {</b></p><p><b>  nian1--;</b></p><p>  if(nian1==-1)</p><p><b>  {</b></p>&

115、lt;p><b>  nian2--;</b></p><p><b>  nian1=99;</b></p><p>  if(nian2==-1)</p><p><b>  {</b></p><p><b>  nian1=99;</b>&l

116、t;/p><p><b>  nian2=99;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  write_nyr(3,nian2);</p><p>  write_com(0x80+3);&l

117、t;/p><p>  write_nyr(5,nian1);</p><p>  write_com(0x80+5);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

118、<p><b>  }</b></p><p><b>  }</b></p><p>  void main()/*主程序*/</p><p><b>  {</b></p><p>  init();/*調(diào)用初始化程序*/</

119、p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  panduannian();/*調(diào)用閏年判斷程序*/</p><p>  keyscan();/*調(diào)用鍵盤設(shè)置程序*/</p><p><b>

120、;  }</b></p><p><b>  }</b></p><p>  void timer0() interrupt 1/*定時計數(shù)器程序*/</p><p><b>  {</b></p><p>  TH0=(65536-50000)/256;</p>&

121、lt;p>  TL0=(65536-50000)%256;</p><p><b>  count++;</b></p><p>  if(count==20 )</p><p><b>  {</b></p><p><b>  count=0;</b></p&g

122、t;<p><b>  miao++;</b></p><p>  if(miao==60)</p><p><b>  {</b></p><p><b>  miao=0;</b></p><p><b>  fen++;</b><

123、/p><p>  if(fen==60)</p><p><b>  {</b></p><p><b>  fen=0;</b></p><p><b>  shi++;</b></p><p>  if(shi==24)</p><p

124、><b>  {</b></p><p><b>  shi=0;</b></p><p><b>  ri++;</b></p><p>  if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)</p><

125、p><b>  {</b></p><p>  if(ri==32)</p><p><b>  {</b></p><p>  ri=1;</p><p><b>  yue++;</b></p><p>  if(yue==13)

126、</p><p><b>  {</b></p><p><b>  nian1++;</b></p><p><b>  yue=1;</b></p><p>  if(nian1==100)</p><p><b>  {</b>

127、;</p><p><b>  nian1=0;</b></p><p><b>  nian2++;</b></p><p>  if(nian2==0)</p><p><b>  nian2=0;</b></p><p>  write_nyr(3

128、,nian2);</p><p><b>  }</b></p><p>  write_nyr(5,nian1);</p><p><b>  }</b></p><p>  write_nyr(8,yue);</p><p><b>  }</b>

129、</p><p><b>  }</b></p><p>  if(yue==4||yue==6||yue==9||yue==11)</p><p><b>  {</b></p><p>  if(ri==31)</p><p><b>  {</b>

130、</p><p><b>  ri=1;</b></p><p><b>  yue++;</b></p><p>  if(yue==13)</p><p><b>  {</b></p><p><b>  nian1++;</b&g

131、t;</p><p><b>  yue=1;</b></p><p>  if(nian1==100)</p><p><b>  {</b></p><p><b>  nian1=0;</b></p><p><b>  nian2++;

132、</b></p><p>  if(nian2==0)</p><p><b>  nian2=0;</b></p><p>  write_nyr(3,nian2);</p><p><b>  }</b></p><p>  write_nyr(5,nian1

133、);</p><p><b>  }</b></p><p>  write_nyr(8,yue);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(yue==2&&runnia

134、n==1&&ri==30)</p><p><b>  {</b></p><p><b>  ri=1;</b></p><p><b>  yue++;</b></p><p>  if(yue==13)</p><p><b&

135、gt;  {</b></p><p><b>  nian1++;</b></p><p><b>  yue=1;</b></p><p>  if(nian1==100)</p><p><b>  {</b></p><p><b

136、>  nian1=0;</b></p><p><b>  nian2++;</b></p><p>  if(nian2==0)</p><p><b>  nian2=0;</b></p><p>  write_nyr(3,nian2);</p><p&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論