版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 萬年歷數(shù)字鐘及可調(diào)時(shí)鐘系統(tǒng)</p><p><b> 一、 引言</b></p><p> 萬年歷數(shù)字鐘是一種用萬年歷時(shí)鐘芯片實(shí)現(xiàn)年、月、日、時(shí)、分、秒計(jì)時(shí),并通過單片機(jī)處理后送給顯示芯片顯示的裝置,與機(jī)械式時(shí)鐘相比具有更高的準(zhǔn)確性和直觀性,且具有更長(zhǎng)的使用壽命。本系統(tǒng)還可以擴(kuò)展為可調(diào)的自動(dòng)開關(guān),對(duì)家電對(duì)用
2、電設(shè)備進(jìn)行控制,筆者在隨后改制成為可調(diào)時(shí)的自動(dòng)斷電的供電系統(tǒng).</p><p> 二、 原理圖設(shè)計(jì)</p><p> 1. 單片機(jī)及其外圍電路設(shè)計(jì)</p><p> 復(fù)位采用X25045芯片,復(fù)位電路如圖1所示。</p><p> 圖1 復(fù)位電路設(shè)計(jì)</p><p&
3、gt; 單片機(jī)采用貼片封裝的AT89S51,晶振為11.0592MHz。其中P1.5~P1.7為下載程序使用,電路如圖2所示。</p><p> 圖2 單片機(jī)89S51外圍電路設(shè)計(jì)</p><p> 2. 時(shí)鐘芯片電路設(shè)計(jì)</p><p> 時(shí)鐘芯片采用PCF8563,晶振采用32.768K,電容使用15pf。PCF8563 是PHILIPS
4、公司推出的一款工業(yè)級(jí)內(nèi)含I2C 總線接口功能的具有極低功耗的多功能時(shí)鐘/日歷芯片。內(nèi)部時(shí)鐘電路、內(nèi)部振蕩電路、內(nèi)部低電壓檢測(cè)電路(1.0V)以及兩線制I2C 總線通訊方式,不但使外圍電路及其簡(jiǎn)潔,而且也增加了芯片的可靠性。同時(shí)每次讀寫數(shù)據(jù)后,內(nèi)嵌的字地址寄存器會(huì)自動(dòng)產(chǎn)生增量。電路如圖3所示。</p><p> 圖3 時(shí)鐘芯片電路設(shè)計(jì)</p><p> 3. 顯示芯片電路設(shè)
5、計(jì)</p><p> 顯示芯片采用ZLG7289,晶振為12MHz。ZLG7289A 是廣州周立功單片機(jī)發(fā)展有限公司自行設(shè)計(jì)的,具有SPI 串行接口功能的可同時(shí)驅(qū)動(dòng)8 位共陰式數(shù)碼管(或64 只獨(dú)立LED )的智能顯示驅(qū)動(dòng)芯片,該芯片同時(shí)還可連接多達(dá)64 鍵的鍵盤矩陣,單片即可完成LED 顯示﹑鍵盤接口的全部功能。電路如圖4所示。</p><p> 圖4 顯示芯片電路設(shè)計(jì)</
6、p><p> 4. 雙電源電路設(shè)計(jì)</p><p> 系統(tǒng)采用雙電源,平時(shí)使用V1=10V的外接電源,停電時(shí)使用電池,由V2輸入。電池有6節(jié),其電壓為9V。當(dāng)電池電壓低于6V時(shí),LED亮,說明電池電量不足。電路如圖5所示。</p><p> 圖5 雙電源電路設(shè)計(jì)</p><p> 三、 程
7、序設(shè)計(jì)</p><p> 程序開始時(shí)先對(duì)系統(tǒng)初始化,并設(shè)置好各種中斷。下步操作主要是對(duì)時(shí)鐘芯片進(jìn)行操作,首先要給時(shí)鐘芯片設(shè)置初值,時(shí)鐘芯片便自行計(jì)數(shù)。此時(shí)檢測(cè)是否有按鍵按下,按鍵是為了調(diào)整時(shí)鐘。有按鍵按下則執(zhí)行按鍵中斷程序,沒有按鍵按下則執(zhí)行下一步的操作,即取時(shí)鐘芯片中的時(shí)鐘值,然后送顯示。程序流程圖如下。</p><p><b> 圖6 總體流程圖</b>&l
8、t;/p><p> 四、 源程序</p><p> #include<reg51.h></p><p> #include<intrins.h></p><p> #include<math.h&
9、gt;</p><p> #define uchar unsigned char /*宏定義*/</p><p> #define uint unsigned int</p><p> uchar close_date,open_date;</p><p> void RESWDI(void);</p><
10、;p> void WREN(void);</p><p> void WRDI(void);</p><p> void WRSR(void);</p><p> unsigned char RSDR(void);</p><p> void WIPCHK(void);</p><p> voi
11、d OUTByte(unsigned char Byte);</p><p> unsigned char INPUTByte(void);</p><p> unsigned char ReadByte(unsigned char ADD);</p><p> void WriteByte(unsigned char Byte,ADD);</p>
12、<p> #define _Nop() _nop_() </p><p> sbitzlg7289_cs=P1^1;</p><p> sbitzlg7289_clk=P2^6;</p><p> sbitzlg7289_dio=P2^7;</p><p> sbitzlg7289_ke
13、y=P3^2;</p><p> sbit p07=P0^7;</p><p> sbit p06=P0^6;</p><p> sbit CS=P2^4;</p><p> sbit SCK=P2^2;</p><p> sbit SO=P2^5;</p>&l
14、t;p> sbit SI=P2^3;</p><p> sbit p10=P1^0;</p><p> sbit SDA=P1^2; /*模擬I2C數(shù)據(jù)傳送位*/</p><p> sbit SCL=P1^3; /*模擬I2C時(shí)鐘控制位*/</p><p> ucha
15、r buf[9]={0x00,0x00,0x30,0x23,0x15,0x1,0x05,0x04,0x05};</p><p> uchar bufdata,bb,date;</p><p> uchar SLA=0xA2,SUBA=0x00;</p><p> uchar*p;</p><p> uchar keyc
16、hange=0;</p><p> uchar key=0;/*鍵盤值*/</p><p> bit keyint=0;/*按鍵中斷標(biāo)志*/</p><p> bit keyok=1;/*數(shù)據(jù)是否修改好*/</p><p> uchar num=0;/*移位鍵移到哪個(gè)LED*/</p><p>
17、 void delay(uchar i)</p><p><b> {</b></p><p> while(i--);</p><p><b> }</b></p><p> //******************** TIMER1 interrupt process ********
18、*******************//</p><p> timer0 (void) interrupt 1 using 1</p><p><b> {</b></p><p><b> TH0=0x3c;</b></p><p><b> TL0=0xb0;</b&
19、gt;</p><p><b> RESWDI();</b></p><p><b> }</b></p><p> void RESWDI(void) ////復(fù)位看門狗(喂狗)</p><p><b> {</b></p><p> zlg
20、7289_cs=1;</p><p><b> CS =1;</b></p><p><b> CS =0;</b></p><p><b> CS =1;</b></p><p> zlg7289_cs=1;</p><p><b>
21、 }</b></p><p> void WREN(void) //寫使能復(fù)位使用)?</p><p><b> {</b></p><p> zlg7289_cs=1;</p><p><b> SCK=0;</b></p><p><b>
22、 CS=0;</b></p><p> OUTByte(0x06); //發(fā)送06H寫使能命令字</p><p><b> SCK=0;</b></p><p><b> CS=1;</b></p><p> zlg7289_cs=1;</p><p>
23、<b> }</b></p><p> void WRDI(void) //寫使能復(fù)位(禁止寫{</p><p><b> {</b></p><p> zlg7289_cs=1;</p><p><b> SCK=0;</b></p><p>
24、;<b> CS=0;</b></p><p> OUTByte(0x04); //發(fā)送04H寫禁止命令字SCK=0;</p><p><b> CS=1;</b></p><p> zlg7289_cs=1;</p><p><b> }</b></p>
25、<p> void WRSR(void) //寫狀態(tài)寄存器</p><p><b> {</b></p><p><b> WREN();</b></p><p> zlg7289_cs=1;</p><p><b> SCK=0;</b></p&
26、gt;<p><b> CS=0;</b></p><p> OUTByte(0x01); //發(fā)送01H寫寄存器命令字</p><p> OUTByte(0x00); //發(fā)送寄存器值BL0,BL1為0沒寫保護(hù),WD0=0 W01=1</p><p> //WD1=0WD1=0看門狗復(fù)位時(shí)間1.4S</p>
27、<p><b> SCK=0;</b></p><p><b> CS=1;</b></p><p> zlg7289_cs=1;</p><p> WIPCHK(); //判斷是否寫入</p><p><b> }</b></p><
28、p> unsigned char RSDR(void) //讀狀態(tài)寄存器</p><p><b> {</b></p><p> unsigned char Temp;</p><p> zlg7289_cs=1;</p><p><b> SCK=0;</b></p>
29、<p><b> CS=0;</b></p><p> OUTByte(0x05); //發(fā)送05H讀狀態(tài)寄存器命令字</p><p> Temp =INPUTByte(); //讀狀態(tài)寄存器值</p><p><b> SCK=0;</b></p><p><b>
30、 CS=1;</b></p><p> return Temp;;//這一個(gè)調(diào)試時(shí)沒有執(zhí)行,Temp的值總是0xFF;???????????</p><p> zlg7289_cs=1;</p><p><b> }</b></p><p> void WIPCHK(void) //檢查WIP位,判斷
31、是否寫入完成</p><p><b> {</b></p><p> unsigned char Temp,TempCyc;</p><p> for(TempCyc=0;TempCyc<50;TempCyc++)</p><p><b> {</b></p><p
32、> Temp =RSDR(); //讀狀態(tài)寄存器</p><p> if (Temp&0x01==0)</p><p> TempCyc =50;</p><p><b> }</b></p><p><b> }</b></p><p> //單字
33、節(jié)指令或數(shù)據(jù)寫入X25045</p><p> //在SI線上輸入的數(shù)據(jù)在SCK的上升沿被鎖存。</p><p> void OUTByte(unsigned char Byte) //輸出一個(gè)定節(jié)</p><p><b> {</b></p><p> unsigned char TempCyc;</p&
34、gt;<p> zlg7289_cs=1;</p><p> for(TempCyc=0;TempCyc<8;TempCyc++)</p><p><b> {</b></p><p><b> SCK =0;</b></p><p> if(Byte&0x80
35、)</p><p><b> SI =1;</b></p><p><b> else</b></p><p><b> SI =0;</b></p><p><b> SCK =1;</b></p><p> Byte
36、=Byte<<1; //右移</p><p><b> }</b></p><p> SI=0; //使SI處于確定的狀態(tài)</p><p> zlg7289_cs=1;</p><p><b> }</b></p><p> //單字節(jié)數(shù)據(jù)從X25045
37、讀到單片機(jī)</p><p> //數(shù)據(jù)由SCK的下降沿輸出到SO線上。</p><p> unsigned char INPUTByte(void) //輸入一個(gè)字節(jié)</p><p><b> {</b></p><p> unsigned char Temp=0, TempCyc;</p><
38、;p> zlg7289_cs=1;</p><p> for(TempCyc=0;TempCyc<8;TempCyc++)</p><p><b> {</b></p><p> Temp =Temp<<1; //右移</p><p><b> SCK =1;</b>
39、;</p><p><b> SCK=0;</b></p><p><b> if (SO)</b></p><p> Temp =Temp|0x01; //SO為1,則最低位為1</p><p><b> else</b></p><p>
40、Temp&=0xFE;</p><p><b> }</b></p><p> return Temp;;//這一個(gè)調(diào)試時(shí)沒有執(zhí)行,Temp的值總是0</p><p> zlg7289_cs=1;</p><p><b> }</b></p><p> un
41、signed char ReadByte(unsigned char ADD) //讀地址中的數(shù)據(jù)這里不做先導(dǎo)字處理,只能讀00-FFH</p><p><b> {</b></p><p> unsigned char Temp;</p><p> zlg7289_cs=1;</p><p><b>
42、 SCK=0;</b></p><p><b> CS=0;</b></p><p><b> SO=1;</b></p><p><b> SI=1;</b></p><p> OUTByte(0x3); //發(fā)送讀指令03H 如要支持000-FFF則要把
43、高位地址左移3位再為03H相或</p><p> OUTByte(ADD); //發(fā)送低位地址</p><p> Temp =INPUTByte();</p><p><b> SCK=0;</b></p><p><b> CS=1;</b></p><p> r
44、eturn Temp;//這一個(gè)調(diào)試時(shí)沒有執(zhí)行,Temp的</p><p> zlg7289_cs=1;</p><p><b> }</b></p><p> void WriteByte(unsigned char Byte,ADD) //向地址寫入數(shù)據(jù)這里同樣不做先導(dǎo)字處理,只能寫00-FFH</p><p>
45、;<b> {</b></p><p><b> WREN();</b></p><p> zlg7289_cs=1;</p><p><b> SCK=0;</b></p><p><b> CS=0;</b></p><p
46、><b> SO=1;</b></p><p><b> SI=1;</b></p><p> OUTByte(0x2); //發(fā)送寫指令02H 如要支持000-FFF則要把高位地址左移2位再為02H相或</p><p> OUTByte(ADD); //發(fā)送低位地址</p><p>
47、 OUTByte(Byte); //發(fā)送數(shù)據(jù)</p><p><b> SCK=0;</b></p><p><b> CS=1;</b></p><p><b> WIPCHK();</b></p><p> zlg7289_cs=1;</p><
48、;p><b> }</b></p><p><b> /*</b></p><p> 模擬I2C總線傳輸程序*/</p><p> bit ack; /*應(yīng)答標(biāo)志位*/</p><p> /*起動(dòng)總線函數(shù)*/</p><p> void
49、Start_I2c()</p><p><b> {</b></p><p> SDA=1; /*發(fā)送起始條件的數(shù)據(jù)信號(hào)*/</p><p><b> _Nop();</b></p><p><b> SCL=1;</b></p><p>
50、 _Nop(); /*起始條件建立時(shí)間大于4.7us,延時(shí)*/</p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p> _Nop(); </p
51、><p> SDA=0; /*發(fā)送起始信號(hào)*/</p><p> _Nop(); /* 起始條件鎖定時(shí)間大于4μs*/</p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p><b> _N
52、op();</b></p><p><b> _Nop();</b></p><p> SCL=0; /*鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)*/</p><p><b> _Nop();</b></p><p><b> _Nop();</b></
53、p><p><b> }</b></p><p> /*******************************************************************</p><p> 結(jié)束總線函數(shù) </p><p> *************************
54、*******************************************/</p><p> void Stop_I2c()</p><p><b> {</b></p><p> SDA=0; /*發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)*/</p><p> _Nop(); /*發(fā)送結(jié)束條件的時(shí)鐘信號(hào)*/&
55、lt;/p><p> SCL=1; /*結(jié)束條件建立時(shí)間大于4μs*/</p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p><b
56、> _Nop();</b></p><p><b> _Nop();</b></p><p> SDA=1; /*發(fā)送I2C總線結(jié)束信號(hào)*/</p><p><b> _Nop();</b></p><p><b> _Nop();</b><
57、/p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p><b> }</b></p><p> /*字節(jié)數(shù)據(jù)傳送函數(shù)*/</p><p> void SendByte(uchar c)&l
58、t;/p><p><b> {</b></p><p> uchar BitCnt;</p><p> for(BitCnt=0;BitCnt<8;BitCnt++) /*要傳送的數(shù)據(jù)長(zhǎng)度為8位*/</p><p><b> {</b></p><p> if(
59、(c<<BitCnt)&0x80)SDA=1; </p><p> else SDA=0; </p><p><b> _Nop();</b></p><p> SCL=1; /*置時(shí)鐘線為高,通知被控器開始接收數(shù)據(jù)位*/</p><p&
60、gt;<b> _Nop();</b></p><p> _Nop(); /*保證時(shí)鐘高電平周期大于4μs*/</p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p> _Nop(
61、); </p><p><b> SCL=0;</b></p><p><b> }</b></p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p>
62、 SDA=1; /*8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位*/</p><p><b> _Nop();</b></p><p><b> _Nop(); </b></p><p><b> SCL=1;</b></p><p><b
63、> _Nop();</b></p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p> if(SDA==1)ack=0; </p><p> else ack=1; /*判斷是否接收到應(yīng)答信號(hào)*
64、/</p><p><b> SCL=0;</b></p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p><b> }</b></p><p> /*字節(jié)數(shù)據(jù)接
65、收函數(shù)*/</p><p> uchar RcvByte()</p><p><b> {</b></p><p> uchar retc;</p><p> uchar BitCnt;</p><p><b> retc=0;</b></p>&
66、lt;p> SDA=1; /*置數(shù)據(jù)線為輸入方式*/</p><p> for(BitCnt=0;BitCnt<8;BitCnt++)</p><p><b> {</b></p><p> _Nop(); </p><p> SCL=0; /*
67、置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位*/</p><p><b> _Nop();</b></p><p> _Nop(); /*時(shí)鐘低電平周期大于4.7s*/</p><p><b> _Nop();</b></p><p><b> _Nop();</b>&
68、lt;/p><p><b> _Nop();</b></p><p> SCL=1; /*置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/</p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p&g
69、t; retc=retc<<1;</p><p> if(SDA==1)retc=retc+1; /*讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中 */</p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p><b>
70、 }</b></p><p><b> SCL=0; </b></p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p> return(retc);</p><p>&
71、lt;b> }</b></p><p><b> /*應(yīng)答子函數(shù)*/</b></p><p> void Ack_I2c(bit a)</p><p><b> {</b></p><p> if(a==0)SDA=0; /*在此發(fā)出應(yīng)答或非應(yīng)答信號(hào)*/</
72、p><p> else SDA=1;</p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p> _Nop(); </p><p><b> SCL=1;</b></p>
73、<p><b> _Nop();</b></p><p> _Nop(); /*時(shí)鐘低電平周期大于4μs*/</p><p><b> _Nop();</b></p><p><b> _Nop();</b></p><p>&l
74、t;b> _Nop(); </b></p><p> SCL=0; /*清時(shí)鐘線,鉗住I2C總線以便繼續(xù)接收*/</p><p><b> _Nop();</b></p><p> _Nop(); </p><p><b> }</b>&
75、lt;/p><p> /*向有子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù) */</p><p> bit ISendStr(uchar sla,uchar suba,uchar *s)</p><p><b> {</b></p><p><b> uchar i;</b></
76、p><p> Start_I2c(); /*啟動(dòng)總線*/</p><p> SendByte(sla); /*發(fā)送器件地址*/</p><p> if(ack==0)return(0);</p><p> SendByte(suba); /*發(fā)送器件子地址*/<
77、/p><p> if(ack==0)return(0);</p><p> for(i=0;i<9;i++)</p><p><b> { </b></p><p> SendByte(*s); /*發(fā)送數(shù)據(jù)*/</p><p> if(ack==0)re
78、turn(0);</p><p><b> s++;</b></p><p><b> }</b></p><p> Stop_I2c(); /*結(jié)束總線*/</p><p> return(1);</p><p><b>
79、 }</b></p><p> /*向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù)*/</p><p> bit IRcvStr(uchar sla,uchar suba,uchar *s)</p><p><b> {</b></p><p><b> uchar i;</b></p&
80、gt;<p> Start_I2c(); /*啟動(dòng)總線*/</p><p> SendByte(sla); /*發(fā)送器件地址*/</p><p> if(ack==0)return(0);</p><p> SendByte(suba); /*發(fā)送器件子地址*/</p
81、><p> if(ack==0)return(0);</p><p> Start_I2c();</p><p> SendByte(sla+1);</p><p> if(ack==0)return(0);</p><p> for(i=0;i<8;i++)</p><p><
82、;b> { </b></p><p> *s=RcvByte(); /*發(fā)送數(shù)據(jù)*/</p><p> Ack_I2c(0); /*發(fā)送就答位*/ </p><p><b> s++;</b></p><p><b> }&
83、lt;/b></p><p> *s=RcvByte();</p><p> Ack_I2c(1); /*發(fā)送非應(yīng)位*/</p><p> Stop_I2c(); </p><p> return(1);</p><p><b&g
84、t; }</b></p><p> /*模擬I2C程序結(jié)束*/</p><p> void display(uint dis)</p><p><b> {</b></p><p><b> uchar j;</b></p><p> zlg7289_
85、clk=0;</p><p> delay(20);</p><p> zlg7289_cs=0;</p><p> for(j=0;j<16;j++)</p><p><b> {</b></p><p> if((dis&0x8000)==0x8000) zlg7289
86、_dio=1;</p><p> else zlg7289_dio=0;</p><p> delay(20);</p><p> zlg7289_clk=1;</p><p> delay(10);</p><p> zlg7289_clk=0;</p><p> delay(10
87、);</p><p> dis=dis<<1;</p><p><b> }</b></p><p> zlg7289_cs=1;</p><p> delay(20);</p><p><b> }</b></p><p>
88、void dis_play(uchar aa)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p&g
89、t; if(_crol_(aa,i)&0x80)</p><p> zlg7289_dio =1;</p><p><b> else</b></p><p> zlg7289_dio =0;</p><p> zlg7289_clk =1;</p><p> delay(10
90、);</p><p> zlg7289_clk =0;</p><p><b> }</b></p><p><b> }</b></p><p> void displaymonth()</p><p><b> {</b></p&
91、gt;<p> bufdata=buf[5]&0x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xc8);</p><p> delay(10);</p><p> dis_play(bufdata)
92、;</p><p> zlg7289_cs=1;</p><p> delay(70);</p><p> bufdata=buf[5]&0x30;</p><p> bufdata=bufdata>>4;</p><p> bufdata=bufdata&0x0f;</
93、p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xc9);</p><p> delay(10);</p><p> dis_play(bufdata);</p><p> zlg7289_cs=1;</p
94、><p> delay(70);</p><p> bufdata=buf[7]&0x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xca);</p><p> delay(10);</p
95、><p> dis_play(bufdata);</p><p> zlg7289_cs=1;</p><p> delay(70);</p><p> bufdata=buf[7]&0x10;</p><p> bufdata=bufdata>>4;</p><p&g
96、t; bufdata=bufdata&0x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xcf);</p><p> delay(10);</p><p> dis_play(bufdata);</p&g
97、t;<p> zlg7289_cs=1;</p><p> delay(70);</p><p><b> }</b></p><p> void displaytime()</p><p><b> {</b></p><p> bufdata=b
98、uf[3]&0x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xce);</p><p> delay(10);</p><p> dis_play(bufdata);</p><p>
99、 zlg7289_cs=1;</p><p> delay(70);</p><p> bufdata=buf[3]&0x70;</p><p> bufdata=bufdata>>4;</p><p> bufdata=bufdata&0x0f;</p><p> zlg7289
100、_cs=0;</p><p> delay(10);</p><p> dis_play(0xcd);</p><p> delay(10);</p><p> dis_play(bufdata);</p><p> zlg7289_cs=1;</p><p> delay(70
101、);</p><p> bufdata=buf[4]&0x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xcc);</p><p> delay(10);</p><p> dis_play
102、(bufdata);</p><p> zlg7289_cs=1;</p><p> delay(70);</p><p> bufdata=buf[4]&0x30;</p><p> bufdata=bufdata>>4;</p><p> bufdata=bufdata&0
103、x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xcb);</p><p> delay(10);</p><p> dis_play(bufdata);</p><p> zlg7289_cs
104、=1;</p><p> delay(70);</p><p><b> }</b></p><p> void display_x5045()</p><p><b> {</b></p><p> date=ReadByte(0x40);</p>
105、<p> close_date=date;</p><p> bufdata=date&0x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xce);</p><p> delay(10);</p&g
106、t;<p> dis_play(bufdata);</p><p> zlg7289_cs=1;</p><p> delay(70);</p><p> bufdata=date&0x70;</p><p> bufdata=bufdata>>4;</p><p>
107、bufdata=bufdata&0x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xcd);</p><p> delay(10);</p><p> dis_play(bufdata);</p>
108、<p> zlg7289_cs=1;</p><p> delay(70);</p><p> date=ReadByte(0x42);</p><p> bufdata=date&0x0f;</p><p> zlg7289_cs=0;</p><p> open_date=ReadBy
109、te(0x42);</p><p> delay(10);</p><p> dis_play(0xcc);</p><p> delay(10);</p><p> dis_play(bufdata);</p><p> zlg7289_cs=1;</p><p> delay
110、(70);</p><p> bufdata=date&0x30;</p><p> bufdata=bufdata>>4;</p><p> bufdata=bufdata&0x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</
111、p><p> dis_play(0xcb);</p><p> delay(10);</p><p> dis_play(bufdata);</p><p> zlg7289_cs=1;</p><p> delay(70);</p><p><b> }</b>
112、;</p><p> /**按鍵處理程序*/</p><p> //key=47: 閃爍移位鍵(shift)</p><p> //key=39: +</p><p> //key=39: -</p><p> //key=31: 確認(rèn)鍵(ok)</p><p> void key_
113、int() interrupt 0 </p><p><b> {</b></p><p><b> keyint=1;</b></p><p><b> }</b></p><p> void keyexe()</p><p><b&g
114、t; {</b></p><p><b> uchar i;</b></p><p> uchar temp=0;</p><p><b> uchar aa;</b></p><p><b> p06=1;</b></p><p>
115、;<b> EX0=1;</b></p><p> zlg7289_cs =0;</p><p> delay(10);</p><p> dis_play(0x15); /*寫入讀鍵盤數(shù)據(jù)指令*/</p><p> delay(10);</p><p> for(i=0;i<
116、;8;i++)</p><p><b> {</b></p><p> temp=temp<<1;</p><p> aa=zlg7289_dio; // 按位或</p><p> if(aa==1) // 讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中</p><p> temp=t
117、emp+1;</p><p> zlg7289_clk=1;</p><p> delay(10); // 延時(shí)</p><p> zlg7289_clk=0;</p><p><b> }</b></p><p> zlg7289_cs=1;</p><p>&
118、lt;b> key=temp;</b></p><p> if(key==47)//閃爍移位鍵</p><p><b> {</b></p><p><b> key=0;</b></p><p><b> keyok=0;</b></p&g
119、t;<p><b> EX0=0;</b></p><p> if(num==8)</p><p><b> {</b></p><p><b> num=1;</b></p><p><b> }</b></p>
120、<p><b> else</b></p><p><b> num++;</b></p><p> switch(num)</p><p> {case 1:{display(0x88fe);}break;</p><p> case 2:{display(0x88fd)
121、;}break;</p><p> case 3:{display(0x88fb);}break;</p><p> case 4:{display(0x88f7);}break;</p><p> case 5:{display(0x88ef);}break;</p><p> case 6:{display(0x88df)
122、;}break;</p><p> case 7:{display(0x88bf);}break;</p><p> case 8:{display(0x887f);}break;</p><p> default:;</p><p><b> }</b></p><p><
123、b> EX0=1;</b></p><p><b> }</b></p><p> else if(key==39)//+</p><p><b> { </b></p><p><b> EX0=0;</b></p><p
124、><b> key=0;</b></p><p><b> RESWDI();</b></p><p> if(num!=0)</p><p><b> {</b></p><p><b> keyok=0;</b></p>
125、<p> keychange=1;</p><p><b> RESWDI();</b></p><p><b> }</b></p><p> if(num==7)//在分個(gè)位上</p><p><b> {</b></p><p&
126、gt; if((buf[3]&0x0f)==0x09)buf[3]&=0xf0;</p><p> else ++buf[3];</p><p><b> EX0=1;</b></p><p> bufdata=buf[3]&0x0f;</p><p> zlg7289_cs=0;&l
127、t;/p><p> delay(10);</p><p> dis_play(0xce);</p><p> delay(10);</p><p> dis_play(bufdata);</p><p> zlg7289_cs=1;</p><p> delay(70);</p
128、><p><b> RESWDI();</b></p><p><b> }</b></p><p> else if(num==6)//在分十位上</p><p><b> {</b></p><p> if((buf[3]&0xf0)
129、==0x50)buf[3]&=0x0f;</p><p> else buf[3]+=0x10;</p><p><b> EX0=1;</b></p><p> bufdata=buf[3]&0x70;</p><p> bufdata=bufdata>>4;</p>
130、<p> bufdata=bufdata&0x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xcd);</p><p> delay(10);</p><p> dis_play(bufdata);
131、</p><p> zlg7289_cs=1;</p><p> delay(70);</p><p><b> RESWDI();</b></p><p><b> }</b></p><p> else if(num==5)//在小時(shí)個(gè)位上</p>
132、<p><b> {</b></p><p> if((buf[4]&0xf0)==0x20)</p><p><b> {</b></p><p> if((buf[4]&0x0f)>0x02)buf[4]&=0xf0;</p><p> e
133、lse++buf[4];</p><p><b> }</b></p><p> else if((buf[4]&0x0f)==0x09) buf[4]&=0xf0;</p><p> else ++buf[4];</p><p><b> EX0=1;</b><
134、/p><p> bufdata=buf[4]&0x0f;</p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xcc);</p><p> delay(10);</p><p> dis_play(bufda
135、ta);</p><p> zlg7289_cs=1;</p><p> delay(70);</p><p><b> RESWDI();</b></p><p><b> }</b></p><p> else if(num==4)//在小時(shí)十位上<
136、/p><p><b> {</b></p><p> if((buf[4]&0x0f)>0x03)</p><p><b> {</b></p><p> if((buf[4]&0xf0)>0x00)buf[4]&=0x0f;</p><
137、p> elsebuf[4]+=0x10;</p><p><b> }</b></p><p> else if((buf[4]&0xf0)==0x20)buf[4]&=0x0f;</p><p> else buf[4]+=0x10;</p><p><b> EX0=1;
138、</b></p><p> bufdata=buf[4]&0x30;</p><p> bufdata=bufdata>>4;</p><p> bufdata&=0x0f;</p><p> zlg7289_cs=0;</p><p><b> RESWDI
139、();</b></p><p> delay(10);</p><p> dis_play(0xcb);</p><p> delay(10);</p><p> dis_play(bufdata);</p><p> zlg7289_cs=1;</p><p> d
140、elay(70);</p><p><b> RESWDI();</b></p><p><b> }</b></p><p> else if(num==1)//在日的個(gè)位上</p><p><b> {</b></p><p> if((
141、buf[5]&0xf0)==0x30)</p><p><b> {</b></p><p> if((buf[5]&0x0f)>0x00)buf[5]&=0xf0;</p><p> else ++buf[5];</p><p><b> }</b><
142、;/p><p> else if((buf[5]&0x0f)==0x09)buf[5]&=0xf0;</p><p> else++buf[5];</p><p><b> EX0=1;</b></p><p> bufdata=buf[5]&0x0f;</p><p&
143、gt;<b> RESWDI();</b></p><p> zlg7289_cs=0;</p><p> delay(10);</p><p> dis_play(0xc8);</p><p> delay(10);</p><p> dis_play(bufdata);<
144、/p><p> zlg7289_cs=1;</p><p> delay(70);</p><p><b> RESWDI();</b></p><p><b> }</b></p><p> else if(num==2)//在日的十位上</p>&l
145、t;p><b> {</b></p><p> if((buf[5]&0x0f)>0x01)</p><p><b> {</b></p><p> if((buf[5]&0xf0)>0x10)buf[5]&=0x0f;</p><p> el
146、se buf[5]+=0x10;</p><p><b> }</b></p><p> else if((buf[5]&0xf0)==0x30)buf[5]&=0x0f;</p><p> else buf[5]+=0x10;</p><p><b> EX0=1;</b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 萬年歷數(shù)字鐘及可調(diào)時(shí)鐘系統(tǒng)
- 畢業(yè)設(shè)計(jì)-----可調(diào)萬年歷系統(tǒng)的設(shè)計(jì)
- 數(shù)字萬年歷畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)數(shù)字萬年歷時(shí)鐘電路的設(shè)計(jì)
- 電子鐘萬年歷畢業(yè)設(shè)計(jì)
- 萬年歷電子時(shí)鐘溫度畢業(yè)設(shè)計(jì)
- arm課程設(shè)計(jì)——可調(diào)控萬年歷時(shí)鐘
- 萬年歷課程設(shè)計(jì)--萬年歷電子時(shí)鐘
- 基于arm的時(shí)鐘萬年歷設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 數(shù)字鐘畢業(yè)設(shè)計(jì)---可調(diào)數(shù)字鐘設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---萬年歷功能電子時(shí)鐘的設(shè)計(jì)
- 電子萬年歷畢業(yè)設(shè)計(jì)
- 電子萬年歷畢業(yè)設(shè)計(jì)
- 電子萬年歷畢業(yè)設(shè)計(jì)
- 數(shù)字萬年歷設(shè)計(jì)論文
- 數(shù)字萬年歷設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的萬年歷時(shí)鐘設(shè)計(jì)【畢業(yè)設(shè)計(jì)】
- 畢業(yè)設(shè)計(jì)---電子萬年歷設(shè)計(jì)
- 電子萬年歷畢業(yè)設(shè)計(jì)稿
- 數(shù)碼萬年歷的畢業(yè)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論