




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于stc89c52單片機的可調(diào)式電子日歷設(shè)計摘 要本論文主要講述了可調(diào)式電子日歷的設(shè)計過程,主要包括硬件設(shè)計和程序設(shè)計。硬件主要包括以stc89c52單片機為主要控制電路、時鐘電路ds1302、顯示模塊和按鍵模塊電路等。程序設(shè)計主要包括:主程序流程圖、按鍵掃描子程序、液晶初始化子程序等。相比于老師要求我們做的“簡易數(shù)字鐘”的設(shè)計要求:1、開機時,顯示12:00:00的時間開始計時;2、 p0.0控制“秒”的調(diào)整,每按一次加1秒; 3、p0.1控制“分”的調(diào)整,每按一次加1分; 4、p0.2控制“時”的調(diào)整,每按一次加1個小時。我們進行了如下拓展:實現(xiàn)日歷和時鐘的顯示并且能夠?qū)δ暝氯諘r分秒進行
2、調(diào)試。關(guān)鍵詞:stc89c52單片機、ds1302、lcd1602目 錄目錄1設(shè)計要求與方案論證21.1 設(shè)計要求:21.2 系統(tǒng)基本方案選擇和論證21.2.1 單片機芯片的選擇方案和論證21.2.2 顯示模塊選擇方案和論證21.2.3 時鐘芯片的選擇方案和論證31.3 電路設(shè)計最終方案決定3系統(tǒng)的硬件設(shè)計與實現(xiàn)32.1 電路設(shè)計框圖32.2 系統(tǒng)硬件概述32.3 主要單元電路的設(shè)計42.3.1 單片機主控制模塊的設(shè)計42.3.2 時鐘電路ds130252.3.3 顯示模塊的設(shè)計62.3.4 按鍵模塊的設(shè)計7系統(tǒng)的軟件設(shè)計83.1 主程序流程圖83.2 按鍵掃描子程序93.3 液晶初始化子程序
3、123.4 軟件測試123.5數(shù)據(jù)計算處理與性能分析:133.5.1加減鍵對時間日期改變處理算法:133.5.2性能分析:13實驗結(jié)論以及實驗心得總結(jié)134.1 實驗結(jié)論:134.2 實驗心得總結(jié):14致謝詞15參考文獻15附錄一 系統(tǒng)電路圖16附錄二 proteus仿真圖17附錄三 系統(tǒng)程序17設(shè)計要求與方案論證1.1 設(shè)計要求: 具有年、月、日、時、分、秒等顯示功能; 具備年、月、日、時、分、秒校準(zhǔn)功能;1.2 系統(tǒng)基本方案選擇和論證1.2.1 單片機芯片的選擇方案和論證方案一:采用89c51芯片作為硬件核心,采用flash rom,內(nèi)部具有4kb rom 存儲空間,能于3v的超低壓工作,
4、而且與mcs-51系列單片機完全兼容,但是運用于電路設(shè)計中時由于不具備isp在線編程技術(shù), 當(dāng)在對電路進行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,對芯片的多次拔插會對芯片造成一定的損壞。方案二:采用stc89c52,片內(nèi)rom全都采用flash rom;能以3v的超底壓工作;同時也與mcs-51系列單片機完全兼容該芯片內(nèi)部存儲器為8kb rom 存儲空間,同樣具有89c51的功能,且具有在線編程可擦除技術(shù),對所下載的程序能夠加密,比較安全。當(dāng)在對電路進行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,不需要對芯片多次拔插,所以不會對芯片造成損壞。所以選擇采用st
5、c89c52作為主控制系統(tǒng)。1.2.2 顯示模塊選擇方案和論證方案一:采用點陣式數(shù)碼管顯示,點陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費,且價格也相對較高,所以不用此種作為顯示。方案二:采用led數(shù)碼管動態(tài)掃描,雖然led數(shù)碼管價格適中,但要顯示多個數(shù)字所需要的個數(shù)偏多,功耗較大,所以也不用此種作為顯示。方案三:采用lcd液晶顯示屏,液晶顯示屏的顯示功能強大,可顯示大量文字,圖形,顯示多樣,清晰可見,與普通數(shù)碼管相比功耗較小,硬件連接簡單。所以顯示部分采用1602液晶顯示。1.2.3 時鐘芯片的選擇方案和論證方案一:直接采用單片機定時計數(shù)器提供秒信
6、號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實現(xiàn)的時間誤差較大。所以不采用此方案。方案二:采用ds1302時鐘芯片實現(xiàn)時鐘,ds1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、周、月、年一級閏年補償?shù)哪赀M行計數(shù),而且精度高,ram作為數(shù)據(jù)暫存區(qū),工作電壓2.5v5.5v范圍內(nèi),2.5v時耗電小于300na.1.3 電路設(shè)計最終方案決定綜上各方案所述,對此次作品的方案選定:采用stc89c52作為主控制系統(tǒng);ds1302提供時鐘;lcd1602液晶作為顯示 系統(tǒng)的硬件設(shè)計與實現(xiàn)2.1 電路設(shè)計框圖圖1電路設(shè)計框圖2.2 系統(tǒng)硬件概述本
7、電路是由stc89c52單片機為控制核心,具有在線編程功能,低功耗,能在3v超低壓工作;時鐘電路由ds1302提供,它是一種高性能、低功耗、帶ram的實時時鐘電路,它可以對年、月、日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5v5.5v。采用三線接口與cpu進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或ram數(shù)據(jù)。ds1302內(nèi)部有一個31*8的用于臨時性存放數(shù)據(jù)的ram寄存器??僧a(chǎn)生年、月、日、時、分、秒,具有使用壽命長,精度高和低功耗等特點,同時具有掉電自動保存功能,本電路采用ds1302單字節(jié)傳送方式實現(xiàn)與主控機之間數(shù)據(jù)的傳送;顯示部分由1602構(gòu)成。2.3 主要
8、單元電路的設(shè)計2.3.1 單片機主控制模塊的設(shè)計stc89c52單片機為40引腳雙列直插芯片,有四個i/o口p0,p1,p2,p3, mcs-51單片機共有4個8位的i/o口(p0、p1、p2、p3),每一條i/o線都能獨立地作輸出或輸入。單片機的最小系統(tǒng)如下圖所示,18引腳和19引腳接時鐘電路,xtal1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,xtal2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出.第9引腳為復(fù)位輸入端,接上電容,電阻及開關(guān)后夠上電復(fù)位電路, 如圖-2圖2主控制系統(tǒng)2.3.2 時鐘電路ds13021. ds1302的性能特性圖3示出ds
9、1302的引腳排列圖,其中vcc1為后備電源,vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。ds1302由vcc1或vcc2兩者中的較大者供電。當(dāng)vcc2大于vcc1+0.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ù)傳送被初始化,允許對ds1302進行操
10、作。如果在傳送過程中rst置為低電平,則會終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電動行時,在vcc大于等于2.5v之前,rst必須保持低電平。中有在sclk 為低電平時,才能將rst置為高電平,i/o為串行數(shù)據(jù)輸入端(雙向)。sclk始終是輸入端。 圖3 ds1302的引腳圖2. ds1302數(shù)據(jù)操作原理ds1302在每次進行讀、寫程序前都必須初始化,先把sclk端置“0”,接著把rst端置“1”,最后才給予sclk脈沖。ds1302的控制字,此控制字的位7必須置1,若為0則不能把對ds1302進行讀寫數(shù)據(jù)。對于位6,若對程序進行讀/寫時ram=1,對時間進行讀/寫時,ck=0。位1至位5
11、指操作單元的地址。位0是讀/寫操作位,進行讀操作時,該位為1;該位為0則表示進行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。ds1302的日歷、時間寄存器內(nèi)容:“ch”是時鐘暫停標(biāo)志位,當(dāng)該位為1時,時鐘振蕩器停止,ds1302處于低功耗狀態(tài);當(dāng)該位為0時,時鐘開始運行。“wp”是寫保護位,在任何的對時鐘和ram的寫操作之前,“wp”必須為0。當(dāng)“wp”為1時,寫保護位防止對任一寄存器的寫操作。2.3.3 顯示模塊的設(shè)計1. 1602介紹字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式lcd,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長沙太陽人電子有限公
12、司的1602字符型液晶顯示器為例,介紹其用法。 2. 1602lcd的基本參數(shù)及引腳功能1602lcd分為背光和不帶背光兩種,基控制大部分為hd44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,引腳功能說明1602lcd采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表1所示:編號符號引腳說明編號符號引腳說明1vss電源地9d2數(shù)據(jù)2vdd電源正極10d3數(shù)據(jù)3vl液晶顯示偏壓11d4數(shù)據(jù)4rs數(shù)據(jù)/命令選擇12d5數(shù)據(jù)5r/w讀/寫選擇13d6數(shù)據(jù)6e使能信號14d7數(shù)據(jù)7d0數(shù)據(jù)15bla背光源正極8d1數(shù)據(jù)16blk背光源負極表1:引腳接口說明表第1腳:v
13、ss為地電源。第2腳:vdd接5v正電源。第3腳:vl為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10k的電位器調(diào)整對比度。第4腳:rs為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄器。第5腳:r/w為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當(dāng)rs和r/w共同為低電平時可以寫入指令或者顯示地址,當(dāng)rs為低電平r/w高電平時可以讀忙信號,當(dāng)rs為高電平r/w為低電平時可以寫入數(shù)據(jù)。第6腳:e端為使能端,當(dāng)e端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:d0d7為8位雙向數(shù)據(jù)線。第15腳:背光源正極
14、。第16腳:背光源負極。1602lcd的一般初始化(復(fù)位)過程延時15ms寫指令38h(不檢測忙信號)延時5ms寫指令38h(不檢測忙信號)延時5ms寫指令38h(不檢測忙信號)以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號寫指令38h:顯示模式設(shè)置寫指令08h:顯示關(guān)閉寫指令01h:顯示清屏寫指令06h:顯示光標(biāo)移動設(shè)置寫指令0ch:顯示開及光標(biāo)設(shè)置3.lcd1602液晶顯示 如圖5所示:圖5 lcd液晶顯示2.3.4 按鍵模塊的設(shè)計根據(jù)設(shè)計要求需要選擇四個獨立按鍵分別為選擇、加、減、確定,按鍵模塊如圖6所示:圖6按鍵模塊設(shè)計 系統(tǒng)的軟件設(shè)計3.1 主程序流程圖 圖-a 主程序流程圖主程序:
15、void main() init(); write_setds(0x80,0x50); write_setds(0x82,0x59); write_setds(0x84,0x10); write_setds(0x86,0x17); write_setds(0x88,0x03);write_setds(0x8a,0x03); write_setds(0x8c,0x10);write_setds(0x90,0xa4);while(1) keyscan(); display(); 3.2 按鍵掃描子程序調(diào)整時間用4個調(diào)整按鈕,1個作為選擇控制用,另外3個分別作為加調(diào)整,減調(diào)整和確定用。時間調(diào)整程序流
16、程圖如圖-b所示:圖-b 時間調(diào)整程序流程圖void set_ds1302()uchar i;write_ds1302(0x8e,0x00);for(i=0;i7;i+)write_ds1302(0x80+2*i,(datetimei/104|(datetimei%10);write_ds1302(0x8e,0x80);/*-讀取當(dāng)前時期時間-*/void gettime()uchar i;for(i=0;i7;i+)datetimei=read_data(0x81+2*i); /*- 時間和日期轉(zhuǎn)換成數(shù)字字符-*/void format_datetime(uchar d,uchar *a)a
17、0=d/10+0;a1=d%10+0;/*- 判斷是否為閏年-*/uchar isleapyear(uint y)return (y%4=0&y%100!=0)|(y%400=0);void refreshweekday()uint i,d,w=5;for(i=2000;i2000+datetime6;i+)d=isleapyear(i) ? 366 : 365;w=(w+d)%7;d=0;for(i=1;idatetime4;i+) d+=monthsdaysi;d+=datetime3;datetime5=(w+d)%7+1;/*- 年月日時分秒+/-*/void datetime_adj
18、ust(char x)switch (adjust_index)case 6: /年if(x= 1&datetime60) datetime6-;monthsdays2=isleapyear(2000+datetime6)? 29:28;if(datetime3monthsdaysdatetime4) datetime3=monthsdaysdatetime4;refreshweekday();break;case 4: /月if(x= 1&datetime41) datetime4-;monthsdays2=isleapyear(2000+datetime6)? 29:28;if(datet
19、ime3monthsdaysdatetime4)datetime3=monthsdaysdatetime4;refreshweekday();break;case 3:/日monthsdays2=isleapyear(2000+datetime6)? 29:28;if(x= 1&datetime30) datetime3-;refreshweekday();break;case 2: /時if(x= 1&datetime20) datetime2-;break;case 1: /秒if(x= 1&datetime10) datetime1-;break; 3.3 液晶初始化子程序 /*初始化*
20、/ void t0_int() interrupt 1th0=-50000/256;tl0=-50000%256;if(+tcount!=2) return;tcount=0;format_datetime(datetime6,lcd_dsy_buffer1+5);format_datetime(datetime4,lcd_dsy_buffer1+8);format_datetime(datetime3,lcd_dsy_buffer1+11);strcpy(lcd_dsy_buffer1+13,weekdatetime5-1);format_datetime(datetime2,lcd_dsy
21、_buffer2+5);format_datetime(datetime1,lcd_dsy_buffer2+8);format_datetime(datetime0,lcd_dsy_buffer2+11);display_lcd_string(0x00,lcd_dsy_buffer1);display_lcd_string(0x40,lcd_dsy_buffer2);3.4 軟件測試可調(diào)電子日歷是多功能的數(shù)字型,可以看當(dāng)前日期,時間。在編寫程序和調(diào)試時出現(xiàn)了較多的問題。最后經(jīng)過多次的模塊子程序的修改,一步一步的完成,最終解決了軟件。3.5數(shù)據(jù)計算處理與性能分析: 3.5.1加減鍵對時間日期改變
22、處理算法:對于年月日,時分秒來說,每個變量的最大值和最小值都不一樣,所以當(dāng)年月份時分秒改變時,進行處理的算法也不一樣,年沒有最大值,所以不用采取“封頂”措施,每次年加一處理時,直接自加,而對于月份來說,月份是不能超過13的,所以當(dāng)月份自加到13時要重新置1,具體處理見程序,在每個語句后,我都有分析注釋出來。1.3時分秒進位算法當(dāng)秒,分達到60時,向分進位,且秒數(shù)置零,從新開始計數(shù)。當(dāng)時達到24時,也一樣處理。1.4年月日進位算法因為每個月份的天數(shù)都不同,所以事先先設(shè)定一數(shù)組:dayofmonth=31,28,31,30,31,30,31,31,30,31,30,31用以判定12個月的最大值,接
23、著判斷天數(shù),當(dāng)超過本月最大天數(shù)時,月份加一,且天數(shù)要置1。月份判斷比較簡單,只要超過12,年份就加1,月份置1。3.5.2性能分析: 首先,lcd能夠正確的顯示1302芯片上面的時間和日期。其次,可以通過三個按鍵: k1, k2和k3鍵對電子鐘進行時間和日期的調(diào)整。按k1鍵進行校時,可以分別對時及分進行單獨校時,使其校正到標(biāo)準(zhǔn)時間,校時時需要校正哪一位哪一位就閃爍。按k2鍵是對閃爍位進行加一的操作。按k3鍵是對閃爍位進行減一的操作。多次按k1鍵,當(dāng)全部閃爍位全閃爍完畢時,就可以退出調(diào)整模式。實驗結(jié)論以及實驗心得總結(jié)4.1 實驗結(jié)論:1、在該電子鐘的設(shè)計中修改定時或調(diào)整時間時采用了閃爍,在編程上
24、,首先進行了初始化定義了程序的入口地址以及中斷的入口地址,在主程序的開始定義了一組固定單元用來存儲計數(shù)的秒,分,時以及定時時間的序號等。其次,時,分,秒顯示用了軟件譯碼(查表)的方式,再用了一段固定的程序段進行進制轉(zhuǎn)化。最后,用查詢方式對按鍵進行判斷,若有鍵按下,則進行軟件延時消抖,避免了抖動引起的干擾,執(zhí)行相應(yīng)的定時,選時或調(diào)時程序段。對當(dāng)前時間或定時時間修改后又返回到最初的顯示程序段,如此循環(huán)下去。2、在硬件上,選用ds1302,lcd1602相結(jié)合,首先ds1302內(nèi)含有一個實時時鐘/日歷和31字節(jié)靜態(tài)ram通過簡單的串行接口與單片機進行通信實時時鐘/日歷電路提供秒分時日日期月年的信息每
25、月的天數(shù)和閏年的天數(shù)可自動調(diào)整時鐘操作,這樣讀取數(shù)據(jù)簡單。其次,選用lcd1602進行顯示時,數(shù)據(jù)位串行輸入,接口連線少,低功耗,顯示清晰。并且本實驗的電子鐘即要實現(xiàn)時間的現(xiàn)實,還要實現(xiàn)日期的現(xiàn)實,所以若是運用數(shù)碼管進行顯示的話,就算運用動態(tài)顯示,所占用的io口多,并且所需的數(shù)碼管個數(shù)多,硬件復(fù)雜。3、proteus是一個非常好用的仿真軟件,其具有強大的電路原理圖繪制功能,且可以實現(xiàn)模擬電路仿真、數(shù)字電路仿真、單片機及其外圍電路組成的系統(tǒng)仿真、鍵盤、lcd系統(tǒng)仿真等多種功能;和keil聯(lián)合使用時可以檢測所編寫的程序的正確與否。將keil和proteus聯(lián)合起來使用是實現(xiàn)電子設(shè)計制作的初步階段,
26、可避免在實際的硬件操作中因為電路原理圖或向單片機燒錄的程序有誤而造成的難以修改的為題。4.2 實驗心得總結(jié):1、通過本次單片機實訓(xùn),我們不僅再次鞏固復(fù)習(xí)了去年暑假里參加電子設(shè)計賽時學(xué)到的知識,還在老師同學(xué)的幫助下,進一步了解熟悉了ds1302,lcd1602的使用,及單片機的組成及其強大和不足。盡管由于忙于考研中間需要熬夜來完成各種過程,但整個過程是快樂而興奮的!2、其次,再次鞏固了keil c51工程文件的建立,程序編寫以及編譯的掌握程度。最重要的是,因為只是水平有限,要自己編寫一整個c程序還是很難必須查閱相關(guān)資料,但是最終we make it!我們很快樂!3、更加熟悉掌握了proteus的
27、使用方法,再次從實際操作中認識到proteus在仿真方面的優(yōu)越性,激發(fā)了自己學(xué)習(xí)proteus的興趣;4、因為自己要修改程序,所以單單花費在程序分析的時間就很多,為了更好的理解程序,我把每句主要程序的后面都注釋了該語句的意思,詳情可以見程序清單,發(fā)現(xiàn)注釋語義的工作量也是非常大的。寫實驗報告時,每個模塊的流程圖都是自己畫的,用word文檔畫圖真的很麻煩,而且不是很美觀。因為時間比較倉促,流程圖寫的條理性不夠,不過相信以后多多練習(xí),就可以做得更好。5、盡管有參加電子設(shè)計大賽的經(jīng)歷了,但是可能由于近一年時間沒有接觸單片機,編程,看程序的原因了,在整個過程中還是遇到了很多故障,不過通過各種渠道(比如網(wǎng)
28、絡(luò),請教同學(xué),老師等等)解決了一些故障,雖然沒有全部解決,但能在短短一周內(nèi)通過此次作業(yè),實現(xiàn)電子鐘的功能,還是有點成就感的。在解決這些問題的過程中發(fā)現(xiàn)網(wǎng)絡(luò)確實是一個很好的學(xué)習(xí)平臺,利用前人的經(jīng)驗可以提高自己的解決實際問題的能力。通過這一個多禮拜的學(xué)習(xí)實踐,使我們對所學(xué)的知識進行了系統(tǒng)的復(fù)習(xí)和鞏固,在以前學(xué)習(xí)中不夠清晰的概念得到了更好的理解。致謝詞感謝學(xué)院,感謝王春梅老師再次給我們提供了一個展現(xiàn)自己的舞臺,給我們一次難得煅煉的機會,使得我們的動手能力和專業(yè)技能都有了很大的提高。在設(shè)計和制作的過程中,我們深切的體會到,實踐是理論運用的最好檢驗和團隊合作的重要性,這一次的設(shè)計是對我們所學(xué)知識的一次綜
29、合性檢測,無論是動手能力還是理論知識運用能力都得到了提高,同時加深了我們對網(wǎng)絡(luò)資源的認識,大大提高了查閱資料的效率,使我們有充足的時間投入到電路設(shè)計當(dāng)中。在做作品的日子里得到了王春梅老師的悉心指導(dǎo),在此向我們的王春梅師致以誠摯的謝意。參考文獻1:張毅剛,彭喜元,姜守達,喬立言.新編mcs-51單片機應(yīng)用設(shè)計哈爾濱工業(yè)大學(xué)出版社,20082:馬忠梅.單片機的c語言應(yīng)用設(shè)計 北京航空航天大學(xué)出版社 20083:王靜霞.單片機應(yīng)用技術(shù),電子工業(yè)出版社, 2009.4:: 張道德.單片機接口技術(shù),中國水利水電出版社 20075:石生.電路基本分析,高等教育出版社20086:譚浩強.c語言程序設(shè)計(第2
30、版),清華大學(xué)出版社.7:胡宴如,耿蘇燕.模擬電子技術(shù)高等教育出版社20008:譚永紅,雷躍,莫振棟電子線路實驗進階教程北京航空航天大學(xué)出版 20089:劉國巍,周曉萍,周莉數(shù)字電子技術(shù)基礎(chǔ),國防科技大學(xué)出版社200910:張永楓,單片機應(yīng)用實訓(xùn)教程北京:清華大學(xué)出版社,2008.11:劉守義,單片機應(yīng)用技術(shù)(第2版)西安電子科技大學(xué)出版社,200712:先鋒工作室單片機程序設(shè)計實例北京:清華大學(xué)出版社,200313:廣州周立功單片機發(fā)展有限公司,keil c51使用技巧及實戰(zhàn),200314:李群芳,單片機微型計算機與接口技術(shù)(第2版)北京:電子工業(yè)出版15:徐瑋,c51單片機高效入門,北京:
31、機械工業(yè)出版社,2006.附錄一 系統(tǒng)電路圖附圖1系統(tǒng)電路圖附錄二 proteus仿真圖附圖2 proteus仿真圖附錄三 系統(tǒng)程序源程序如下:#include #include #include#define uchar unsigned char#define uint unsigned intsbit sda=p10;/ ds1302數(shù)據(jù)線sbit clk=p11;/ds1302時鐘線sbit rst=p12; /ds1302復(fù)位線sbit rs=p20;sbit rw=p21;sbit en=p22;sbit k1=p34; / 選擇sbit k2=p35; / 加sbit k3=p3
32、6; / 減sbit k4=p37; / 確定void display_lcd_string(uchar p,uchar *s);uchar tcount=0;/一年中每個月的天數(shù),2月的天數(shù)由年份決定uchar monthsdays=0,31,0,31,30,31,30,31,31,30,31,30,31;uchar *week=sun,mon,tus,wen,thu,fri,sat;/周日,周一到周六uchar lcd_dsy_buffer1=date 00-00-00 ; /lcd顯示緩沖uchar lcd_dsy_buffer2=time 00-00-00 ;uchar datetim
33、e7; /所讀取的日期時間char adjust_index=-1; /當(dāng)前調(diào)節(jié)的時間:秒,分,時,日,uchar change_flag=-mhdm-y; uchar read_lcd_state(); void lcd_busy_wait(); void write_lcd_data(uchar dat); void write_lcd_command(uchar cmd); void init_lcd(); void set_lcd_pos(uchar p); void delayms(uint x) uchar i;while(x-) for(i=0;i120;i+); uchar r
34、ead_lcd_state() uchar state;rs=0;rw=1;en=1;delayms(1);state=p0;en=0;delayms(1);return state; void lcd_busy_wait()while(read_lcd_state()&0x08)=0x80);delayms(5);void write_lcd_data(uchar dat) /寫數(shù)據(jù)lcd_busy_wait();rs=1;rw=0;en=0;p0=dat;en=1;delayms(1);en=0;void write_lcd_command(uchar cmd)/寫命令lcd_busy_w
35、ait();rs=0;rw=0;en=0;p0=cmd;en=1;delayms(1);en=0;void init_lcd()/lcd初始化write_lcd_command(0x38); delayms(1);write_lcd_command(0x01); delayms(1);write_lcd_command(0x06); delayms(1);write_lcd_command(0x0c); delayms(1);display_lcd_string(0x00,zhongzhoudaxue);/delayms(1000);display_lcd_string(0x40,dian z
36、i ri li);delayms(2000);void set_lcd_pos(uchar p)write_lcd_command(p|0x80);void display_lcd_string(uchar p,uchar *s)uchar i;set_lcd_pos(p);for(i=0;i16;i+)write_lcd_data(si);delayms(1);/*-向ds1302寫入一字節(jié)-*/void ds1302_write_byte(uchar x) uchar i; for(i=0;i=1; /*-從ds1302讀取一字節(jié)-*/uchar ds1302_read_byte()uch
37、ar i,b,t;for(i=0;i=1;t=sda;b|=t7;clk=1;clk=0; return b/16*10+b%16;/*-從ds1302指定位置數(shù)據(jù)-*/uchar read_data(uchar addr)uchar dat;rst=0;clk=0;rst=1;ds1302_write_byte(addr);dat=ds1302_read_byte();clk=1;rst=0;return dat;/*-向ds1302某地址寫入數(shù)據(jù)-*/void write_ds1302(uchar addr,uchar dat)clk=0;rst=1;ds1302_write_byte(a
38、ddr);ds1302_write_byte(dat);clk=0;rst=0;/*- 設(shè)置時間-*/void set_ds1302()uchar i;write_ds1302(0x8e,0x00);for(i=0;i7;i+)write_ds1302(0x80+2*i,(datetimei/104|(datetimei%10);write_ds1302(0x8e,0x80);/*-讀取當(dāng)前時期時間-*/void gettime()uchar i;for(i=0;i7;i+)datetimei=read_data(0x81+2*i); /*- 時間和日期轉(zhuǎn)換成數(shù)字字符-*/void forma
39、t_datetime(uchar d,uchar *a)a0=d/10+0;a1=d%10+0;/*- 判斷是否為閏年-*/uchar isleapyear(uint y)return (y%4=0&y%100!=0)|(y%400=0);void refreshweekday()uint i,d,w=5;for(i=2000;i2000+datetime6;i+)d=isleapyear(i) ? 366 : 365;w=(w+d)%7;d=0;for(i=1;idatetime4;i+) d+=monthsdaysi;d+=datetime3;datetime5=(w+d)%7+1;/*-
40、 年月日時分秒+/-*/void datetime_adjust(char x)switch (adjust_index)case 6: /年if(x= 1&datetime60) datetime6-;monthsdays2=isleapyear(2000+datetime6)? 29:28;if(datetime3monthsdaysdatetime4) datetime3=monthsdaysdatetime4;refreshweekday();break;case 4: /月if(x= 1&datetime41) datetime4-;monthsdays2=isleapyear(20
41、00+datetime6)? 29:28;if(datetime3monthsdaysdatetime4)datetime3=monthsdaysdatetime4;refreshweekday();break;case 3:/日monthsdays2=isleapyear(2000+datetime6)? 29:28;if(x= 1&datetime30) datetime3-;refreshweekday();break;case 2: /時if(x= 1&datetime20) datetime2-;break;case 1: /秒if(x= 1&datetime10) datetime
42、1-;break; /*- 定時器每秒刷新lcd顯示-*/void t0_int() interrupt 1th0=-50000/256;tl0=-50000%256;if(+tcount!=2) return;tcount=0;format_datetime(datetime6,lcd_dsy_buffer1+5);format_datetime(datetime4,lcd_dsy_buffer1+8);format_datetime(datetime3,lcd_dsy_buffer1+11);strcpy(lcd_dsy_buffer1+13,weekdatetime5-1);format
43、_datetime(datetime2,lcd_dsy_buffer2+5);format_datetime(datetime1,lcd_dsy_buffer2+8);format_datetime(datetime0,lcd_dsy_buffer2+11);display_lcd_string(0x00,lcd_dsy_buffer1);display_lcd_string(0x40,lcd_dsy_buffer2);/*- 鍵盤中斷-*/void ex_int0() interrupt 0if(k1=0)/選擇調(diào)整對象:年,月,日,時,分,秒while(k1=0);if(adjust_in
44、dex=-1|adjust_index=1) adjust_index=7;adjust_index-;if(adjust_index=5) adjust_index=4;lcd_dsy_buffer213=;lcd_dsy_buffer214=change_flagadjust_index;lcd_dsy_buffer215=;elseif(k2=0) / 加while (k2=0); datetime_adjust(1);elseif(k3=0) / 減while (k3=0); datetime_adjust(-1);elseif(k4=0) / 確定while(k4=0);set_ds
45、1302();/調(diào)整后的時間寫入ds1302lcd_dsy_buffer213= ;lcd_dsy_buffer214= ;lcd_dsy_buffer215= ;adjust_index=-1;/*-主程序-*/void main()init_lcd();/lcd初始化ie=0x83; / 允許int0,t0中斷ip=0x01;it0=0x01;tmod=0x01;th0=-50000/256;tl0=-50000%256;tr0=1; while(1)if(adjust_index=-1) gettime();g an employment tribunal claiemployment
46、tribunals sort out disagreements between employers and employees.you may need to make a claim to an employment tribunal if: you dont agree with the disciplinary action your employer has taken against you your employer dismisses you and you think that you have been dismissed unfairly.for more informa
47、tion about dismissal and unfair dismissal, seedismissal.you can make a claim to an employment tribunal, even if you haventappealedagainst the disciplinary action your employer has taken against you. however, if you win your case, the tribunal may reduce any compensation awarded to you as a result of your failure to appeal.remember that in most ca
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西傳媒職業(yè)學(xué)院《交通系統(tǒng)工程動畫設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南高爾夫旅游職業(yè)學(xué)院《數(shù)字系統(tǒng)設(shè)計及實踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖州學(xué)院《廣播電視播音主持技巧二》2023-2024學(xué)年第二學(xué)期期末試卷
- 合肥職業(yè)技術(shù)學(xué)院《鋼筋混凝土及砌體結(jié)構(gòu)課程設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 標(biāo)準(zhǔn)雇傭勞動合同范本
- 購銷合同標(biāo)準(zhǔn)樣本
- 企業(yè)與農(nóng)民輪換工勞動合同范本
- 河道清理維護合同書范文
- 藝人形象代言知識產(chǎn)權(quán)許可合同
- 搪瓷制品的國內(nèi)外標(biāo)準(zhǔn)對比分析考核試卷
- 最新《橋梁工程》梁式橋和板式橋設(shè)計課件
- 2023年揚州市職業(yè)大學(xué)單招職業(yè)適應(yīng)性測試筆試題庫及答案解析
- 供銷聯(lián)社審計:問題發(fā)現(xiàn)與整改情況報告
- 昆醫(yī)大康復(fù)治療技術(shù)課件09運動想象療法
- 建筑冷熱源素材樣本
- 胸椎小關(guān)節(jié)紊亂診斷與治療-課件
- Unit1Developingideaslittlewhitelies課件-高中英語外研版必修第三冊
- Unit 2 Listening and speaking 課件-高中英語人教版(2019)選擇性必修第二冊
- 員工面試登記表
- 鋼棧橋施工方案型鋼
- PySide學(xué)習(xí)教程
評論
0/150
提交評論