版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 題 目: 秒表計(jì)時(shí)器</p><p> 課 程: 單片機(jī)課程設(shè)計(jì)</p><p><b> 專 業(yè):</b></p><p><b> 班 級(jí):</b></p><p><b> 學(xué) 號(hào):</b></p>&l
2、t;p><b> 姓 名:</b></p><p><b> 指導(dǎo) 老師:</b></p><p><b> 設(shè)計(jì) 時(shí)間: </b></p><p><b> 目錄</b></p><p><b> 設(shè)計(jì)目的</b>
3、;</p><p><b> 設(shè)計(jì)要求</b></p><p><b> 設(shè)計(jì)原理</b></p><p><b> 電路的功能單元設(shè)計(jì)</b></p><p><b> 各項(xiàng)程序</b></p><p><b>
4、 六、設(shè)計(jì)心得體會(huì)</b></p><p><b> 設(shè)計(jì)目的</b></p><p> 1、用紅、綠、黃三色發(fā)光二極管做信號(hào)燈,主干道A為東西向,設(shè)紅、綠、黃三色燈為AR、AG、AY;支干道B喂南北向。三色燈為BR、BG、BY。</p><p> 2、主干道車輛較多,所以亮綠燈的時(shí)間設(shè)為50s;支干道亮綠燈的時(shí)間設(shè)為30s
5、。當(dāng)主干道允許通行亮綠燈時(shí)則支干道亮紅燈;相反,支干道允許通行亮綠燈時(shí)則主干道亮紅燈。每次由綠燈轉(zhuǎn)變?yōu)榧t燈時(shí),其間要亮5s的黃燈作為過(guò)渡,以便行駛中的車輛有時(shí)間停到禁止線以內(nèi)。</p><p> 3、交通燈正常運(yùn)行時(shí),用4位數(shù)碼管M1、M2、M3、M4顯示主干道和支干道的倒計(jì)時(shí)時(shí)間,M1、M2顯示主干道在當(dāng)前狀態(tài)剩余時(shí)間;m3、m4顯示支干道在當(dāng)前狀態(tài)的剩余時(shí)間。</p><p> 4
6、、能實(shí)現(xiàn)系統(tǒng)總清0,清0后計(jì)數(shù)器由出事?tīng)顟B(tài)開(kāi)始計(jì)數(shù)。指示燈指示主干道亮綠燈。</p><p> 5、具有一定的擴(kuò)展功能:</p><p> 它能實(shí)現(xiàn)特殊狀態(tài)的功能先死,用開(kāi)關(guān)S作為特殊信號(hào)傳感器,S為1時(shí)進(jìn)入特殊狀態(tài)并實(shí)現(xiàn)下列特殊狀態(tài)功能:</p><p> 1)顯示器M1、M2、M3、M4閃爍,即在全0和當(dāng)前計(jì)時(shí)時(shí)間中交替顯示。</p><
7、;p> 2)計(jì)數(shù)器停止計(jì)數(shù)并保持原來(lái)的時(shí)間數(shù)據(jù)。</p><p> 3)東西、南北方向的三色燈全顯示為紅色狀態(tài)。</p><p> 4)特殊狀態(tài)解除后能繼續(xù)返回正常工作狀態(tài)。</p><p> 5)進(jìn)入特殊狀態(tài)時(shí),音響電路發(fā)出急促的“嘀——嘟”聲,以示警告。</p><p><b> 二、設(shè)計(jì)要求</b>
8、</p><p> 1、分析設(shè)計(jì)任務(wù),擬定多種設(shè)計(jì)方案,根據(jù)當(dāng)時(shí)的制作條件,選定其中的一種方案繪制系統(tǒng)框圖和設(shè)計(jì)流程。</p><p><b> 三、設(shè)計(jì)原理</b></p><p><b> 系統(tǒng)模塊劃分</b></p><p> 根據(jù)設(shè)計(jì)要求系統(tǒng)分為4大模塊</p><
9、;p> 主程序模塊(內(nèi)包含發(fā)聲模塊)</p><p><b> 鍵盤(pán)按鍵模塊</b></p><p><b> 1602顯示模塊</b></p><p><b> 1307時(shí)鐘模塊</b></p><p><b> 系統(tǒng)設(shè)計(jì)思路</b>&l
10、t;/p><p> 根據(jù)設(shè)計(jì)要求,我們主程序模塊主要以按鍵為觸發(fā)其他狀態(tài)的信號(hào),沒(méi)有按鍵時(shí),循環(huán)執(zhí)行當(dāng)前狀態(tài)內(nèi)容,即掃描按鍵,通過(guò)I2C讀取1307內(nèi)部存儲(chǔ)時(shí)間并在LCD1602上顯示。而定時(shí)器0主要用來(lái)發(fā)聲脈沖的建立。</p><p> 程序狀態(tài)主要分為三種(即:秒表模式swit_flag==1、北京時(shí)間模式swit_flag==0)</p><p><b&
11、gt; a)</b></p><p> 在時(shí)間模式下可以通過(guò)設(shè)置年月日時(shí)分秒的鍵和一個(gè)加鍵一個(gè)減鍵來(lái)設(shè)置需要顯示的時(shí)間;</p><p><b> b)</b></p><p> 秒表模式下,通過(guò)切換鍵切換到秒表模式,通過(guò)選擇鍵(即順計(jì)時(shí)和倒計(jì)時(shí)的選擇),可以設(shè)置需要倒計(jì)的時(shí)間長(zhǎng)度,按相應(yīng)的鍵保存當(dāng)前的數(shù)據(jù),按顯示鍵,顯示之
12、前保存相應(yīng)組別的數(shù)據(jù)(詳見(jiàn)流程圖)。倒計(jì)時(shí)到零時(shí),蜂鳴器會(huì)發(fā)出響聲,提醒時(shí)間到。</p><p><b> 主程序流程框圖</b></p><p><b> 秒表模式</b></p><p><b> 時(shí)間模式</b></p><p><b> 讀取鍵值<
13、;/b></p><p> 關(guān)閉時(shí)間讀取, </p><p> 鍵值=7? 對(duì)DS1307進(jìn)</p><p><b> 行時(shí)間設(shè)置</b></p><p><b> 正常讀取</b></p>
14、<p><b> DS1307</b></p><p> 顯示 </p><p> 四、電路的功能單元設(shè)計(jì)</p><p> 4.1.按鍵電路設(shè)計(jì)</p><p> 由于設(shè)計(jì)要求使用矩陣鍵盤(pán),所以本設(shè)計(jì)就采用行列式鍵盤(pán),同時(shí)也能減少鍵盤(pán)與單片機(jī)接口時(shí)所占
15、用的I/O線的數(shù)目,在按鍵比較多的時(shí)候,通常采用這樣方法。其原理如圖4-1所示。</p><p> 每一條水平(行線)與垂直線(列線)的交叉處不相通,而是通過(guò)一個(gè)按鍵來(lái)連通,利用這種行列式矩陣結(jié)構(gòu)只需要N條行線和M條列線,即可組成具有N×M個(gè)按鍵的鍵盤(pán)。</p><p> 在這種行列式矩陣鍵盤(pán)非鍵盤(pán)編碼的單片機(jī)系統(tǒng)中,鍵盤(pán)處理程序首先執(zhí)行等待按鍵并確認(rèn)有無(wú)按鍵按下的程序段。&
16、lt;/p><p> 當(dāng)確認(rèn)有按鍵按下后,下一步就要識(shí)別哪一個(gè)按鍵按下。對(duì)鍵的識(shí)別通常有兩種方法:一種是常用的逐行掃描查詢法;另一種是速度較快的線反轉(zhuǎn)法。</p><p> 對(duì)照?qǐng)D2-4所示的44鍵盤(pán),說(shuō)明線反轉(zhuǎn)個(gè)工作原理。</p><p> 首先辨別鍵盤(pán)中有無(wú)鍵按下,有單片機(jī)I/O口向鍵盤(pán)送全掃描字,然后讀入行線狀態(tài)來(lái)判斷。方法是:向行線輸出全掃描字00H,把全
17、部列線置為低電平,然后將列線的電平狀態(tài)讀入累加器A中。如果有按鍵按下,總會(huì)有一根行線電平被拉至低電平從而使行線不全為1。</p><p> 判斷鍵盤(pán)中哪一個(gè)鍵被按下使通過(guò)將列線逐列置低電平后,檢查行輸入狀態(tài)來(lái)實(shí)現(xiàn)的。方法是:依次給列線送低電平,然后查所有行線狀態(tài),如果全為1,則所按下的鍵不在此列;如果不全為1,則所按下的鍵必在此列,而且是在與零電平行線相交的交點(diǎn)上的那個(gè)鍵。</p><p&g
18、t; 按鍵的操作面板如圖圖4-4所示。共計(jì)數(shù)字鍵10個(gè),功能鍵6個(gè)。</p><p> 圖3-4 按鍵操作面板示意圖</p><p><b> 鍵位說(shuō)明:</b></p><p><b> M:模式轉(zhuǎn)換鍵</b></p><p><b> T:時(shí)間模式復(fù)位鍵</b>&
19、lt;/p><p> C:年月日時(shí)分秒的切換</p><p><b> S+:時(shí)間調(diào)整+</b></p><p><b> S-:時(shí)間調(diào)整-</b></p><p> L:切入秒表儲(chǔ)存記錄</p><p> Z:查看秒表儲(chǔ)存記錄</p><p>
20、 E1:高位倒計(jì)時(shí)設(shè)定</p><p> E2:低位倒計(jì)時(shí)設(shè)定</p><p><b> O:進(jìn)入秒表</b></p><p><b> S:秒表時(shí)間記錄鍵</b></p><p> R+:正計(jì)時(shí)秒表開(kāi)始</p><p> R-:倒計(jì)時(shí)秒表開(kāi)始</p>
21、<p><b> P:秒表暫停鍵</b></p><p> 4.2 顯示電路設(shè)計(jì)</p><p> LCD顯示信號(hào)連接圖如圖1.7所示。</p><p> 圖1.7 LCD信號(hào)連接</p><p> 關(guān)鍵網(wǎng)絡(luò)名和引腳名解釋: </p><p> (1)DISCTRL0~4
22、:顯示控制信號(hào)。</p><p> ?。?)D0~D7、DB0~DB7:數(shù)據(jù)總線。</p><p> ?。?)E:LCD使能信號(hào)。</p><p> (4)RS:數(shù)據(jù)、指令選擇信號(hào)。</p><p> ?。?)RW:讀、寫(xiě)選擇信號(hào)。</p><p> ?。?)CS1、CS2:LCD12864由兩部分組成,CS1和CS
23、2為選擇信號(hào)。</p><p> 4.3 AT24C02掉電存儲(chǔ)單元的設(shè)計(jì)</p><p> 掉電存儲(chǔ)單元的作用是在電源斷開(kāi)的時(shí)候,存儲(chǔ)當(dāng)前設(shè)定的單價(jià)信息。AT24C02是ATMEL公司的2KB字節(jié)的電可擦除存儲(chǔ)芯片,采用兩線串行的總線和單片機(jī)通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10Ua(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8腳的DIP
24、封裝,使用方便。其電路如圖2-5所示。</p><p> 圖3-7 掉電存儲(chǔ)電路原理圖</p><p> 圖中R8、R10是上拉電阻,其作用是減少AT24C02的靜態(tài)功耗,由于AT24C02的數(shù)據(jù)線和地址線是復(fù)用的,采用串口的方式傳送數(shù)據(jù),所以只用兩根線SCL(移位脈沖)和SDA(數(shù)據(jù)/地址)與單片機(jī)傳送數(shù)據(jù)。</p><p> 每當(dāng)設(shè)定一次單價(jià),系統(tǒng)就自動(dòng)調(diào)
25、用存儲(chǔ)程序,將單價(jià)信息保存在芯片內(nèi);當(dāng)系統(tǒng)重新上電的時(shí)候,自動(dòng)調(diào)用讀存儲(chǔ)器程序,將存儲(chǔ)器內(nèi)的單價(jià)等信息,讀到緩存單元中,供主程序使用。</p><p><b> 五、各項(xiàng)程序</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;//定義中斷計(jì)數(shù)變量并賦初值0</p><p>
28、unsigned char flag=0;//判斷倒計(jì)時(shí)</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;//設(shè)置頻率為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; //配置定時(shí)器0為16位模式,時(shí)鐘為12.58MHz
36、</p><p> IE=0x82; //使能定時(shí)器0中斷和全局中斷</p><p><b> TH0=0X0a;</b></p><p><b> TL0=0X4c;</b></p><p> TR0=0; //關(guān)閉、開(kāi)啟定時(shí)器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> /////////////時(shí)間模式</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> ////////////////////////////////////////////////////////////////時(shí)分秒</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> }//開(kāi)始</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;//倒計(jì)時(shí) </p><p><b> }</b></p><p> if(dajs==1) //倒計(jì)時(shí)判斷&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> }//低二位設(shè)置</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> }//高二位設(shè)置
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)//倒計(jì)時(shí)</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) //延時(shí)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)電子秒表系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)說(shuō)明
- 單片機(jī)課程設(shè)計(jì)--電子秒表
- 單片機(jī)課程設(shè)計(jì)——電子秒表
- 單片機(jī)課程設(shè)計(jì)---電子秒表設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告—基于單片機(jī)的電子秒表設(shè)計(jì)
- 單片機(jī)秒表課程設(shè)計(jì)報(bào)告
- 單片機(jī)秒表設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告-秒表設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告-秒表設(shè)計(jì)
- 單片機(jī)秒表設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 單片機(jī)秒表設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)秒表系統(tǒng)設(shè)計(jì)
- 單片機(jī)時(shí)鐘秒表課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子琴課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論