版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p> 題 目: 秒表計時器</p><p> 課 程: 單片機課程設計</p><p><b> ?! I(yè):</b></p><p><b> 班 級:</b></p><p><b> 學 號:</b></p>&l
2、t;p><b> 姓 名:</b></p><p><b> 指導 老師:</b></p><p><b> 設計 時間: </b></p><p><b> 目錄</b></p><p><b> 設計目的</b>
3、;</p><p><b> 設計要求</b></p><p><b> 設計原理</b></p><p><b> 電路的功能單元設計</b></p><p><b> 各項程序</b></p><p><b>
4、 六、設計心得體會</b></p><p><b> 設計目的</b></p><p> 1、用紅、綠、黃三色發(fā)光二極管做信號燈,主干道A為東西向,設紅、綠、黃三色燈為AR、AG、AY;支干道B喂南北向。三色燈為BR、BG、BY。</p><p> 2、主干道車輛較多,所以亮綠燈的時間設為50s;支干道亮綠燈的時間設為30s
5、。當主干道允許通行亮綠燈時則支干道亮紅燈;相反,支干道允許通行亮綠燈時則主干道亮紅燈。每次由綠燈轉(zhuǎn)變?yōu)榧t燈時,其間要亮5s的黃燈作為過渡,以便行駛中的車輛有時間停到禁止線以內(nèi)。</p><p> 3、交通燈正常運行時,用4位數(shù)碼管M1、M2、M3、M4顯示主干道和支干道的倒計時時間,M1、M2顯示主干道在當前狀態(tài)剩余時間;m3、m4顯示支干道在當前狀態(tài)的剩余時間。</p><p> 4
6、、能實現(xiàn)系統(tǒng)總清0,清0后計數(shù)器由出事狀態(tài)開始計數(shù)。指示燈指示主干道亮綠燈。</p><p> 5、具有一定的擴展功能:</p><p> 它能實現(xiàn)特殊狀態(tài)的功能先死,用開關S作為特殊信號傳感器,S為1時進入特殊狀態(tài)并實現(xiàn)下列特殊狀態(tài)功能:</p><p> 1)顯示器M1、M2、M3、M4閃爍,即在全0和當前計時時間中交替顯示。</p><
7、;p> 2)計數(shù)器停止計數(shù)并保持原來的時間數(shù)據(jù)。</p><p> 3)東西、南北方向的三色燈全顯示為紅色狀態(tài)。</p><p> 4)特殊狀態(tài)解除后能繼續(xù)返回正常工作狀態(tài)。</p><p> 5)進入特殊狀態(tài)時,音響電路發(fā)出急促的“嘀——嘟”聲,以示警告。</p><p><b> 二、設計要求</b>
8、</p><p> 1、分析設計任務,擬定多種設計方案,根據(jù)當時的制作條件,選定其中的一種方案繪制系統(tǒng)框圖和設計流程。</p><p><b> 三、設計原理</b></p><p><b> 系統(tǒng)模塊劃分</b></p><p> 根據(jù)設計要求系統(tǒng)分為4大模塊</p><
9、;p> 主程序模塊(內(nèi)包含發(fā)聲模塊)</p><p><b> 鍵盤按鍵模塊</b></p><p><b> 1602顯示模塊</b></p><p><b> 1307時鐘模塊</b></p><p><b> 系統(tǒng)設計思路</b>&l
10、t;/p><p> 根據(jù)設計要求,我們主程序模塊主要以按鍵為觸發(fā)其他狀態(tài)的信號,沒有按鍵時,循環(huán)執(zhí)行當前狀態(tài)內(nèi)容,即掃描按鍵,通過I2C讀取1307內(nèi)部存儲時間并在LCD1602上顯示。而定時器0主要用來發(fā)聲脈沖的建立。</p><p> 程序狀態(tài)主要分為三種(即:秒表模式swit_flag==1、北京時間模式swit_flag==0)</p><p><b&
11、gt; a)</b></p><p> 在時間模式下可以通過設置年月日時分秒的鍵和一個加鍵一個減鍵來設置需要顯示的時間;</p><p><b> b)</b></p><p> 秒表模式下,通過切換鍵切換到秒表模式,通過選擇鍵(即順計時和倒計時的選擇),可以設置需要倒計的時間長度,按相應的鍵保存當前的數(shù)據(jù),按顯示鍵,顯示之
12、前保存相應組別的數(shù)據(jù)(詳見流程圖)。倒計時到零時,蜂鳴器會發(fā)出響聲,提醒時間到。</p><p><b> 主程序流程框圖</b></p><p><b> 秒表模式</b></p><p><b> 時間模式</b></p><p><b> 讀取鍵值<
13、;/b></p><p> 關閉時間讀取, </p><p> 鍵值=7? 對DS1307進</p><p><b> 行時間設置</b></p><p><b> 正常讀取</b></p>
14、<p><b> DS1307</b></p><p> 顯示 </p><p> 四、電路的功能單元設計</p><p> 4.1.按鍵電路設計</p><p> 由于設計要求使用矩陣鍵盤,所以本設計就采用行列式鍵盤,同時也能減少鍵盤與單片機接口時所占
15、用的I/O線的數(shù)目,在按鍵比較多的時候,通常采用這樣方法。其原理如圖4-1所示。</p><p> 每一條水平(行線)與垂直線(列線)的交叉處不相通,而是通過一個按鍵來連通,利用這種行列式矩陣結(jié)構(gòu)只需要N條行線和M條列線,即可組成具有N×M個按鍵的鍵盤。</p><p> 在這種行列式矩陣鍵盤非鍵盤編碼的單片機系統(tǒng)中,鍵盤處理程序首先執(zhí)行等待按鍵并確認有無按鍵按下的程序段。&
16、lt;/p><p> 當確認有按鍵按下后,下一步就要識別哪一個按鍵按下。對鍵的識別通常有兩種方法:一種是常用的逐行掃描查詢法;另一種是速度較快的線反轉(zhuǎn)法。</p><p> 對照圖2-4所示的44鍵盤,說明線反轉(zhuǎn)個工作原理。</p><p> 首先辨別鍵盤中有無鍵按下,有單片機I/O口向鍵盤送全掃描字,然后讀入行線狀態(tài)來判斷。方法是:向行線輸出全掃描字00H,把全
17、部列線置為低電平,然后將列線的電平狀態(tài)讀入累加器A中。如果有按鍵按下,總會有一根行線電平被拉至低電平從而使行線不全為1。</p><p> 判斷鍵盤中哪一個鍵被按下使通過將列線逐列置低電平后,檢查行輸入狀態(tài)來實現(xiàn)的。方法是:依次給列線送低電平,然后查所有行線狀態(tài),如果全為1,則所按下的鍵不在此列;如果不全為1,則所按下的鍵必在此列,而且是在與零電平行線相交的交點上的那個鍵。</p><p&g
18、t; 按鍵的操作面板如圖圖4-4所示。共計數(shù)字鍵10個,功能鍵6個。</p><p> 圖3-4 按鍵操作面板示意圖</p><p><b> 鍵位說明:</b></p><p><b> M:模式轉(zhuǎn)換鍵</b></p><p><b> T:時間模式復位鍵</b>&
19、lt;/p><p> C:年月日時分秒的切換</p><p><b> S+:時間調(diào)整+</b></p><p><b> S-:時間調(diào)整-</b></p><p> L:切入秒表儲存記錄</p><p> Z:查看秒表儲存記錄</p><p>
20、 E1:高位倒計時設定</p><p> E2:低位倒計時設定</p><p><b> O:進入秒表</b></p><p><b> S:秒表時間記錄鍵</b></p><p> R+:正計時秒表開始</p><p> R-:倒計時秒表開始</p>
21、<p><b> P:秒表暫停鍵</b></p><p> 4.2 顯示電路設計</p><p> LCD顯示信號連接圖如圖1.7所示。</p><p> 圖1.7 LCD信號連接</p><p> 關鍵網(wǎng)絡名和引腳名解釋: </p><p> ?。?)DISCTRL0~4
22、:顯示控制信號。</p><p> ?。?)D0~D7、DB0~DB7:數(shù)據(jù)總線。</p><p> ?。?)E:LCD使能信號。</p><p> ?。?)RS:數(shù)據(jù)、指令選擇信號。</p><p> (5)RW:讀、寫選擇信號。</p><p> ?。?)CS1、CS2:LCD12864由兩部分組成,CS1和CS
23、2為選擇信號。</p><p> 4.3 AT24C02掉電存儲單元的設計</p><p> 掉電存儲單元的作用是在電源斷開的時候,存儲當前設定的單價信息。AT24C02是ATMEL公司的2KB字節(jié)的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10Ua(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8腳的DIP
24、封裝,使用方便。其電路如圖2-5所示。</p><p> 圖3-7 掉電存儲電路原理圖</p><p> 圖中R8、R10是上拉電阻,其作用是減少AT24C02的靜態(tài)功耗,由于AT24C02的數(shù)據(jù)線和地址線是復用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SCL(移位脈沖)和SDA(數(shù)據(jù)/地址)與單片機傳送數(shù)據(jù)。</p><p> 每當設定一次單價,系統(tǒng)就自動調(diào)
25、用存儲程序,將單價信息保存在芯片內(nèi);當系統(tǒng)重新上電的時候,自動調(diào)用讀存儲器程序,將存儲器內(nèi)的單價等信息,讀到緩存單元中,供主程序使用。</p><p><b> 五、各項程序</b></p><p> 5.1主程序main</p><p> #include <ADUC848.H></p><p>
26、#include"intrins.h"</p><p> #include"RTCH.h"</p><p> #include "key.h"</p><p> #include "lcd.h"</p><p> #define unchar unsign
27、ed char</p><p> unsigned int tsave[2][5]={{0,0,0,0,0},{0,0,0,0,0}};</p><p> unsigned int miao = 0;</p><p> unsigned char InterruptCounter=0;//定義中斷計數(shù)變量并賦初值0</p><p>
28、unsigned char flag=0;//判斷倒計時</p><p> sbit alarm =P2^6;</p><p> //////////////////////////////函數(shù)聲明</p><p> void Delay(unsigned int t);</p><p> //////////////////////
29、///</p><p> void beep()</p><p><b> {</b></p><p> unsigned int num;</p><p> for(num=0;num<500;num++)</p><p><b> {</b></p&
30、gt;<p> alarm=~alarm;</p><p> Delay(100);</p><p><b> }</b></p><p><b> }</b></p><p> void Delay(unsigned int t)</p><p>&
31、lt;b> {</b></p><p> unsigned int i;</p><p> for(i = 0;i < t;i++);</p><p><b> }</b></p><p> void main()</p><p><b> { &l
32、t;/b></p><p> unsigned char table1[16]={" "};</p><p> unsigned char table2[16]={" "};</p><p> unsigned char table[10]={"
33、0123456789"} ;</p><p> unsigned char time[7];</p><p> unsigned char m[4];</p><p> unsigned char state,set_tim=0;</p><p> unsigned char swit_flag=0,time_f=0,set
34、_f=0;</p><p> unsigned char p;</p><p> unsigned char han=1 ,lie =1;</p><p> unsigned char dajs=0,play_f=0,i;</p><p> PLLCON&=0xf8;//設置頻率為12.58MHz</p><
35、;p> CFG848|=0x01;//使用片內(nèi)xram </p><p> I2CCON=0xE8;//配置IIC為軟件主發(fā)送模式</p><p> P2 &= 0xe1;</p><p> P3 &= 0x17;</p><p> TMOD=0x01; //配置定時器0為16位模式,時鐘為12.58MHz
36、</p><p> IE=0x82; //使能定時器0中斷和全局中斷</p><p><b> TH0=0X0a;</b></p><p><b> TL0=0X4c;</b></p><p> TR0=0; //關閉、開啟定時器0</p><p>&l
37、t;b> flag=0;</b></p><p> ///////////顯示初始化</p><p> Init_Lcd();</p><p> ////////////</p><p><b> while(1)</b></p><p><b> {
38、</b></p><p> ////////////////////lcd顯示</p><p> Write_Lcd(0,0x80);</p><p> for(p = 0;p <= 15;p++)</p><p> Write_Lcd(1,table1[p]);</p><p> Writ
39、e_Lcd(0,0x80+0x40);</p><p> for(p = 0;p <= 15;p++)</p><p> Write_Lcd(1,table2[p]);</p><p> ///////////////////// </p><p> state = GetKey();</p><p
40、> if(state==0)</p><p><b> { </b></p><p> swit_flag=swit_flag+1 ;</p><p> if(swit_flag==2)</p><p><b> {</b></p><p> s
41、wit_flag=0;</p><p><b> }</b></p><p><b> }</b></p><p> /////////////時間模式</p><p> if(swit_flag==0)</p><p><b> {</b>
42、</p><p><b> TR0=0;</b></p><p><b> miao=0;</b></p><p> if(state==3)</p><p><b> {</b></p><p><b> set_f=0;</
43、b></p><p><b> }</b></p><p> if(state==7)</p><p><b> {</b></p><p> set_f=set_f+1;</p><p> if(set_f==7)</p><p>
44、 {set_f=0;}</p><p><b> }</b></p><p> if(state==11)</p><p><b> {</b></p><p> if(set_f==1){time[0]++;if(time[0]>59)time[0]=0;}//second&
45、lt;/p><p> if(set_f==2){time[1]++;if(time[1]>59)time[1]=0;}//minute</p><p> if(set_f==3){time[2]++;if(time[2]>23)time[2]=0;}//hour </p><p><b> }</b></p>
46、<p> if(state==15)</p><p><b> {</b></p><p> if(set_f==1){time[0]--;if(time[0]>=255)time[0]=59;}//second</p><p> if(set_f==2){time[1]--;if(time[1]>=255)t
47、ime[1]=59;}//minute</p><p> if(set_f==3){time[2]--;if(time[2]>=255)time[2]=23;}//hour</p><p><b> }</b></p><p><b> }</b></p><p> if(set_f!
48、=0)SetTime(time);</p><p> if(state==11)</p><p><b> { </b></p><p> if(set_f==5){time[5]++;if(time[5]>12)time[5]=1;}//month</p><p> if(set_f==6){
49、time[6]++;if(time[6]>99)time[6]=0;}//year</p><p> if(set_f==4){</p><p> time[4]++;</p><p> switch(time[5])</p><p><b> { </b></p><p><
50、b> case 1:</b></p><p><b> case 3:</b></p><p><b> case 5:</b></p><p><b> case 7:</b></p><p><b> case 8:</b>
51、</p><p><b> case 10:</b></p><p> case 12:if(time[4]>31)time[4]=1;break;</p><p><b> case 4:</b></p><p><b> case 6:</b></p&g
52、t;<p><b> case 9:</b></p><p> case 11:if(time[4]>30)time[4]=1;break;</p><p> case 2: if(time[6]%4){if(time[4]>28)time[4]=1;} </p><p> else if(time[4]>
53、;29)time[4]=1;</p><p><b> break;</b></p><p> default:break;</p><p><b> }//data</b></p><p><b> } </b></p><p><
54、;b> }</b></p><p> if(state==15)</p><p><b> {</b></p><p> if(set_f==5){time[5]--;if(time[5]>=255)time[5]=12;}//month</p><p> if(set_f==6){t
55、ime[6]--;if(time[6]>=255)time[6]=99;}//year</p><p> if(set_f==4){time[4]--;</p><p> switch(time[5])</p><p><b> { </b></p><p><b> case 1:</b&
56、gt;</p><p><b> case 3:</b></p><p><b> case 5:</b></p><p><b> case 7:</b></p><p><b> case 8:</b></p><p>
57、<b> case 10:</b></p><p> case 12:if(time[4]>=255)time[4]=31;break;</p><p><b> case 4:</b></p><p><b> case 6:</b></p><p><b
58、> case 9:</b></p><p> case 11:if(time[4]>=255)time[4]=30;break;</p><p> case 2: if(time[6]%4){if(time[4]>=255)time[4]=28;} </p><p> else if(time[4]>=255)time[4
59、]=29;break;</p><p> default:break;</p><p><b> }//data</b></p><p><b> }</b></p><p><b> }</b></p><p> if(set_f!=0)S
60、etTime(time);</p><p> if(set_f==0)ReadTime(time);</p><p><b> ////清屏</b></p><p> for(i=0;i<=15;i++)</p><p> {table1[i]=' ';table2[i]='
61、9;;}</p><p> ////////////////////////////////////////////////////////////////時分秒</p><p> table2[15]='E';</p><p> table2[14]='M';</p><p> table2[13]=
62、'I';</p><p> table2[12]='T';</p><p> table2[7]=table[time[0]%10];</p><p> table2[6]=table[time[0]/10];</p><p> table2[5]=':';</p><
63、;p> table2[4]=table[time[1]%10];</p><p> table2[3]=table[time[1]/10];</p><p> table2[2]=':';</p><p> table2[1]=table[time[2]%10];</p><p> table2[0]=tabl
64、e[time[2]/10];</p><p> ///////////////////////////////////////////////////////////////年月日顯示</p><p> //table1[10]='.';</p><p> table1[9]=table[time[4]%10];</p><
65、p> table1[8]=table[time[4]/10];</p><p> table1[7]='.';</p><p> table1[6]=table[time[5]%10];</p><p> table1[5]=table[time[5]/10];</p><p> table1[4]='
66、.';</p><p> table1[3]=table[time[6]%10];</p><p> table1[2]=table[time[6]/10];</p><p> table1[1]='0';</p><p> table1[0]='2';</p><p>
67、 /////////////////秒表模式</p><p> if(swit_flag==1)</p><p> { </p><p> if(state==1)</p><p><b> {</b></p><p><b> TR0=
68、0;</b></p><p><b> miao=0;</b></p><p> set_tim=0;</p><p><b> lie=1;</b></p><p> han=1;play_f=0;</p><p><b> } //清零&l
69、t;/b></p><p> if(state==5)</p><p><b> {</b></p><p> // TR0=0;</p><p><b> play_f=0;</b></p><p> set_tim=0;</p><
70、p> tsave[lie-1][han]=miao; //保存到數(shù)組中</p><p> han=han+1; </p><p><b> }//暫停</b></p><p> if (state==12)</p><p> {if (TR0=0){TR0=1;}</
71、p><p> if (TR0=1){TR0=0;}}</p><p> if(han==6)</p><p><b> { </b></p><p><b> //TR0=0;</b></p><p> han=1;play_f=0;</p><p
72、><b> //miao=0;</b></p><p> lie=lie+1;//換組</p><p> if(lie==3)</p><p><b> lie=1;</b></p><p><b> } </b></p><p>
73、if(state==9)</p><p><b> {</b></p><p> flag=0;play_f=0;</p><p><b> TR0=1;</b></p><p> set_tim=0;</p><p><b> }//開始</b&g
74、t;</p><p> if(state==13)</p><p><b> {</b></p><p> dajs=1;play_f=0;</p><p><b> TR0=1;</b></p><p><b> flag=1;</b><
75、;/p><p><b> han=0;</b></p><p><b> lie=1;</b></p><p> set_tim=0;//倒計時 </p><p><b> }</b></p><p> if(dajs==1) //倒計時判斷&l
76、t;/p><p><b> { </b></p><p> if(miao == 0)</p><p><b> {</b></p><p><b> dajs=0;</b></p><p><b> beep(); <
77、/b></p><p><b> }</b></p><p><b> }</b></p><p> if(state==14)</p><p><b> {</b></p><p> TR0=0;play_f=0;</p>
78、<p> miao=miao+1;</p><p> if(miao>=1001)</p><p><b> miao=0;</b></p><p><b> }//低二位設置</b></p><p> if(state==10)</p><p>
79、<b> {</b></p><p> TR0=0;play_f=0;</p><p> miao=miao+100;</p><p> if(miao>=1001)</p><p><b> miao=0;</b></p><p> }//高二位設置
80、 </p><p> if(state==2)//顯示</p><p><b> {</b></p><p><b> TR0=0;</b></p><p><b> play_f=1;</b></p><p> han=1;lie=1;
81、</p><p> miao=tsave[lie-1][han-1];</p><p><b> }</b></p><p> if(play_f==1)</p><p><b> {</b></p><p> if(state==6)</p>
82、<p><b> {</b></p><p><b> TR0=0;</b></p><p> han=han+1;</p><p> if(han==6)</p><p><b> {</b></p><p><b>
83、 han=1;</b></p><p> lie=lie+1;</p><p> if(lie==3)</p><p><b> {</b></p><p> lie=1;han=1;</p><p><b> }</b></p><
84、;p><b> } </b></p><p><b> } </b></p><p> miao=tsave[lie-1][han-1]; </p><p><b> }</b></p><p> /////////////
85、//////////////////////////////////////////////////////////////////////////////</p><p> m[0]=miao%10;</p><p> m[1]=(miao%100)/10;</p><p> m[2]=(miao%1000)/100;</p><p>
86、; m[3]=miao/1000;</p><p><b> ////清屏</b></p><p> for(i=0;i<=15;i++)</p><p> {table1[i]=' ';table2[i]=' ';}</p><p> //////////////////
87、//////////////// 顯示</p><p> ReadTime(time);</p><p> table1[15]=table[time[1]%10];</p><p> table1[14]=table[time[1]/10];</p><p> table1[13]=':';</p>&
88、lt;p> table1[12]=table[time[2]%10];</p><p> table1[11]=table[time[2]/10];</p><p> table1[9]=table[time[4]%10];//日</p><p> table1[8]=table[time[4]/10];</p><p> t
89、able1[7]='.';</p><p> table1[6]=table[time[5]%10];//月</p><p> table1[5]=table[time[5]/10];</p><p> table1[4]='.';</p><p> table1[3]=table[time[6]%10
90、];//年</p><p> table1[2]=table[time[6]/10];</p><p> table1[1]='0';</p><p> table1[0]='2';</p><p> ///////////////////////////////////////////////////
91、////////////////////////////////////</p><p> if(han==0&&lie==1){table2[1]='S';table2[2]='E';table2[3]='C';table2[4]='O';table2[5]='N';table2[6]='D';}&
92、lt;/p><p> else{table2[2]='Z';</p><p> table2[3]='B';</p><p> table2[5]=table[lie];</p><p> table2[6]=table[han];}</p><p> table2[10]=tab
93、le[m[3]];</p><p> table2[11]=table[m[2]];</p><p> table2[12]=table[m[1]];</p><p> table2[13]='.';</p><p> table2[14]=table[m[0]];</p><p><b&
94、gt; }</b></p><p> ///////////////////////////////////////////////////////////////////////////////////////////////</p><p> } </p><p><b> }</b>&l
95、t;/p><p> void TimerInterrupt() interrupt 1</p><p><b> {</b></p><p><b> TH0=0X0a;</b></p><p><b> TL0=0X4c;</b></p><p>
96、; InterruptCounter++;</p><p> if(InterruptCounter>=20)</p><p><b> {</b></p><p> InterruptCounter=0;</p><p> if(flag==0)</p><p><b>
97、; {</b></p><p><b> miao++;</b></p><p> if(miao >= 1001)miao = 0;</p><p><b> }</b></p><p> if(flag==1)//倒計時</p><p>&l
98、t;b> {</b></p><p><b> miao--;</b></p><p> if(miao==0|miao==65535)miao = 0; </p><p><b> }</b></p><p><b> }</b></p
99、><p><b> }</b></p><p> 5.2、i2c及1307程序</p><p> #include <ADUC848.H></p><p> #include"intrins.h"</p><p> #define unchar unsigne
100、d char</p><p> //////////////////////////////函數(shù)聲明</p><p> unsigned char Key_process();</p><p> void Delay();</p><p> void delay1(unsigned int count);</p><
101、;p> void IIC_Delay();</p><p> void init (void);</p><p> void start(void);</p><p> void stop(void);</p><p> void ack(void);</p><p> void unack() ;&
102、lt;/p><p> unchar read(void);</p><p> void write(unchar a);</p><p> void SetTime(unsigned char TIME[7]);</p><p> void ReadTime(unsigned char TIME[7]);</p><p
103、> /////////////////////////IIC</p><p> void delay1(unsigned int count) //延時1ms程序</p><p><b> {</b></p><p> unsigned int i,j;</p><p> for(i=0;i<co
104、unt;i++)</p><p> for(j=0;j<120;j++);</p><p><b> }</b></p><p> void IIC_Delay()</p><p><b> {</b></p><p> _nop_();_nop_();_no
105、p_();</p><p> _nop_();_nop_();_nop_();</p><p><b> }</b></p><p> void init (void)</p><p><b> {</b></p><p><b> MCO=1;</
106、b></p><p><b> MDE=1;</b></p><p><b> MDO=1;</b></p><p><b> }</b></p><p> void start(void)</p><p><b> {
107、</b></p><p><b> MDE=1;</b></p><p><b> MDO=1;</b></p><p><b> MCO=1;</b></p><p> IIC_Delay();</p><p><b>
108、 MDO=0;</b></p><p> IIC_Delay(); </p><p><b> }</b></p><p> void stop(void)</p><p><b> {</b></p><p><b> MDE=1;</
109、b></p><p><b> MDO=0;</b></p><p><b> MCO=1;</b></p><p> IIC_Delay(); </p><p><b> MDO=1;</b></p><p> IIC_Delay();
110、</p><p><b> }</b></p><p> void ack(void)</p><p><b> {</b></p><p> unchar i=0;</p><p><b> MCO=1;</b></p><
111、;p><b> MDE=1;</b></p><p> IIC_Delay();</p><p> while(MDO==1&&i<100)</p><p><b> i++;</b></p><p><b> MCO=0;</b><
112、/p><p> IIC_Delay();</p><p><b> }</b></p><p> void unack() </p><p><b> { </b></p><p><b> MDE=1;</b
113、></p><p><b> MDO=1;</b></p><p> IIC_Delay();</p><p><b> MCO=1;</b></p><p> IIC_Delay();</p><p><b> MCO=0;</b>&l
114、t;/p><p> IIC_Delay(); </p><p><b> }</b></p><p> unchar read(void)</p><p><b> {</b></p><p> unchar i,dat;</p><p><
115、;b> dat=0;</b></p><p><b> MCO=0;</b></p><p> IIC_Delay();</p><p><b> MDE=1;</b></p><p><b> MDO=1;</b></p><p
116、><b> MDE=0;</b></p><p> IIC_Delay();</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> MCO=1;</b></p><p>
117、 dat=dat<<1;</p><p> dat=dat|MDI;</p><p> IIC_Delay();</p><p><b> MCO=0;</b></p><p> IIC_Delay();</p><p><b> }</b></
118、p><p> return dat;</p><p><b> }</b></p><p> void write(unchar a)</p><p><b> {</b></p><p><b> unchar i;</b></p>
119、<p><b> MCO=0;</b></p><p><b> MDE=1;</b></p><p> IIC_Delay();</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><
120、;p> if(a&0x80)</p><p><b> MDO=1;</b></p><p><b> else</b></p><p><b> MDO=0;</b></p><p><b> a=a<<1;</b>&
121、lt;/p><p> IIC_Delay();</p><p><b> MCO=1;</b></p><p> IIC_Delay();</p><p><b> MCO=0;</b></p><p> IIC_Delay(); </p><p&g
122、t;<b> }</b></p><p><b> MDO=1;</b></p><p> IIC_Delay();</p><p><b> }</b></p><p> void ReadTime(unsigned char TIME[7])</p>
123、<p><b> {</b></p><p> bit EATemp;</p><p> unsigned char temp,i;</p><p> EATemp=EA;</p><p> for(i=0;i<7;i++)</p><p><b> {&l
124、t;/b></p><p><b> start();</b></p><p> write(0xd0);</p><p><b> ack();</b></p><p><b> write(i);</b></p><p><b&g
125、t; ack();</b></p><p> stop(); </p><p> delay1(10);</p><p><b> start();</b></p><p> write(0xd1);</p><p><b> ack(); </b
126、></p><p> TIME[i]=read();</p><p><b> unack(); </b></p><p><b> stop(); </b></p><p> delay1(1);</p><p><b> }</b>&
127、lt;/p><p> TIME[0]=((TIME[0]&0x7f)>>4)*10+(TIME[0]&0x0f); //second</p><p> TIME[1]=((TIME[1]&0x7f)>>4)*10+(TIME[1]&0x0f); //minute</p><p> if(TIME[2]&a
128、mp;0x40)</p><p><b> {</b></p><p> if(TIME[2]&0x20)temp=0x80;else temp=0x40;</p><p> TIME[2]=((TIME[2]&0x1f)>>4)*10+(TIME[2]&0x0f); //12hour</
129、p><p> TIME[2]|=temp; </p><p><b> } </b></p><p><b> else</b></p><p><b> {</b></p><p> TIME[2]=((TIME
130、[2]&0x3f)>>4)*10+(TIME[2]&0x0f);//24</p><p><b> }</b></p><p> TIME[3]=TIME[3]&0x07; //week</p><p> TIME[4]=((TIME[4]&
131、0x3f)>>4)*10+(TIME[4]&0x0f); //date</p><p> TIME[5]=((TIME[5]&0x1f)>>4)*10+(TIME[5]&0x0f); //month</p><p> TIME[6]=(TIME[6]>>4)*10+(TIME[6]&0x0f); /
132、/year</p><p> EA=EATemp;</p><p><b> }</b></p><p> void SetTime(unsigned char TIME[7])</p><p><b> {</b></p><p> bit EATemp;<
133、/p><p> unsigned char temp=0;</p><p> unsigned char TimeTemp[7];</p><p> EATemp=EA;</p><p> for(temp=0;temp<7;temp++)</p><p> TimeTemp[temp]=TIME[temp
134、];</p><p><b> temp=0;</b></p><p> TimeTemp[6]=((TimeTemp[6]/10)<<4)+(TimeTemp[6]%10);//year</p><p> TimeTemp[5]=((TimeTemp[5]/10)<<4)+(TimeTemp[5]%10);/
135、/month</p><p> TimeTemp[4]=((TimeTemp[4]/10)<<4)+(TimeTemp[4]%10);//date</p><p> TimeTemp[3]=((TimeTemp[3]/10)<<4)+(TimeTemp[3]%10);//week //to ascII</p><p> if((Ti
136、meTemp[2]&0xc0)==0x00)</p><p><b> {</b></p><p> TimeTemp[2]=((TimeTemp[2]/10)<<4)+(TimeTemp[2]%10);</p><p><b> }</b></p><p><b&g
137、t; else</b></p><p><b> {</b></p><p> if((TimeTemp[2]&0xc0)==0x01)temp=0x40;else temp=0x60;</p><p> TimeTemp[2]&=0x3f;</p><p> TimeTemp[2]
138、=((TimeTemp[2]/10)<<4)+(TimeTemp[2]%10);</p><p> TimeTemp[2]|=temp; //hour</p><p><b> }</b></p><p> TimeTemp[1]=((TimeTemp[1]/10)<<4)+(Time
139、Temp[1]%10);TimeTemp[1]&=0x7f;//minute </p><p> TimeTemp[0]=((TimeTemp[0]/10)<<4)+(TimeTemp[0]%10); //second</p><p> TimeTemp[0]&=0x7f;</p><p><b> start();&l
140、t;/b></p><p> write(0xd0);</p><p><b> ack();</b></p><p> write(0x00);</p><p><b> ack();</b></p><p> write(TimeTemp[0]);<
141、/p><p><b> ack();</b></p><p> write(TimeTemp[1]);</p><p><b> ack();</b></p><p> write(TimeTemp[2]);</p><p><b> ack();</b
142、></p><p> write(TimeTemp[3]);</p><p><b> ack();</b></p><p> write(TimeTemp[4]);</p><p><b> ack();</b></p><p> write(TimeTem
143、p[5]);</p><p><b> ack();</b></p><p> write(TimeTemp[6]);</p><p><b> ack();</b></p><p> stop(); </p><p> delay1(1); </
144、p><p> EA=EATemp; </p><p><b> }</b></p><p><b> 5.3按鍵程序</b></p><p> #include <ADUC848.H></p><p> void KeyDelay(unsigned in
145、t KeyTime);</p><p> unsigned char GetKey();</p><p> unsigned char GetKey()</p><p><b> {</b></p><p> static unsigned char KeyHaveFree=1;</p><p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機電子秒表系統(tǒng)設計課程設計說明
- 單片機課程設計--電子秒表
- 單片機課程設計——電子秒表
- 單片機課程設計---電子秒表設計
- 課程設計報告—基于單片機的電子秒表設計
- 單片機秒表課程設計報告
- 單片機秒表設計課程設計報告
- 單片機課程設計報告-秒表設計
- 單片機課程設計報告-秒表設計
- 單片機秒表設計課程設計報告
- 單片機秒表設計課程設計報告
- 單片機課程設計報告---單片機秒表系統(tǒng)設計
- 單片機時鐘秒表課程設計報告
- 單片機電子時鐘課程設計報告
- 單片機電子時鐘課程設計報告
- 單片機電子時鐘課程設計報告
- 單片機電子時鐘課程設計報告
- 單片機電子時鐘課程設計報告
- 單片機電子鐘課程設計報告
- 單片機電子琴課程設計報告
評論
0/150
提交評論