單片機(jī)電子秒表課程設(shè)計(jì)報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩26頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論