基于51單片機(jī)的萬(wàn)年歷設(shè)計(jì)[共31頁(yè)]
《基于51單片機(jī)的萬(wàn)年歷設(shè)計(jì)[共31頁(yè)]》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《基于51單片機(jī)的萬(wàn)年歷設(shè)計(jì)[共31頁(yè)](31頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 單片機(jī)課程設(shè)計(jì) 題 目 基于51單片機(jī)的萬(wàn)年歷設(shè)計(jì) 學(xué)生姓名 專(zhuān)業(yè)班級(jí) 學(xué) 號(hào) 院 (系) 指導(dǎo)教師 完成時(shí)間 目錄 1課程設(shè)計(jì)的目的 1 2課程設(shè)計(jì)的任務(wù)與要求 1 2.1設(shè)計(jì)任務(wù) 1 2.2設(shè)計(jì)要求 1 3單片機(jī)發(fā)展概況 1 4設(shè)計(jì)原
2、理與功能說(shuō)明 4 4.1設(shè)計(jì)思想 4 4.2總體電路圖 5 4.3時(shí)鐘模塊 6 4.4液晶顯示模塊 6 4.5按鍵模塊 7 5系統(tǒng)測(cè)試 7 5.1硬件測(cè)試 7 5.2軟件測(cè)試 8 6總結(jié) 8 參考文獻(xiàn) 10 附錄一:總體電路原理圖 11 附錄二:主程序 12 附錄三:元器件清單 27 附錄四:實(shí)物圖 28 1課程設(shè)計(jì)的目的 1.通過(guò)制作萬(wàn)年歷,可以對(duì)單片機(jī)這門(mén)課程更好的認(rèn)識(shí)。 2.理論與實(shí)踐結(jié)合,提高自己的動(dòng)手能力。 3.學(xué)會(huì)與合作者更好的交流學(xué)習(xí),共同進(jìn)步和提高。 4.能夠增長(zhǎng)查閱資料的能力,視野更加開(kāi)闊。
3、 5.拓展其他學(xué)科的聯(lián)系,全面發(fā)展。 6.培養(yǎng)自我發(fā)現(xiàn)問(wèn)題,解決問(wèn)題的能力。 2課程設(shè)計(jì)的任務(wù)與要求 2.1設(shè)計(jì)任務(wù) 1.可以去學(xué)校圖書(shū)館或者網(wǎng)上,搜集整理相關(guān)的資料,做好前期理論準(zhǔn)備,為以后設(shè)計(jì)電路,看懂電路圖做理論支持。 2.構(gòu)想萬(wàn)年歷電路圖,并且具有可行性,畫(huà)出電路圖。 3.列舉電路所需的電子元件,仔細(xì)對(duì)比所需的元件的參數(shù),通過(guò)去電子元件經(jīng)銷(xiāo)商或者網(wǎng)購(gòu)購(gòu)買(mǎi)。 2.2設(shè)計(jì)要求 1.顯示年、月、日、時(shí)、分、秒。 2.可通過(guò)鍵盤(pán)自動(dòng)調(diào)整時(shí)間。 3.計(jì)時(shí)精度:月誤差小于20秒。 3單片機(jī)發(fā)展概況 單片機(jī)誕生于20世紀(jì)70年代末,它的發(fā)展史大致可分為三個(gè)階段:
4、 第一階段(1976-1978):初級(jí)單片機(jī)微處理階段。該時(shí)期的單片機(jī)具有 8 位CPU,并行 I/O 端口、8 位時(shí)序同步計(jì)數(shù)器,尋址范圍 4KB,但是沒(méi)有串行口。 第二階段(1978-1982):高性能單片機(jī)微機(jī)處理階段,該時(shí)期的單片機(jī)具有I/O 串行端口,有多級(jí)中斷處理系統(tǒng),15 位時(shí)序同步技術(shù)器,RAM、ROM 容量加大,尋址范圍可達(dá) 64KB。 第三階段(1982-至今)位單片機(jī)微處理改良型及 16 位單片機(jī)微處理階段民用電子產(chǎn)品、計(jì)算機(jī)系統(tǒng)中的部件控制器、智能儀器儀表、工業(yè)測(cè)控、網(wǎng)絡(luò)與通信的職能接口、軍工領(lǐng)域、辦公自動(dòng)化、集散控制系統(tǒng)、并行多機(jī)處理系統(tǒng)和
5、局域網(wǎng)絡(luò)系統(tǒng)。 STC系列單片機(jī)是由STMicroelectronics 公司生產(chǎn),并有宏晶公司做大陸代理的。本設(shè)計(jì)使用STC89C52作為控制核心,其管腳兼容其他51系列的單片機(jī),以下對(duì)STC89C52進(jìn)行簡(jiǎn)單講解。 STC89C52單片機(jī)包含中央處理器、程序存儲(chǔ)器(ROM)、數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí)/計(jì)數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線(xiàn)、地址總線(xiàn)和控制總線(xiàn)等三大總線(xiàn)。采用40Pin封裝的雙列直接DIP結(jié)構(gòu),圖3.1是它們的引腳配置,40個(gè)引腳中,正電源和地線(xiàn)兩根,外置石英振蕩器的時(shí)鐘線(xiàn)兩根,4組8位共32個(gè)I/O口,中斷口線(xiàn)與P3口線(xiàn)復(fù)用?,F(xiàn)在對(duì)各引腳功能說(shuō)明如下
6、(圖3.2): (1)主電源引腳 Vcc :接+5V電源正端。 Vss :接+5V電源地端。 (2)輸入/輸出引腳 P.0~P0.7:P0口的8個(gè)引腳。在不接片外存儲(chǔ)器與不擴(kuò)展I/O接口時(shí),可作為準(zhǔn)雙向輸入/輸出接口。在接有片外存儲(chǔ)器或擴(kuò)展I/O接口時(shí),P0口分時(shí)復(fù)用為低8位地址總線(xiàn)和雙向數(shù)據(jù)總線(xiàn)。 P1.0~P1.7:P1口的8個(gè)引腳??勺鳛闇?zhǔn)雙向I/O接口使用。對(duì)于52子系列,P1.0 與 P1.1還有第二種功能:P1.0 可用作定時(shí)器/計(jì)數(shù)器2的計(jì)數(shù)脈沖輸入端T2。P1.1可用作定時(shí)器/計(jì)數(shù)器2的外部控制端T2EX。 P2.0~P2.7:P2口的8個(gè)引腳??勺鳛闇?zhǔn)雙向I/O
7、接口;有接有片外存儲(chǔ)器或擴(kuò)展I/O接口且尋址范圍超過(guò)256個(gè)字節(jié)時(shí),P2口用作高8位地址總線(xiàn)。 P3.0~P3.7:P3口的8個(gè)引腳。除作為準(zhǔn)雙向I/O接口使用外,還具有第二種功能 ,詳見(jiàn)圖3.2。 圖3.1 STC89C52單片機(jī)管腳圖 引腳 第二功能 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD(串行口輸入) TXD(串行口輸出) INT0(外部中斷0輸入) INT1(外部中斷1輸入) T0(定時(shí)器0的外部輸入) T1(定時(shí)器1的外部輸入) W
8、R(片外數(shù)據(jù)存儲(chǔ)器寫(xiě)控制信號(hào)) RD(片外數(shù)據(jù)存儲(chǔ)器讀控制信號(hào)) 圖3.2 P3口第二功能表 4設(shè)計(jì)原理與功能說(shuō)明 4.1設(shè)計(jì)思想 以STC89C52單片機(jī)為核心,外接單片機(jī)復(fù)位電路,單片機(jī)晶振電路,時(shí)鐘芯片DS1302,按鍵電路,液晶顯示電路,通過(guò)控制STC89C52單片機(jī)的接口來(lái)控制時(shí)鐘芯片DS1302模塊,按鍵電路,液晶顯示模塊,使液晶能顯示陽(yáng)歷年、月、日、星期相應(yīng)的農(nóng)歷時(shí)間?! ? 液晶顯示電路 DS1302時(shí)鐘電路 STC89C52 單片機(jī) 晶振電路 按鍵電路 復(fù)位電路 圖4-1 硬件系統(tǒng)設(shè)計(jì)框架 4.2總體電路
9、圖 圖4-2 總電路圖 4.3時(shí)鐘模塊 DS1302 是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線(xiàn)接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)318的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。 圖4-3 時(shí)鐘電路圖 4.4液晶顯示模塊 本系統(tǒng)選擇的LCD是AMPIRE12864的漢字圖形型液晶顯示模塊,可顯示漢字及圖形。單片機(jī)P1口作為數(shù)據(jù)輸出口,RS,R\W,E分別通過(guò)10K的上拉電阻連接到單
10、片機(jī)的P0.0,P0.1,P0.2。VDD接5V電源,VSS接地。VEE為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。R/W為讀寫(xiě)信號(hào)線(xiàn),高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫(xiě)操作。E(或EN)端為使能(enable)端,下降沿使能。DB0-DB7為雙向數(shù)據(jù)總線(xiàn),同時(shí)最高位DB7也是忙信號(hào)檢測(cè)位。BLA、BLK分別為顯示器背光燈的正、負(fù)極。 圖4-4 液晶顯示電路圖 4.5按鍵模塊 本系統(tǒng)使用5個(gè)button元
11、件分別設(shè)置為增加鍵、減小鍵、退出鍵、設(shè)置/OK鍵。4個(gè)按鍵與一個(gè)4個(gè)驅(qū)動(dòng)電阻相連,作為整個(gè)按鍵控制功能系統(tǒng),以觸發(fā)AT89C52中斷為方式使用設(shè)置功能。 圖4-5 按鍵電路圖 5系統(tǒng)測(cè)試 5.1硬件測(cè)試 在調(diào)試硬件時(shí)遇到過(guò)很多問(wèn)題,但只要細(xì)心、認(rèn)真檢查這些問(wèn)題都是可以避免的,主要問(wèn)題及解決辦法現(xiàn)列如下: 認(rèn)真檢查電路是否有短路的地方,線(xiàn)與線(xiàn)之間,管腳刺破鄰近的漆包線(xiàn)之間是否連接在一起,有的話(huà)要用刀劃開(kāi),或者重新焊接。 檢查完畢后接通電源后LCD1602沒(méi)有正確的顯示。在不通電狀態(tài)下用萬(wàn)用表檢測(cè)電路是否正常連接,在檢查回路時(shí)發(fā)現(xiàn)有的點(diǎn)之間看似連接,但由于虛焊導(dǎo)致其并無(wú)電氣連接,
12、只能對(duì)焊腳進(jìn)行在加工直到解決問(wèn)題。 5.2軟件測(cè)試 由于本系統(tǒng)涉及到多個(gè)子程序,多個(gè)芯片的編程。首先必須對(duì)可編程芯片的控制字即其控制指令要熟記于心。其次,芯片很多都有時(shí)鐘輸入端,需要晶振支持。對(duì)芯片的讀寫(xiě)都需要在相應(yīng)的觸發(fā)沿到來(lái)時(shí)才能進(jìn)行。由于DS18B20是串行通信數(shù)據(jù),只用一個(gè)口線(xiàn)傳輸,在處理采集的模擬信號(hào)時(shí)需要一定的時(shí)間,會(huì)對(duì)延時(shí)有較高要求。所以在調(diào)用溫度子程序時(shí),先關(guān)閉定時(shí)器1中斷允許,在溫度子程序反回時(shí)再打開(kāi)定時(shí)器1中斷允許。 6總結(jié) 在這幾天的單片機(jī)課程設(shè)計(jì)中,老師先給我們介紹各種電子原件,讓我們了解了各種原件的不同以及注意事項(xiàng),這次課程不僅僅讓我們動(dòng)了手動(dòng)了腦,更讓我們體
13、會(huì)到了理論與實(shí)踐相結(jié)合的重要性,使我又不得不承認(rèn)理論的重要,我們必須打好基礎(chǔ)。在實(shí)驗(yàn)設(shè)計(jì)的過(guò)程中,讓我們體會(huì)到以前從來(lái)沒(méi)有過(guò)的動(dòng)手能力,以及新穎的思維方式,讓我從中獲益非淺。實(shí)驗(yàn)過(guò)程中,剛開(kāi)始就參看電路指導(dǎo)書(shū),畫(huà)出了多電路圖,進(jìn)行了仿真,但是由于實(shí)驗(yàn)元件選擇的不恰當(dāng),是的電燈不能依次閃爍,許但最后用萬(wàn)用表才得以發(fā)現(xiàn)問(wèn)題的所在,并在老師的指導(dǎo)下,終于完成了實(shí)驗(yàn)設(shè)計(jì),雖然道路艱難,但我們卻也樂(lè)在其中,既鍛煉了動(dòng)手能力,有培養(yǎng)了動(dòng)腦能力,更加利于我們?cè)谏鐣?huì)上工作。 經(jīng)過(guò)我們組員三天的不懈努力,終于成功完成了萬(wàn)年歷的設(shè)計(jì),完成了任務(wù)給出的所有要求,期間遇到了很多問(wèn)題,相關(guān)資料的搜集、整理,編寫(xiě)、調(diào)試
14、程序的時(shí)候所出現(xiàn)的錯(cuò)誤,硬件電路的選擇、連接。例如:液晶屏?xí)r間顯示出現(xiàn)了錯(cuò)誤即亂碼現(xiàn)象,我們通過(guò)查找書(shū)籍和上網(wǎng)搜索的形式知道了問(wèn)題所在,與延時(shí)程序有關(guān),修改了延時(shí)程序之后問(wèn)題得到了解決。在畫(huà)原理圖的時(shí)候,剛開(kāi)始每個(gè)原件是用線(xiàn)連接的,但是后來(lái)發(fā)現(xiàn)越連越多,越連越亂,可視性太差了,很容易連錯(cuò)線(xiàn),而且一旦出現(xiàn)錯(cuò)誤,很難檢查出錯(cuò)誤,所以我們換了一種更好的方法,對(duì)其進(jìn)行標(biāo)號(hào)處理,從而使得原理圖更加的簡(jiǎn)潔、直觀(guān),而且操作起來(lái)很方便。最終還是解決了這個(gè)難題,諸如此類(lèi)的錯(cuò)誤在本次設(shè)計(jì)中有不少,但是通過(guò)我們組員之間的通力合作與不懈努力終于克服了這些困難,本次實(shí)訓(xùn)不僅鞏固了我們所學(xué)的知識(shí),而且學(xué)到了很多課本之外的
15、東西,真正做到了學(xué)以致用,加強(qiáng)了邏輯思維能力,對(duì)我們大學(xué)生來(lái)說(shuō)試一次很好的經(jīng)歷,同時(shí)也讓我們深刻體會(huì)到了團(tuán)結(jié)合作的重要性,組員之間合理分工,更加高效、迅速。另外對(duì)于了解較少的知識(shí),我們不要?dú)怵H,我們可以通過(guò)上網(wǎng)查閱、到圖書(shū)館借書(shū)瀏覽等方式了解學(xué)習(xí),一定要相信自己,要持之以恒,這次經(jīng)歷加強(qiáng)了我們分析問(wèn)題、解決問(wèn)題的能力,為我們以后的工作學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。本次設(shè)計(jì)中同學(xué)之間明確分工,互相幫助,才有了本次設(shè)計(jì)的圓滿(mǎn)成功。 參考文獻(xiàn) [1] 何立民. MCS-51單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)(系統(tǒng)配置與接口技術(shù)).北京:北京航空航天大學(xué)出版社,2003. [2] 周立功. 單
16、片機(jī)實(shí)驗(yàn)與實(shí)踐教程(三).北京航空航天大學(xué)出版社,2006. [3] 譚浩強(qiáng). C語(yǔ)言程序設(shè)計(jì).北京:清華大學(xué)出版社,2006. [4] 付家才. 單片機(jī)實(shí)驗(yàn)與實(shí)踐.北京:高等教育出版社,2006. [5]淡海英. 關(guān)于單片機(jī)控制的數(shù)字萬(wàn)年歷設(shè)計(jì)[J]. 電子制作,2014. [6]魯廣英. 基于單片機(jī)電子萬(wàn)年歷的設(shè)計(jì)與實(shí)現(xiàn)[J]. 硅谷,2010. 附錄一:總體電路原理圖 總體電路原理圖 附錄二:主程序 #includ
17、e"lcd.h" /******************************************************************************* * 函 數(shù) 名 : Lcd1602_Delay1ms * 函數(shù)功能 : 延時(shí)函數(shù),延時(shí)1ms * 輸 入 : c * 輸 出 : 無(wú) * 說(shuō) 名 : 該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時(shí)。 *******************************************************
18、************************/ void Lcd1602_Delay1ms(uint c) //誤差 0us { uchar a,b; for (; c>0; c--) { for (b=199;b>0;b--) { for(a=1;a>0;a--); } } } /******************************************************************************* * 函 數(shù) 名 : LcdWr
19、iteCom * 函數(shù)功能 : 向LCD寫(xiě)入一個(gè)字節(jié)的命令 * 輸 入 : com * 輸 出 : 無(wú) *******************************************************************************/ #ifndef LCD1602_4PINS //當(dāng)沒(méi)有定義這個(gè)LCD1602_4PINS時(shí) void LcdWriteCom(uchar com) //寫(xiě)入命令 { LCD1602_E = 0; //使能 LCD1602_RS = 0;
20、//選擇發(fā)送命令 LCD1602_RW = 0; //選擇寫(xiě)入 LCD1602_DATAPINS = com; //放入命令 Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定 LCD1602_E = 1; //寫(xiě)入時(shí)序 Lcd1602_Delay1ms(5); //保持時(shí)間 LCD1602_E = 0; } #else void LcdWriteCom(uchar com) //寫(xiě)入命令 { LCD1602_E = 0; //使能清零 LCD1602_RS = 0; //選擇寫(xiě)入命令
21、 LCD1602_RW = 0; //選擇寫(xiě)入 LCD1602_DATAPINS = com; //由于4位的接線(xiàn)是接到P0口的高四位,所以傳送高四位不用改 Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫(xiě)入時(shí)序 Lcd1602_Delay1ms(5); LCD1602_E = 0; // Lcd1602_Delay1ms(1); LCD1602_DATAPINS = com << 4; //發(fā)送低四位 Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫(xiě)入時(shí)序 Lcd1602
22、_Delay1ms(5); LCD1602_E = 0; } #endif /******************************************************************************* * 函 數(shù) 名 : LcdWriteData * 函數(shù)功能 : 向LCD寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù) * 輸 入 : dat * 輸 出 : 無(wú) *********************************************************************
23、**********/ #ifndef LCD1602_4PINS void LcdWriteData(uchar dat) //寫(xiě)入數(shù)據(jù) { LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //選擇輸入數(shù)據(jù) LCD1602_RW = 0; //選擇寫(xiě)入 LCD1602_DATAPINS = dat; //寫(xiě)入數(shù)據(jù) Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫(xiě)入時(shí)序 Lcd1602_Delay1ms(5); //保持時(shí)間 LCD1602_E = 0;
24、} #else void LcdWriteData(uchar dat) //寫(xiě)入數(shù)據(jù) { LCD1602_E = 0; //使能清零 LCD1602_RS = 1; //選擇寫(xiě)入數(shù)據(jù) LCD1602_RW = 0; //選擇寫(xiě)入 LCD1602_DATAPINS = dat; //由于4位的接線(xiàn)是接到P0口的高四位,所以傳送高四位不用改 Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫(xiě)入時(shí)序 Lcd1602_Delay1ms(5); LCD1602_E = 0; LCD1602_DATAP
25、INS = dat << 4; //寫(xiě)入低四位 Lcd1602_Delay1ms(1); LCD1602_E = 1; //寫(xiě)入時(shí)序 Lcd1602_Delay1ms(5); LCD1602_E = 0; } #endif /******************************************************************************* * 函 數(shù) 名 : LcdInit() * 函數(shù)功能 : 初始化LCD屏 * 輸 入 : 無(wú) * 輸 出 : 無(wú) ****
26、***************************************************************************/ #ifndef LCD1602_4PINS void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x38); //開(kāi)顯示 LcdWriteCom(0x0c); //開(kāi)顯示不顯示光標(biāo) LcdWriteCom(0x06); //寫(xiě)一個(gè)指針加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點(diǎn) }
27、 #else void LcdInit() //LCD初始化子程序 { LcdWriteCom(0x32); //將8位總線(xiàn)轉(zhuǎn)為4位總線(xiàn) LcdWriteCom(0x28); //在四位線(xiàn)下的初始化 LcdWriteCom(0x0c); //開(kāi)顯示不顯示光標(biāo) LcdWriteCom(0x06); //寫(xiě)一個(gè)指針加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點(diǎn) } #endif /**********************************************
28、*********************************
* 實(shí)驗(yàn)名 : 定時(shí)器實(shí)驗(yàn)
* 使用的IO :
* 實(shí)驗(yàn)效果 :1602顯示時(shí)鐘,按K3進(jìn)入時(shí)鐘設(shè)置,按K1選擇設(shè)置的時(shí)分秒,按K2選擇
*選擇設(shè)置加1。
* 注意 :
*******************************************************************************/
#include
29、t K3=P3^5; sbit K2=P3^3; unsigned char Time; //用來(lái)計(jì)時(shí)間的值 void Delay1ms(unsigned int c); void TimerConfiguration(); void Int0Configuration(); unsigned char SetPlace; /******************************************************************************* * 函 數(shù) 名 : main * 函數(shù)功能 : 主
30、函數(shù) * 輸 入 : 無(wú) * 輸 出 : 無(wú) *******************************************************************************/ void main(void) { unsigned char hour,minit,second; unsigned int i; TimerConfiguration(); Int0Configuration(); LcdInit(); hour=12; LcdWriteData(0+hour/10);
31、 LcdWriteData(0+hour%10); LcdWriteData(-); LcdWriteData(0+minit/10); LcdWriteData(0+minit%10); LcdWriteData(-); LcdWriteData(0+second/10); LcdWriteData(0+second%10); while(1) { if(TR0==0) { if(K1==0) //檢測(cè)按鍵K2是否按下 { Delay1ms(10); //消除抖動(dòng) if(K1==0) {
32、 SetPlace++; if(SetPlace>=3) SetPlace=0; } while((i<50)&&(K1==0)) //檢測(cè)按鍵是否松開(kāi) { Delay1ms(1); i++; } i=0; } if(K2==0) //檢測(cè)按鍵K3是否按下 { Delay1ms(10); //消除抖動(dòng) if(K2==0) { if(SetPlace==0) { second++;
33、 if(second>=60) second=0; } else if(SetPlace==1) { minit++; if(minit>=60) minit=0; } else { hour++; if(hour>=24) hour=0; } } while((i<50)&&(K2==0)) //檢測(cè)按鍵是否松開(kāi) { Delay1ms(1);
34、 i++; } i=0; } } if(Time>=20) //一秒鐘來(lái)到改變數(shù)值 { Time=0; second++; if(second==60) { second=0; minit++; if(minit==60) { minit=0; hour++; if(hour==24) { hour=0; } } } } //--顯示
35、時(shí)鐘--// LcdWriteCom(0x80); LcdWriteData(0+hour/10); LcdWriteData(0+hour%10); LcdWriteCom(0x83); LcdWriteData(0+minit/10); LcdWriteData(0+minit%10); LcdWriteCom(0x86); LcdWriteData(0+second/10); LcdWriteData(0+second%10); } } /*************************************
36、****************************************** * 函 數(shù) 名 : Delay1ms() * 函數(shù)功能 : 延時(shí)1ms * 輸 入 : c * 輸 出 : 無(wú) *******************************************************************************/ void Delay1ms(unsigned int c) //誤差 0us { unsigned char a,b; for (; c>0;
37、 c--) { for(b=199;b>0;b--) { for(a=1;a>0;a--); } } } /******************************************************************************* * 函 數(shù) 名 : TimerConfiguration() * 函數(shù)功能 : 配置定時(shí)器值 * 輸 入 : 無(wú) * 輸 出 : 無(wú) ***********************
38、********************************************************/ void TimerConfiguration() { TMOD = 0x01; //選擇工作方式1 TH0 = 0x3C; //設(shè)置初始值 TL0 = 0x0B0; EA = 1; //打開(kāi)總中斷 ET0 = 1; //打開(kāi)定時(shí)器0中斷 TR0 = 1; //啟動(dòng)定時(shí)器0 } /***************************************************
39、**************************** * 函 數(shù) 名 : Timer0() * 函數(shù)功能 : 定時(shí)器0中斷函數(shù) * 輸 入 : 無(wú) * 輸 出 : 無(wú) *******************************************************************************/ void Timer0() interrupt 1 { TH0 = 0x3C; //設(shè)置初始值 TL0 = 0x0B0; Time++; }
40、 /******************************************************************************* * 函 數(shù) 名 : Int0Configuration() * 函數(shù)功能 : 配置外部中斷0 * 輸 入 : 無(wú) * 輸 出 : 無(wú) *******************************************************************************/ void Int0Configuration(
41、) { //設(shè)置INT0 IT0=1;//跳變沿出發(fā)方式(下降沿) EX0=1;//打開(kāi)INT0的中斷允許。 EA=1;//打開(kāi)總中斷 } /******************************************************************************* * 函 數(shù) 名 : Int0() interrupt 0 * 函數(shù)功能 : 外部中斷0的中斷函數(shù) * 輸 入 : 無(wú) * 輸 出 : 無(wú) *****************************
42、**************************************************/ void Int0() interrupt 0 { Delay1ms(10); if(K3==0) { TR0=~TR0; SetPlace=0; } 附錄三:元器件清單 名稱(chēng) 規(guī)格 數(shù)量 單片機(jī) STC89C52 1 液晶顯示屏 LCD1602 1 時(shí)鐘芯片 DS1302 1 開(kāi)關(guān)按鈕 4 晶振管 12MHZ 1 晶振管 36MHZ 1 電阻 1KΩ 1 電容 22PF 2 電容 0.1μF 1 電容 10μF 1 電位器 1 附錄四:實(shí)物圖 28
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案