




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、單片機(jī)課程設(shè)計設(shè)計題目:電子時鐘設(shè)計學(xué) 院_物理與光電工程學(xué)院專 業(yè)一電子科學(xué)與技術(shù) 年級班別08級電子一班 學(xué) 號 3108009109 學(xué)生姓名_指導(dǎo)教師2010年12月18 日目錄一、設(shè)計目的、設(shè)計題目二、設(shè)計任務(wù)、功能描述三、硬件原理分析四、軟件設(shè)計五、程序清單一、設(shè)計目的、設(shè)計題目本設(shè)計的目的是設(shè)計一個實用的電子時鐘,該時鐘能夠?qū)崿F(xiàn)曰常的時鐘顯示,它可 以對年、月、日、周日、時、分、秒進(jìn)行計時,具有閏年補償功能,同時具有時鐘調(diào)整、 鬧鐘等功能。二、設(shè)計任務(wù)、功能描述整體設(shè)計任務(wù):本電子吋鐘設(shè)計首要的工作是結(jié)合以往所學(xué)的單片機(jī)程序編寫理論 和編寫規(guī)則來編寫電子時鐘的軟件部分,編寫時要結(jié)
2、合所配的stm8s105芯片的管腳 功能和其他硬件電路,如ds1302時鐘芯片和lcd 1602液晶顯示屏,該部分運用stvd 單片機(jī)軟件來完成。在編寫完軟件并檢測完正確后用仿真硬件檢測運行檢測程序是否正 確,并凋試。待這一切工作做好后再利用系統(tǒng)板硬件電路來實踐實現(xiàn)軟件功能與硬件的 結(jié)合。三、硬件原理分析電路設(shè)計分析電路原理設(shè)計是基于小系統(tǒng)包括電源電路、復(fù)位電路、按鍵電路、吋鐘電路、lcd液晶顯示驅(qū)動電路、輸出控制電路。電源部分是用直流電源經(jīng)變壓來提供的5v,晶體振蕩器采用的是16mhz的石英晶體振蕩器。部分硬件設(shè)計:(1) 本設(shè)計采用ds1302實時時鐘芯片來進(jìn)行計時,并將1302的數(shù)裾輸入
3、單片機(jī) 進(jìn)行處理,送入lcd1602液晶顯示屏進(jìn)行顯示。(2) 用叫個電位按鍵來實現(xiàn)對電子時鐘的調(diào)試工作,當(dāng)按第一下總控鍵時進(jìn)入中 斷程序,即時鐘的調(diào)整狀態(tài),有兩個電位按鍵分別來調(diào)整時鐘的加和減;第四個按鍵用 來調(diào)整時分秒日月年,按一下調(diào)整秒,連按兩下調(diào)整分,按三下調(diào)整時,四下調(diào)整日, 五下調(diào)整月,六下調(diào)整年,七下退出時間設(shè)罝。(3) 用一個按鍵和其他部件組成的復(fù)位電路與芯片連接來實現(xiàn)整個程序及硬件的 重新復(fù)位功能。部分電路圖如下:1. 1復(fù)位電路本次設(shè)計采川按鍵電平復(fù)位,按鍵電平復(fù)位相當(dāng)于按復(fù)位鍵后,復(fù)位端通過電阻與 vdd電源接通,如下圖:1.2振蕩器和時鐘電路設(shè)計stm8可賴外時鐘或內(nèi)時
4、鐘,當(dāng)使鵬時柵,如果mcu主臟過欄hz,要在選項字節(jié)中 配置等待綳為stm啪時鐘為欄hz,可棚颥f步分頻。其內(nèi)部有3或4位.率 翻器,經(jīng)過校正后其頻賴差理論上可不大刊.5%(頻輪調(diào)器為3位)或0.25%卿微調(diào)器 鱗本次設(shè)計采用常用的內(nèi)部時鐘方式接法:通過在引腳oscin和oscolt兩端跨接晶體 或陶瓷諧振器,再利用芯片內(nèi)部的振蕩電路,就構(gòu)成了穩(wěn)定的a激振蕩器,其發(fā)出的脈 沖直接送入內(nèi)部時鐘電路,如圖所示,外接晶振時,c1和c2的值通常選擇力20_30pf。 cl、c2對頻率有微調(diào)作用,影響振蕩的穩(wěn)定性和起振速度。所采用的晶體或陶瓷諧振器 得頻率選擇0-24mhz。為了減小寄生電容,更好的保證
5、振蕩器穩(wěn)定、可靠的工作,諧振器 和電容蠃盡可能與單片機(jī)芯片靠近安裝。1.3電源因為該電路所需電壓為5v,可直接用電池供應(yīng)或也可以用直流電源供應(yīng),但需經(jīng)過變壓才行。1.4 ds1302實時時鐘芯片ds1302是美國dallas公司推出的一種高性能、低功耗、帶ram的實吋吋鐘電路,它可 以對年、月、日、周日、時、分、秒進(jìn)行計時,具有閏年補償功能,工作電壓為2.5v5.5v。 采用三線接口與cpu進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或ram 數(shù)據(jù)。ds1302內(nèi)部有一個31x8的用于臨時性存放數(shù)據(jù)的ram寄存器。ds1302是ds1202 的升級產(chǎn)品,與ds1202兼容,但增加了
6、主電源/后背電源雙電源引腳,同時提供了對后背電 源進(jìn)行涓細(xì)電流充電的能力。ds1302的引腳排列中vccl為后備電源,vcc2為主電源。在主 電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。ds1302由vccl或vcc2兩者中的較大者供 電。當(dāng) vcc2 大于 vccl+o. 2v 時,vcc2 給 ds1302 供電。當(dāng) vcc2 小于 vccl 時,ds1302 由 vccl供電。xi和x2是振蕩源,外接32. 768khz晶振。rst是復(fù)位/片選線,通過把rst輸 入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯, 允許地址/命令序列送入移位寄存器;其次,r
7、st提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。 當(dāng)rst為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對ds1302進(jìn)行操作。如果在傳送過程 屮kst貫為低電平,則會終止此次數(shù)據(jù)傳送,1/0引腳變?yōu)楦咦钁B(tài)。上電運行時,在vcc彡2. 5v 之前,rst必須保持低電平。只有在sclk為低電平時,才能將rst置為高電平。i/o為串行 數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。sclk始終是輸入端。電路圖如下:vcci sclk i/o cevcc2 ez x1 c x2 gnd 口 4 q p 1ds13o2的夕卜部弓|腳分配1-03 cumxix2晶體振蕩器 及實時 時w31x8 ram1 w:倒計數(shù)謎ds
8、13o2的內(nèi)部結(jié)構(gòu)1.4 lcd1602液晶屏顯示電路1602是一種字符型液晶顯示模塊,專門用于顯示字母、數(shù)字、符號等點陣式lcd,目 前常用16*1, 16*2, 20*2和40*2行等的模塊。下面以某公司的1602字符型液晶顯示器為 例,介紹其用法。一般1602字符型液晶顯示器實物如圖1602lcd分為帶背光和不帶背光兩種,基控制器大部分為hd44780,帶背光的比不帶 背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如丁圖*蘺光癮部uqujt1602lcd采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如下:第1腳:vss為地電源。第2腳:vdd接5v正電源。第3腳:v
9、l為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最商, 對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10k的電位器調(diào)整對比度。第4腳:rs力寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:r/w為讀寫信號線,高電平吋進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)rs和r/w共同為低電平時可以寫入指令或者顯示地址,當(dāng)rs為低電平r/w為高電平時可以讀 忙信號,當(dāng)rs為高電平r/w為低電平時可以寫入數(shù)據(jù)。第6腳:e端為使能端,當(dāng)e端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:dod7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極 1.5輸出控制電路將
10、pb 口用于單片機(jī)和lcd顯示器的數(shù)據(jù)傳輸通道,如下圖所示,通過控制lcd的讀寫 校制端將1302的數(shù)據(jù)顯示出來。芯po1pe1p2po1gf*clpc?pc3:lpooxi<xo1 1000 000 00000000sdceepvm123457 vsvcvtnodocmoofou*j«6l1.6整體布局圖r5 4k7-> pooos1302x2i/oo rd5->pg1-£> pd611 12 工j.3j67zlu_15- 16 17z:19il, 21vssapd3vddapd2rxpd1pdonr8tpeopa1pe1pa2pe2vssiojp
11、61vssvcappe6vddpe5vddio.1pcipc2pb7pc3pb6pcspbsvddi0pb4vssiopb3pb2pgopb1pc7pboxopc6 32.-rysclk68kpbtalvcc2 xi vcc1£> pa5 -o pa4- -c> pa6vccds1302-39 -j8-j635332225 -j6 _2i 82932ie306nd q vod o vee opci o pci o pc3 opbo o pb1 o pb2 o pb3 q pb4 o pbs o pb6 q pb7 olm016l四、軟件設(shè)計分析1、地址空間及端口分配_bo
12、oi rs pc_odr:1; /pc作為lcd的控制端,設(shè)置為輸入 _bool rw pc_odr:2;_bool en pc_odr:3;_bool sclk pa_odr:4;/串行時鐘,輸入輸出控制_bool dio pa_odr:5; /三線接口時的數(shù)據(jù)線 _bool id pa_idr:5;_bool ce pa_odr:6;/作為復(fù)位端口_bool id1 pg_idr:0; m pd6引腳設(shè)置為外部中斷的輸入引腳2、總體架構(gòu)說明該時鐘程序設(shè)計思路如下:(1) 、在程序頭將設(shè)計中的一些10 口進(jìn)行分配并注釋。(2) 、初始化程序,對單片機(jī)的10 口設(shè)置為輸入輸出等,對1302,
13、1602的參數(shù)進(jìn)行設(shè)置, 如設(shè)定時鐘運行為24小時制;將一些未到時鐘設(shè)計功能的功能端口關(guān)閉等。(3) 開始主程序進(jìn)行程序掃描,先掃初始化字子程序初始化ds1302和lcd1602,啟動時 鐘芯片進(jìn)行計時,初始化1602的顯示方式,將分配好的時分秒等數(shù)字調(diào)入到顯示子程序屮。 一一顯示子程序通過分配的空間對應(yīng)口將ds1302吋鐘芯片的數(shù)據(jù)顯示相應(yīng)的吋分秒,年 月口等。一一進(jìn)入按鍵掃描,判斷按鍵是否有變動,若有就根據(jù)設(shè)計程序?qū)ο鄳?yīng)的按鍵按入次數(shù)而進(jìn)行實現(xiàn)相應(yīng)的功能。如進(jìn)入?yún)奸g調(diào)整,中斷進(jìn)入、退出等。一一最后返回主程 序頭重新依次掃描。顯示過程設(shè)有消隱,按鍵通過軟件去斗。(4)、子程序部分。在主程序的
14、調(diào)用卜依據(jù)不同的子程序工能而編寫子程序,有多級肷套。 這些子程序包括顯示子程序、延時子程序、時間計數(shù)子程序、按鍵處理子程序、調(diào)時間子程 序等。3、各子程序功能顯示子程序:將時鐘芯片1302內(nèi)的時鐘數(shù)據(jù)送入單片機(jī)進(jìn)行處理再送入lcd 1602內(nèi)進(jìn) 行顯示,顯示格式為:年/月/日/時/分/秒/星期。延時子程序:該子程序是為了實現(xiàn)1302及1602在讀寫過程屮的上升下降沿讓芯片有足 夠的讀寫時間,以及字符有足夠的顯示時間,同時作為按鍵開關(guān)掃描去抖的延遲時間。時間計數(shù)子程序:該程序功能是調(diào)動ds1302的初始化程序、讀寫程序,并將其內(nèi)部數(shù) 據(jù)送入單片機(jī)內(nèi)進(jìn)行處理。ds1302選擇24小時工作方式,秒計
15、數(shù),走到59后進(jìn)位分,后 變00從新開始計時,分走到59后進(jìn)位時,分從新開始00計時,時走到23,分走到59,秒 走到59后進(jìn)入從新日期周期計時。按鍵處理子程序:該程序進(jìn)行按鍵處理的功能判斷分別對時分秒、年月日等進(jìn)行調(diào)整已 經(jīng)中斷的進(jìn)入與退出等。4、程序清單include "stm8slo5c_s. huchar nl,n2, n3;uchar uo, ul, u2, u3;uchar table = /z20 - -*;uchar tablel= :;uchar table2 = f o', 1, 2'3',' 4, 5',' 6
16、39;, 7',' 8',' 9' uchar table3="montuewedthufrisatsun; uchar table4 = " happy birthday ;/16 個字符uchar table5 = *<««to you"define uint unsigned intdefine uchar unsigned char0x80 /秒寫寄存器地址 0x82/分寫寄存器地址 0x84/時寫寄存器地址 0x86/日寫寄存器地址 0x88/月寫寄存器地址 0x8a/周寫寄存器地址 0x
17、8c/年寫寄存器地址define pb pb_odr define write_second define write_minute define write_hour define write_day define write_month define write_week define write_yeardefine write_protect 0x8e/寫保護(hù)字節(jié)寫寄存器地址define write_chongdian 0x90 /慢充電寄存器地址define read_second define readminute define read hour0x81/秒讀寄存器地址 0x83
18、/分讀寄存器地址 0x85/時讀寄存器地址0x87/日讀寄存器地址0x89/月讀寄存器地址0x8b/周讀寄存器地址0x8d/年讀寄存器地址 /pc作為led的控制端,設(shè)置為輸入define read_day #define read_month #define read_week define read_year _bool rs pc_odr:1: bool rw pc odr:2; bool en pc odr:3; bool sclk pa odr:4; bool dio pa odr:5; bool id pa idr:5; bool ce pa odr:6;/串行時鐘,輸入輸出控制
19、/三線接口時的數(shù)據(jù)線 /復(fù)位bool da od pa ddr:5;bool da cr1 pa cr1:5;bool da cr2 pa cr2:5;,_bool id1pg_idr:0;/將pd6引腳設(shè)置我外部中斷的輸入引腳_bool id2pd_idr:5;_bool id3pg_idr:1;_bool id4pd_idr:6;/鍵盤的輸入/shfm_key(void) uchar lshi; uchar an=0, n=0; doif(!idl)delay(6): if(!idl)while1);lshi=l; an+; if(an=l)write_dsl302 (write_seco
20、nd, 0x80);/先暫停時鐘秒u2=read_dsl302(read_second ); u2=(u2&0x70)»4)*10+(u2&0x0f); write_sfra(6, u2);lcd_wcom(0x80+0x40+7); lcd_wcom(0x38);lcd_wcom(0x0f);/顯示功能開,有光標(biāo)if (an=2)ul=read_dsl302(read_minute); ul=(ul&0x70)»4)*10+(ul&0x0f); write_sfm(3, ul);lcd_wcom(0x80+0x40+4);/顯示分lcd_w
21、com(0x38);lcd_wcom(0x0f);/顯示功能幵,有光標(biāo)if (an=3)u0=read_dsl302(read_hour); u0=(u0&0x70)»4)*10+(u0&0x0f); write_sfra(0, uo);lcd_wcom (0x80+0x40+1) ;/顯示時lcd_wcom(0x38);lcd_wcom(oxof):/顯示功能開,有光標(biāo)if(an=4)n3=read_dsl302(read_day); n3=(n3&0x70)»4)*10+(n3&0x0f); write_sfral (8, n3);lcd
22、_wcom(0x80+9);/顯示日lcd_wcom(0x38);lcd_wcom(oxof);/顯示功能開,有光標(biāo)if(an=5)n2=read_dsl302(read_month); n2= (n2&0x70) »4) *10+ (n2&0x0f); write_sfml(5, n2);lcd_wcom(0x80+6);/顯示月lcd_wcom(0x38);lcd_wcom(oxof) ;/顯示功能開,有光標(biāo)if(an=6)nl=read_dsl302(read_year):nl=(nl&0x70) »4)*10+(nl&0x0f); w
23、rite_sfml (2, nl);lcd_wcom (0x80+3);/顯示年lcd_wcom(0x38);lcd_wcom(0x0f) ;/顯示功能開,有光標(biāo)if(an=7)lshi=0;an=0;write_dsl302(write_second, 0x00);/從新幵啟時鐘lcd_wcom(0x38); lcd_wcom(0x0c); n=l;switch(an)easel:if(id2=0)delay (4);if(id2=0) while(!id2);_asm("n0p");jia_key(write_second, read_second, 6, 1);_as
24、m("nop");if(id3=0)/秒的減 delay(4);if(id3=0) while(!id3);_asm(n0p");jia_key(write_second, read_second, 6, 0);一asm("nop");break;case 2 : if (id2=0)/分的加delay(4);if(id2=0)while(!id2);_asm(n0p");jia_key(write_minute , read_minute, 3, 1); _asm("nop");if(id3=0)/分的減dela
25、y(4);if(id3=0) while3);_asm("nop");jia_key(write_minute , read_minute, 3, 0): _asm("nop");break;case 3 : if(id2=0)/時的加 delay (4);if(id2=0) while(!id2);_asm("n0p");hj ia_key(wr i te_hour, read hour, 0, 1); _asm("n0p");if(id3=0)/小時的減 delay(4);if(id3=0) while(!id
26、3);_asm("nop");hjia_key(write_hour, read_hour, 0, 0);一asm("nop");break;case 4: if (id2=0)/日的加 delay(4);if(id2=0) while(!id2);_asm("n0p");rjia_key(write_day, read_day, 8, 1); _asm("n0p");if (id3=0)/日的減 delay(4);if(id3=0) while(!id3);_asm("nop");rj ia_
27、key(write_day, read day, 8, 0); _asm("n0p");break;case 5: if (id2=0)/月的加delay(4):if(id2=0) while(!id2);_asm("nop");yjia_key(write_month , read_month, 5, 1); _asm("n0p");if(id3=0)/月的減delay (4); if(id3=0) while3);_asm("n0p");yjia_key(writemonth , read_month, 5,
28、0); _asm(*n0p");break;case 6:if (id2=0)/年的加 delay (4);if(id2=0) while 2);_asm("n0p");njia_key (write_year, read_year, 2, 1); _asm("n0p");delay(4):if(id3=0) while(!id3);一asm ("nop。;njia_key(write_year, read year, 2, 0);asmrnop");break;while(lshi=l);_asm("n0p&qu
29、ot;);return (n);return (n);void write_dsl302(uchar addr, uchar dat)uchar i ;pc_ddr |=0xff;pc_cr1 |=0xff;pc_cr2 |=0x00;ce = 0;/先復(fù)位sclk = 0;/清零,保持io 口的低電平,以待數(shù)據(jù)的寫入ce = 1;/置1,開始寫數(shù)據(jù)/發(fā)送地址for(i =0;i<8;i+)dio= addr&oxol;/將一位bed碼的數(shù)據(jù)送給io 口addr=addr »1;/右移一位sclk =1;/產(chǎn)生上升沿,發(fā)送數(shù)據(jù)sclk =0;/發(fā)送數(shù)據(jù)for(i=0;i
30、<8;i+)dio= dat&oxol;/將一位bed碼的地址數(shù)據(jù)送給io 口/產(chǎn)生上升沿,發(fā)送數(shù)據(jù)dat =dat»l; sclk=l; delay(1); sclk=0;ce = 0;/讀操作/read_dsl302(uchar addr) uchar i;uchar k;uchar dat;da_od=0;da_crl=0;da_cr2=0;ce=0;sclk=0;ce=l;/發(fā)送地址for(i=0;i<8;i+)sclk=0;delay(10);if(addr&oxol)dio=l;else dio=0;addr»=l;sclk=l;de
31、lay(2);da_od=0;da_crl=o;da_cr2=0;/讀取數(shù)據(jù)/for (k=0;k8;k+) dat»=l;sclk=l;delay(2);sclk=0;delay(2);if(id=0)dat&=0x7f;else dat |= 0x80 ;sclk=l; ce=o;return(dat);/io 口的初始化/void gpio_init(void)pc_ddr |=oxof;pc_cr1 |=oxof;pc_cr2 |=0x00;pg_ddr |=0x00;pg_cr1 |=0x03;pg_cr2 |=0x00;pdddr |=ox1c;pd_cr1 |=
32、0x0f;exti_cr1|=oxoo;itc_sfr2|=0x30;pd_cr2 |=0x40;pa_ddr |=oxff;pa_cr1 |=0xff;pa_cr2 |=0x00;pb_ddr |=0xff;pb_cr1 |=0xff;pb_cr2 |=0x00;/延時函數(shù)/ void delay(uint n)uint x, y;for (x=n;x0;x)for(y=110;y>0;y);/1602寫命令函/void lcd_wcom(uchar com)rs=0;/選擇指令寄存器rw=0;/選擇寫pb=com;/把命令字送入pbdelay (5);/延時一小會兒,讓1602準(zhǔn)備接
33、收數(shù)據(jù)en=l;/使能線電平變化,命令送入1602的8位數(shù)據(jù)口en=0;/1602寫數(shù)據(jù)函數(shù)/ void lcd_wdat(uchar dat)rs=l;/選擇數(shù)據(jù)寄存器rw=0;/選擇寫pb=dat;/把要顯示的數(shù)據(jù)送入p2delay (5):/延時一小會兒,讓1602準(zhǔn)備接收數(shù)據(jù)en=l;/使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)?en=0;/1602初始化函數(shù)/void lcd_init(void) 一 uchar a, k;delay (15);/等待電源穩(wěn)定lcd_wcom(0x38) :/8 位數(shù)據(jù),雙列,5*7 字形lcd_wcom(0x0c);/開啟顯示屏,關(guān)光標(biāo),光標(biāo)不閃爍
34、lcd_wcom(0x06) ;/顯示地址遞増,即寫一個數(shù)據(jù)后顯示位置右移一位lcd_wcom(0x01) ;/清屏/顯示第一行/ lcd_wcom(0x80); for(a=0;a<15;a+)lcd_wdat(tablea); delay (5);/顯示第二行/lcdwcom(0x80+0x40); for(k=0;k<8;k+) lcd_wdat(tablelk);delay(5);/年月日時分秒輸入的子函數(shù)/秒分的加減子函數(shù)/輸入/void jia_key(uchar rd, uchar wd, uchar fd,uchar fen) ul=read_dsl302(wd);
35、_asmcnop");ul=(ul&0x70)»4)*10+(ul&0x0f); if(fen=l) ul+;if (ul=60) ul=o;else ul; if(ul+l)=o) ul=59;if(ul>59) ul=59;write_dsl302(rd, (ul/10)«4 | (ul%10);/秒 write_sfm(fd, ul);icd_wcom(0x80+0x40+fd) ;/顯示分 lcd_wcom(0x38);lcd_wcom(oxof) ;/顯示功能開,有光標(biāo) /時的加減子函數(shù)/輸入/void hjia_key(uchar
36、 rd, uchar wd,uchar fd, uchar shi) u0=read_dsl302(wd); u0=(u0&0x70)»4)*10+(u0&0x0f);if(shi=l) u0+; if(u0=24)u0=0;else uo ; if(u0+l)=0) u0=23;if(u0>23) u0=23;write_dsl302(rd, (u0/10)«4 | (u0%10);/秒_asm( nop ); write_sfm(fd, uo);icd_wcom(0x80+0x40+fd);/顯示分_asm( nop );lcd_wcom(0x38
37、);lcd_wcom(0x0f);/顯示功能開,有光標(biāo)icd_wcom(0x80+0x40+fd);/日的加減子函數(shù)/輸入/void rjia_key(uchar rd, uchar wd, uchar fd, uchar day) n3=read_dsl302(wd);n3=( (n3&0x70) »4) *10+ (n3&0x0f); if (day=l) n3+; if(n3=32) n3=0;elsen3;if(n3+l)=0)n3=31;_asmcnop");if(n3>31) n3=31;write_dsl302(rd, (n3/10)
38、171;4 | (n3%10);_asm( nop );write_sfml (fd, n3);_asm( nop );lcd_wcom(0x80+fd) ;/顯示lcd_wcom(0x38);lcd_wcom(0x0f) ;/顯示功能幵,有光標(biāo)/月的子函數(shù)/輸入/void yjia_key(uchar rd, uchar wd, uchar fd, uchar yue)n2=read_dsl302(wd);n2=( (n2&0x70) »4) *10+ (n2&0x0f);_asm( nop );if(yue=l) n2+;if(n2=13) n2=0;elsen2
39、;if(n2+l)=0) n2=12;if(n212) n2=12;write_dsl302(rd, (n2/10)«4 | (n2%10);_asm( nop );write_sfml(fd, n2);_asm( nop );lcd_wcom(0x80+fd);_asm( nop );lcd_wcom(0x38);lcd_wcom(0x0f) ;/顯示功能開,有光標(biāo)/年的子函數(shù)/輸入/void njia_key(uchar rd, uchar wd, uchar fd, uchar nian) nl=read_dsl302(wd);nl=(nl&0xf0)»4)*
40、10+(nl&0x0f);if (nian=l)nl+;if(nl=100) nl=0;elsenl;if(nl+l)=0) nl=99;if(nl>99) nl=99;write_dsl302(rd, (nl/10)«4 | (nl%10);write_sfml(fd, nl);lcd_wcom(0x80+fd) ;/顯示lcd_wcom(0x38);lcd_wcom(oxof) ;/顯示功能開,有光標(biāo)lcd_wcom(0x80+fd);/初始化1302,設(shè)置開始時候的時分秒void init_ds1302(void)write_dsl302(writejprotec
41、t, 0x00);write_dsl302(write_year, oxoa):/年 write_dsl302(write_month, oxc);/月write_dsl302(write_day, 0x22);/日write_dsl302 (write_hour, 0x23) ;/小時write_dsl302(write_minute, 0x59);/分write_dsl302(write_second, 0x00);/秒write_dsl302 (write_protect, 0x80);/關(guān)閉寄存器操作void write_sfm(uchar add, uchar dat) uchar
42、shi, ge; shi=dat/10; ge=dat%10;icd_wcom(0x80+0x40+add); lcd_wdat(table2shi);lcd_wdat(table2ge);void write_sfml(uchar add, uchar dat) uchar shi, ge; shi=dat/10; ge=dat%10; lcd_wcom(0x80+add); lcdwdat(table2shi):lcd_wdat(table2ge);void write_sfm2(uchar add, uchar dat) uchar k, ge; ge=dat%10; lcd_wcora(0x80+add);for (k= (ge*3
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)品度合同范例
- 單位租憑員工車輛合同范本
- 中糧銷售合同范本
- 化工散水出售合同范本
- seb采購合同范本
- 華為銷售合同范本
- 農(nóng)業(yè)采購合同范本格式
- 伐樹施工合同范本
- 代理業(yè)主房屋合同范本
- 寫作委托協(xié)議合同范本
- 初中數(shù)學(xué)新課程標(biāo)準(zhǔn)(2024年版)
- GB/T 19342-2024手動牙刷一般要求和檢測方法
- 2024年山東鐵投集團(tuán)招聘筆試參考題庫含答案解析
- 8款-組織架構(gòu)圖(可編輯)
- 計價格(2002)10號文
- 青果巷歷史街區(qū)改造案例分析
- 樁身強(qiáng)度自動驗算表格Excel
- 《鋼鐵是怎樣煉成的》讀書報告
- 中學(xué)生班干部培訓(xùn)方案(共4頁)
- 凈土資糧——信愿行(11)第六講凈業(yè)三福變化氣質(zhì)
- 美的集團(tuán)公司分權(quán)手冊
評論
0/150
提交評論