電子萬年歷課程設(shè)計報告_第1頁
電子萬年歷課程設(shè)計報告_第2頁
電子萬年歷課程設(shè)計報告_第3頁
電子萬年歷課程設(shè)計報告_第4頁
電子萬年歷課程設(shè)計報告_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余12頁可下載查看

下載本文檔

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

文檔簡介

1、機(jī)械與電氣工程學(xué)院單片機(jī)原理及應(yīng)用技術(shù)課程設(shè)計報告姓 名:徐聰曉學(xué) 號:1021090141班 級:10電自1班指導(dǎo)教師:高曉紅 岑理章 17 / 17文檔可自由編輯打印課題名稱 電子萬年歷1 設(shè)計任務(wù)與要求1.1 基本要求1、用字符型液晶顯示模塊LCD1602顯示萬年歷的日期/時間等,如下圖所示(僅供參考,可個性化差異設(shè)計,如顯示學(xué)號等):2012/05/01 XCX16:47:58 01412、單片機(jī)與實時時鐘芯片DS1302之間通過SPI接口實現(xiàn)“日期/時間”數(shù)據(jù)的采集。1.2 擴(kuò)展功能用34行列式鍵盤進(jìn)行校時,共有“1、2、3、4、5、6、7、8、9、0” 、“校時(閃爍)”和“(年/

2、月/日/時/分/秒)切換”等十二個按鍵。2 系統(tǒng)基本模塊方案的選擇與論證2.1技術(shù)可行性隨著國內(nèi)超大規(guī)模集成電路的出現(xiàn),微處理器及其外圍芯片有了迅速的發(fā)展。集成技術(shù)的最新發(fā)展之一是將CPU和外圍芯片,如程序存儲器、數(shù)據(jù)存儲器、并行I/O口、串行I/O口、定時/計數(shù)器、中斷控制器及其他控制部件集成在一個芯片之中,制成單片計算機(jī)(Single-Chip Microcomputer)。而近年來推出的一些高檔單片機(jī)還包括有許多特殊功能單元,如A/D、D/A轉(zhuǎn)換器、調(diào)制解調(diào)器、通信控制器、鎖相環(huán)、DMA、浮點運(yùn)算單元、PWM控制輸出單元、PWM輸出時的死區(qū)可編程控制功能等。因此,只要外加一些擴(kuò)展電路及必

3、要的通道接口就可以構(gòu)成各種計算機(jī)應(yīng)用系統(tǒng),如工業(yè)流水線控制系統(tǒng)、作為家用電器的主控制器、分布式控制系統(tǒng)的終端節(jié)點或作為其主控制節(jié)點起中繼的作用、數(shù)據(jù)采集系統(tǒng)、自動測試系統(tǒng)等。 單片機(jī)的出現(xiàn),并在各技術(shù)領(lǐng)域中得到如此迅猛的發(fā)展,與單片機(jī)構(gòu)成計算機(jī)應(yīng)用系統(tǒng)所形成的下述特點有關(guān):1、單片機(jī)構(gòu)成的應(yīng)用系統(tǒng)有較大的可靠性。這些可靠性的獲得除了依靠單片機(jī)芯片本身的高可靠性以及應(yīng)用有最少的聯(lián)接外,還可以方便地采用軟、硬件技術(shù)。2、系統(tǒng)擴(kuò)展、系統(tǒng)配置較典型、規(guī)范,容易構(gòu)成各種規(guī)模的應(yīng)用系統(tǒng),應(yīng)用系統(tǒng)有較高的軟、硬件利用系數(shù)。3、由于構(gòu)成的應(yīng)用系統(tǒng)是一個計算機(jī)系統(tǒng),相當(dāng)多的測、控功能由軟件實現(xiàn),故具有柔性特征,

4、不須改變硬件系統(tǒng)就能適當(dāng)?shù)馗淖兿到y(tǒng)功能。4、有優(yōu)異的性能、價格比。2.2方案論證1.單片機(jī)的選擇和論證:采用傳統(tǒng)的AT89C51作為電機(jī)的控制核心。單片機(jī)算術(shù)運(yùn)算功能強(qiáng),軟件編程靈活、自由度大,可用軟件編程實現(xiàn)各種算法和邏輯控制,并且由于其功耗低、體積小、技術(shù)成熟和成本低等優(yōu)點,使其在各個領(lǐng)域應(yīng)用廣泛。2.顯示的選擇和論證方案:方案一:采用LCD數(shù)碼管動態(tài)掃描,LED數(shù)碼管價格適中,對顯示數(shù)字最合適,而且采用動態(tài)掃描法和單片機(jī)連接時,占用的單片機(jī)口線少,但這里顯示為數(shù)多,所要求是數(shù)碼管多,成本高。方案二:采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字,圖形,顯示多樣,清晰可見,

5、雖價格昂貴,但接口線多,所以在此設(shè)計中采用LED液晶顯示屏。3.時鐘芯片的選擇和論證:方案一:采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及潤年補(bǔ)償?shù)哪杲嫈?shù),而且精度高,結(jié)果簡單,所以采用DS1302時鐘芯片。方案二:直接采用單片機(jī)定時計數(shù)器提供秒信號,實用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實現(xiàn)的時間誤差較大。且算法復(fù)雜,所以不采用此方案。經(jīng)論證本次設(shè)計采用AT89c51作為主控制系統(tǒng),DS1302提供時鐘,采用LED液晶作為顯示。3 硬件設(shè)計3.1顯示模塊的選擇LCD1

6、602主要技術(shù)參數(shù):顯示容量162字符芯片工作電壓4.55.5V工作電流2.0mA(5.0V)模塊最佳工作電壓5.0V字符尺寸2.954.35(WH)mm接口信號說明:編號符號引腳說明編號符號引腳說明1VSS電源地9D2DateI/02VDD電源正極10D3DateI/03VL液晶顯示偏壓信號11D4DateI/04RS數(shù)據(jù)/命令選擇端(H/L)12D5DateI/05R/W讀/寫選擇端(H/L)13D6DateI/06E使能信號14D7DateI/07D0DateI/015BLA背光源正極8D1DateI/016BLK背光源負(fù)極控制器接口說明基本操作時序: 讀狀態(tài): 輸入: RS=L,RW=

7、H,E=H 輸出: D0D7=狀態(tài)字 寫指令: 輸入: RS=L,RW=L, D0D7指令碼,E= 高脈沖 輸出:無 讀數(shù)據(jù): 輸入: RS=H,RW=H,E=H 輸出: D0D7=數(shù)據(jù) 寫數(shù)據(jù): 輸入: RS=H,RW=L,D0D7=數(shù)據(jù),E= 高脈沖 輸出: 無 狀態(tài)字說明STA7D7STA6D6STA5D5STA4D4STA3D3STA2D2STA1D1STA0D0STA0-6當(dāng)前數(shù)據(jù)地址指針的數(shù)值STA7 讀寫操作使能1: 禁止 0: 允許注:對控制器每次進(jìn)行讀寫操作之前,都必須進(jìn)行讀寫檢測,確保STA為0指令說明 初始化設(shè)置 顯示模式設(shè)置指令碼功能00111000設(shè)置162顯示,57

8、點陣,8位數(shù)據(jù)接口 顯示開/關(guān)及光標(biāo)出設(shè)置指令碼功能00001DCBD=1開顯示;D=0 關(guān)顯示C=1 顯示光標(biāo); C=0 不顯示光標(biāo)B=1 光標(biāo)閃爍; B=0 光標(biāo)不顯示000001NSN=1 當(dāng)讀或?qū)懸粋€字符后地址指針加一,且光標(biāo)加一N=0 當(dāng)讀或?qū)懸粋€字符后地址指針減一,且光標(biāo)減一S=1 當(dāng)寫一個字符,整屏顯示左移(N=1)或右移(N=0),以得到光標(biāo)不移動而屏幕移動的效果S=0 當(dāng)寫一個字符,整屏顯示不移動 數(shù)據(jù)指針設(shè)置指令碼功能80H+地址碼(0-27H,40H-67H)設(shè)置數(shù)據(jù)地址指針3.2鍵盤模塊的選擇使用矩陣式鍵盤。矩陣式鍵盤是由行線和列線組成,按鍵位于行、列的交叉點上,行線、

9、列線分別連接到按鍵開關(guān)的兩端。其特點是簡單且不增加成本,這種鍵盤適合按鍵數(shù)量較多的場合。3.3時鐘電路模塊DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進(jìn)行計時,具有閏年補(bǔ)償功能,工作電壓為2.5V5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進(jìn)行涓細(xì)電流充電的能力。 (1)DS1302的結(jié)

10、構(gòu)及工作原理1.引腳功能及結(jié)構(gòu) DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc10.2V時,Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時,所有的數(shù)據(jù)傳送被

11、初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時,在Vcc2.5V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。SCLK始終是輸入端。2. DS1302的控制字節(jié) 控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。 3.

12、 數(shù)據(jù)輸入輸出(I/O) 在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。 4. DS1302的寄存器 DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式 。 此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,

13、每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。(2)DS1302實時顯示時間的軟硬件 DS1302與CPU的連接需要三條線,即SCLK(7)、I/O(6)、RST(5)。1.DS1302與CPU的連接 實際上,在調(diào)試程序時可以不加電容器,只加一個32.768kHz 的晶振即可。只是選擇晶振時,不同的晶振,誤差也較大。另外,還可以在上面的電路中加入DS18B20,同時顯示實時溫度。只要占用CPU一個口線即可。 LCD還可以換成LED,

14、還可以使用北京衛(wèi)信杰科技發(fā)展有限公司生產(chǎn)的10位多功能8段液晶顯示模塊LCM101,內(nèi)含看門狗(WDT)/時鐘發(fā)生器及兩種頻率的蜂鳴器驅(qū)動電路,并有內(nèi)置顯示RAM,可顯示任意字段筆劃,具有34線串行接口,可與任何單片機(jī)、IC接口。功耗低,顯示狀態(tài)時電流為2A (典型值),省電模式時小于1A,工作電壓為2.4V3.3V,顯示清晰。 2.DS1302實時時間流程 DS1302 與微處理器進(jìn)行數(shù)據(jù)交換時,首先由微處理器向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯1,如果D7=0,則禁止寫DS1302,即寫保護(hù);D6=0,指定時鐘數(shù)據(jù),D6=1,指定RAM數(shù)據(jù);D5D1指定輸入或輸出的特

15、定寄存器;最低位LSB(D0)為邏輯0,指定寫操作(輸入), D0=1,指定讀操作(輸出)。 在DS1302的時鐘日歷或RAM進(jìn)行數(shù)據(jù)傳送時,DS1302必須首先發(fā)送命令字節(jié)。若進(jìn)行單字節(jié)傳送,8位命令字節(jié)傳送結(jié)束之后,在下2個SCLK周期的上升沿輸入數(shù)據(jù)字節(jié),或在下8個SCLK周期的下降沿輸出數(shù)據(jù)字節(jié)。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;再一類為突發(fā)方式下的RAM寄存器,在此方式下可一次性讀、寫所有的RAM的31個字節(jié)。 尤其是備用電源B1,可以用電池或者超級電容

16、器(0.1F以上)。雖然DS1302在主電源掉電后的耗電很小,但是,如果要長時間保證時鐘正常,最好選用小型充電電池??梢杂美鲜诫娔X主板上的3.6V充電電池。如果斷電時間較短(幾小時或幾天)時,就可以用漏電較小的普通電解電容器代替。100 F就可以保證1小時的正常走時。DS1302在第一次加電后,必須進(jìn)行初始化操作。初始化后就可以按正常方法調(diào)整時間。(3) 結(jié)論 DS1302 存在時鐘精度不高,易受環(huán)境影響,出現(xiàn)時鐘混亂等缺點。DS1302可以用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄。這種記錄對長時間的連續(xù)測控系統(tǒng)結(jié)果的分析及對異常數(shù)據(jù)出現(xiàn)的原因

17、的查找具有重要意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時采樣或定時采樣,沒有具體的時間記錄,因此,只能記錄數(shù)據(jù)而無法準(zhǔn)確記錄其出現(xiàn)的時間;若采用單片機(jī)計時,一方面需要采用計數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費(fèi)單片機(jī)的資源,而且,某些測控系統(tǒng)可能不允許。但是,如果在系統(tǒng)中采用時鐘芯片DS1302,則能很好地解決這個問題。(1) 時鐘芯片DS1302的工作原理DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如下圖4所示。圖5為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對DS1302進(jìn)行讀

18、寫數(shù)據(jù)。對于位6,若對程序進(jìn)行讀/寫時RAM=1,對時間進(jìn)行讀/寫時,CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時,該位為1;該位為0則表示進(jìn)行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表6為DS1302的日歷、時間寄存器內(nèi)容:“CH”是時鐘暫停標(biāo)志位,當(dāng)該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時,時鐘開始運(yùn)行。“WP”是寫保護(hù)位,在任何的對時鐘和RAM的寫操作之前,WP必須為0。當(dāng)“WP”為1時,寫保護(hù)位防止對任一寄存器的寫操作。(2) DS1302的控制字節(jié)DS1302的控制字如表2-1所示。控制字節(jié)的高有效位(位7)必須是邏輯1

19、,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出 RAM RD 1 A4 A3 A2 A1 A0 / CK /WR表2-1 DS1302的控制字格式(3) 數(shù)據(jù)輸入輸出(I/O)在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。如下圖2-2所示圖2-2 DS1

20、302讀/寫時序圖(4) DS1302的寄存器DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時間寄存器及其控制字見表2-2。表2-2 DS1302的日歷、時間寄存器此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所

21、有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。 圖 2-3示出DS1302的引腳排列,其中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.KHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳

22、送手段。當(dāng)RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RSTS置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電動行時,在Vcc大于等于2.5V之前,RST必須保持低電平。中有在SCLK 為低電平時,才能將RST置為高電平,I/O為串行數(shù)據(jù)輸入端(雙向)。SCLK始終是輸入端。4 軟件設(shè)計4.1 程序設(shè)計電子萬年歷的程序主要包括2個方面的內(nèi)容:一是DS1302從單片機(jī)中讀取數(shù)據(jù)進(jìn)行計數(shù),二是利用按鍵進(jìn)行時間的調(diào)整。AT89C51單片機(jī)主要I/O口的分配。P1.0-P1.2分別接DS1302的CLK,IO,RST端。4.2主程序流程圖:移動光標(biāo)

23、并顯示日期初始化lcd移動光標(biāo)并顯示時間初始化內(nèi)部定時器移動光標(biāo)并顯示溫度初始化DS1302重復(fù)進(jìn)行按鍵掃描從DS1302讀取日期和時間5 設(shè)計體會1、通過本次實驗,因為之前接觸到的電子系統(tǒng)設(shè)計不多,所以一開始,感覺難以入手,就算上網(wǎng)載了很多程序,也看不懂。后來請求同學(xué)的幫助,了解了要對各種芯片編寫程序時首先應(yīng)找到該芯片的數(shù)據(jù)手冊,根據(jù)數(shù)據(jù)手冊上的說明、時序要求及流程圖編寫對應(yīng)程序。2、其次,再次鞏固了Keil C51工程文件的建立,程序編寫以及編譯的掌握程度。最重要的是,因為只是水平有限,要自己編寫C程序很難,但在此實驗中,最大的收獲莫過于看懂別人的程序,分析之后,自己拼湊編寫以實現(xiàn)不同的功

24、能。并且掌握了52C程序的編寫過程。3、因為自己要修改程序,所以單單花費(fèi)在程序分析的時間就很多,為了更好的理解程序,我把每句主要程序的后面都注釋了該語句的意思,詳情可以見程序清單,發(fā)現(xiàn)注釋語義的工作量也是非常大的。寫實驗報告時,每個模塊的流程圖都是自己畫的,用WORD文檔畫圖真的很麻煩,而且不是很美觀。因為時間比較倉促,流程圖寫的條理性不夠,不過相信以后多多練習(xí),就可以做得更好。4、在這次實驗中我遇到了很多故障,不過通過各種渠道解決了一些故障,雖然沒有全部解決,但能在短短一周內(nèi)通過此次作業(yè),實現(xiàn)電子鐘的功能,還是有點成就感的。在解決這些問題的過程中發(fā)現(xiàn)網(wǎng)絡(luò)確實是一個很好的學(xué)習(xí)平臺,利用前人的經(jīng)

25、驗可以提高自己的解決實際問題的能力。通過這一個多禮拜的學(xué)習(xí)實踐,使我對所學(xué)的知識進(jìn)行了系統(tǒng)的復(fù)習(xí)和鞏固,在以前學(xué)習(xí)中不夠清晰的概念得到了更好的理解。相信通過不斷的學(xué)習(xí),能使自己揚(yáng)長補(bǔ)短。附表1:程序#include #include sbit P3_2=P32;sbit P3_3=P33;sbit P3_4=P34;/定義行鍵盤sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;/定義列鍵盤sbit BF=P07;sbit DI=P10;sbit RW=P11;sbit EN=P12;/定義1602控制腳sbit CLK=P37;sb

26、it DATA=P20;sbit CE=P13; /定義ds1302管腳unsigned char year,month,date,hour,minute,second; /年 月 天 時 分 秒中間變量unsigned char key,ziduan; /按鍵中間變量,字位中間變量bit MODE; /設(shè)置模式參數(shù)unsigned char tdly,kdly; /等待時間的中間變量void lcd_wr0(unsigned char datum) /寫1602指令 BF=1; DI=0;RW=1;EN=1; while(BF) _nop_(); RW=0;P0=datum;EN=0;voi

27、d lcd_wr1(unsigned char datum) /寫1602數(shù)據(jù)BF=1;DI=0;RW=1;EN=1;while(BF) _nop_();DI=1;RW=0;P0=datum;EN=0;void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) /寫字符串 x表示水平位置 ,y=0 表示第一行 y=1 表示第二行 if (y = 0) lcd_wr0(0x80 + x); /表示第一行 else lcd_wr0(0xC0 + x); /表示第二行 while (*s) lcd_wr1( *s);

28、 /寫數(shù)據(jù) s +; unsigned char DS1302_rd(unsigned char addr) /讀1302數(shù)據(jù)unsigned char i,datum=0;CE=0;_nop_();_nop_();CLK=0;_nop_();_nop_();CE=1;_nop_();_nop_();for(i=0;i=1;DATA=CY;CLK=1;_nop_();_nop_();for(i=0;i=1;if(DATA) datum|=0x80;CLK=1;_nop_();_nop_();CLK=0;_nop_();_nop_();CE=0;_nop_();_nop_();return(da

29、tum);void DS1302_wr(unsigned char addr,unsigned char datum)/寫1302數(shù)據(jù)unsigned char i;CE=0;_nop_();_nop_();CLK=0;_nop_();_nop_();CE=1;_nop_();_nop_();for(i=0;i=1;DATA=CY;CLK=1;_nop_();_nop_();for(i=0;i=1;DATA=CY;CLK=1;_nop_();_nop_();CLK=0;_nop_();_nop_();CE=0;_nop_();_nop_();void t0_int() interrupt 1/

30、中斷服務(wù)程序TH0=(65536-1000)/256;TL0=(65536-1000)%256; /定時1mstdly+;kdly+;void main()TMOD=0x01; /定時器選擇工作方式1TH0=(65536-1000)/256;TL0=(65536-1000)%256;/重新賦值EA=1; /開總中斷ET0=1;/開定時器0中斷TR0=1; /開定時器0lcd_wr0(0x38);lcd_wr0(0x01);lcd_wr0(0x06);lcd_wr0(0x0C); /初始化1602LCD_Write_String(10,0, XCX); /寫自己的名字必須帶“”LCD_Write

31、_String(10,1, 0141); /寫自己的學(xué)號while(1) key=13;P3_2=0;P3_3=1;P3_4=1; /第一行打開 逐列一一掃描將值付給Keyif(!P1_4) key=1; if(!P1_5) key=2; if(!P1_6) key=3; if(!P1_7) key=4;P3_2=1;P3_3=0;P3_4=1; / 第二行打開同上if(!P1_4) key=5; if(!P1_5) key=6; if(!P1_6) key=7; if(!P1_7) key=8;P3_2=1;P3_3=1;P3_4=0; / 第三行打開同上if(!P1_4) key=9; i

32、f(!P1_5) key=10; if(!P1_6) key=11; if(!P1_7) key=12;if(11=key&kdly200) /按一下s11進(jìn)入設(shè)置模式 等待時間大于200msMODE=!MODE; /按一下進(jìn)入設(shè)置模式,按兩下退出設(shè)置if(MODE)DS1302_wr(0x80,0x80);lcd_wr0(0x02);lcd_wr0(0x0D); /停止DS1302ziduan=0;else if(!MODE) /給1302寫更改后的數(shù)據(jù)lcd_wr0(0x0C);DS1302_wr(0x8E,0x00);DS1302_wr(0x80,second);DS1302_wr(0x

33、82,minute);DS1302_wr(0x84,hour);DS1302_wr(0x86,date);DS1302_wr(0x88,month);DS1302_wr(0x8C,year);DS1302_wr(0x8E,0x80); kdly=0; /掃描時間歸零if(MODE&12=key&kdly200) /進(jìn)入設(shè)置模式后 光標(biāo)移位 /按S12按鍵光標(biāo)右移 移16下位一周期ziduan+;lcd_wr0(0x14);if(8=ziduan) lcd_wr0(0x80+0x40);if(16=ziduan) lcd_wr0(0x80+0x00);ziduan=0;kdly=0;if(MOD

34、E&key200) /進(jìn)入設(shè)置模式后選著設(shè)定的數(shù)值s1s9風(fēng)別對應(yīng)的19switch(ziduan)case 0: year%=16; year+=key*16;lcd_wr0(0x80+0x00);lcd_wr1(0x30+key);ziduan+; break;case 1: year/=16; year+=key;lcd_wr0(0x80+0x01);lcd_wr1(0x30+key);ziduan+; break;case 3: month%=16;month+=key*16;lcd_wr0(0x80+0x03);lcd_wr1(0x30+key);ziduan+;break;case

35、 4: month/=16;month+=key; lcd_wr0(0x80+0x04);lcd_wr1(0x30+key);ziduan+;break;case 6: date%=16;date+=key*16;lcd_wr0(0x80+0x06);lcd_wr1(0x30+key);ziduan+; break;case 7: date/=16;date+=key;lcd_wr0(0x80+0x07);lcd_wr1(0x30+key);ziduan+; lcd_wr0(0x80+0x40);break;case 8: hour%=16;hour+=key*16;lcd_wr0(0x80+0x40);lcd_wr1(0x30+key);ziduan+;break;case 9: hour/=16;hour+=key;lcd_wr0(0x80+0x41);lcd_wr1(0x30+key);ziduan

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論