2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  課程設(shè)計報告</b></p><p>  題 目 定時插座 </p><p>  課 程 名 稱 單片機原理及接口技術(shù)</p><p>  院 部 名 稱 機電工程學(xué)院 </p><p>  專 業(yè)

2、自動化 </p><p>  班 級 09自動化 </p><p>  學(xué) 生 姓 名 </p><p>  學(xué) 號 </p><p>  課程設(shè)計地點 </p><p

3、>  課程設(shè)計學(xué)時 一周 </p><p>  指 導(dǎo) 教 師 </p><p><b>  目錄</b></p><p><b>  一:概述</b></p><p>  二:設(shè)計要求和設(shè)計思路及方案</p&

4、gt;<p><b>  2.1設(shè)計要求</b></p><p><b>  2.2設(shè)計思路</b></p><p><b>  2.3設(shè)計方案</b></p><p><b>  三:硬件電路設(shè)計</b></p><p><b>

5、  3.1按鍵設(shè)計電路</b></p><p>  3.2數(shù)碼管顯示電路</p><p>  3.3 DS1302電路和AT24C02電路</p><p><b>  3.4繼電器電路</b></p><p><b>  四:軟件設(shè)計</b></p><p>  

6、五:系統(tǒng)調(diào)試及軟件仿真</p><p><b>  六:總結(jié)</b></p><p><b>  概述</b></p><p>  隨著科學(xué)技術(shù)特別是微型計算機技術(shù)的高速發(fā)展,單片機微機技術(shù)也獲得了飛速發(fā)展。目前,單片機已經(jīng)在日常生活和控制領(lǐng)域等方面得到了廣泛的應(yīng)用,它正為我國經(jīng)濟的快速發(fā)展發(fā)揮著舉足輕重的作用。作為自動化

7、專業(yè)的一名工科學(xué)生應(yīng)該牢牢掌握這一重要技術(shù)。而課程設(shè)計這一環(huán)節(jié)是我們提高單片機應(yīng)用能力的很好機會,也是我們學(xué)好這一課程的必經(jīng)環(huán)節(jié)。通過課程設(shè)計可以進一步鞏固我們前面所學(xué)的理論知識,使我們對單片機理論知識有一個深刻的認識和全面的掌握。另外通過這一真正意義上的實踐活動,我們可以從中發(fā)現(xiàn)自己的不足之處并能夠在自己的深思下和老師的指導(dǎo)下得到及時的解決。再次,它能使我們的應(yīng)用能力和科技創(chuàng)新能力得到較大的提高。</p><p&g

8、t;  單片機作為嵌入式微控制器在工業(yè)測控系統(tǒng),智能儀器和家用電器中得到廣泛應(yīng)用。雖然單片機的品種很多,但MCS-51系列單片機仍不失為單片機中的主流機型。本課程一MCS-51系列以及派生系列單片機芯片為主介紹單片機的原理及應(yīng)用,其特點是由淺入深,注重接口技術(shù)和應(yīng)用。</p><p>  設(shè)計要求和設(shè)計思路及方案</p><p><b>  2.1 設(shè)計要求</b>&

9、lt;/p><p>  本次課程設(shè)計用STC89C52作為主控器做一個定時插座。實現(xiàn)一個具有定時、按鍵設(shè)置及控制、定時時間顯示等功能的定時開關(guān)插座,具體要求和指標(biāo)如下:</p><p>  可以設(shè)定三組定時時間值。</p><p>  設(shè)定的定時可調(diào)整的時間范圍。</p><p>  具有開始/停止操作按鍵。</p><p&g

10、t;  具有定時時間顯示和時鐘顯示。</p><p><b>  2.2設(shè)計思路</b></p><p>  為了確定其設(shè)計方案,首先必須構(gòu)思好初步的設(shè)計思路。根據(jù)設(shè)計要求和實驗仿真條件,初步的設(shè)計思路可以總結(jié)如下:</p><p>  用DS1302芯片處理當(dāng)前時間并用8位數(shù)碼管顯示。</p><p>  用AT24C

11、02芯片存儲預(yù)先設(shè)定好的密碼。</p><p>  設(shè)置模式:常開模式、常閉模式、定時模式</p><p>  設(shè)置開關(guān)時間:先按設(shè)置鍵出現(xiàn)01 on,再按小時和分鐘鍵調(diào)節(jié)時間,調(diào)節(jié)好后再按設(shè)置鍵出現(xiàn)01 off,再調(diào)節(jié)時間,按確認鍵,這樣就設(shè)置好一組定時時間。設(shè)置其他組方法相同。</p><p><b>  2.3設(shè)計方案</b></p

12、><p>  根據(jù)設(shè)計要求和設(shè)計思路,可以確定系統(tǒng)的設(shè)計方案,圖1為該系統(tǒng)設(shè)計的硬件電路圖設(shè)計框圖。硬件主要由6部分組成,即單片機,鍵盤,數(shù)碼管顯示,DS1302芯片,AT24C02芯片,繼電器。</p><p>  STC89C52介紹</p><p>  VCC:供電電壓。 GND:接地。 </p><p>  P0口:P0口為一個8位漏級開

13、路雙向I/O口,每腳可吸收8個TTL門電流。當(dāng)P0口的管腳第一次寫“1”時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 </p><p>  P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4個TTL門電流。P1口管腳寫入“1”后,被內(nèi)部

14、上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 </p><p>  P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存

15、儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 </p><p>  P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于

16、外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口作為AT89C51的一些特殊功能口,管腳 備選功能 </p><p>  P3.0 RXD(串行輸入口) </p><p>  P3.1 TXD(串行輸出口) </p><p>  P3.2 /INT0(外部中斷0) </p><p>  P3.3 /INT1(外部中斷1)

17、 </p><p>  P3.4 T0(計時器0外部輸入) </p><p>  P3.5 T1(計時器1外部輸入) </p><p>  P3.6 /WR(外部數(shù)據(jù)存儲器寫選通) </p><p>  P3.7 /RD(外部數(shù)據(jù)存儲器讀選通) </p><p>  RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳

18、兩個機器周期的高電平時間。 </p><p>  ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。 </p><p>  在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想

19、禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 </p><p>  /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。/EA / VPP:當(dāng)/EA保持低電平時,則在此期間外部

20、程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 </p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。 </p><p>  XTAL2:來自反向振蕩器的輸出。</p><

21、p>  在單片機中,定時功能既可以由硬件(定時/計數(shù)器)實現(xiàn),也可通過軟件定時實現(xiàn)。硬件定時是利用單片機內(nèi)定時器定時,啟動以后定時器可與CPU并行工作,不占用CPU時間,CPU有較高的工作效率。采用硬件定時和軟件定時比用的方式,即用T0溢出中斷功能實現(xiàn)50ms定時,通過軟件延時程序?qū)崿F(xiàn)5s定時。定時器的TMOD用于設(shè)置定時器/計數(shù)器的工作方式,并確定用于定時還是計數(shù)。TCON只要功能是為定時器在溢出時設(shè)定標(biāo)志位,并控制定時器運行或

22、停止。</p><p><b>  圖1:硬件電路設(shè)計</b></p><p><b>  硬件電路設(shè)計</b></p><p><b>  3.1按鍵設(shè)計電路</b></p><p>  對于按鍵電路的設(shè)計可以有2種方式:一種方式是獨立按鍵設(shè)計,這種設(shè)計電路適用于按鍵較少的控

23、制,具有按鍵電路簡單,編程方便等優(yōu)點;另一種方式是矩陣方式鍵盤的設(shè)計,它適用于對控制按鍵較多的電路控制,占用較少的I/O接口,但是按鍵電路復(fù)雜,編程比較復(fù)雜。本課題總共需要6個按鍵,所以采用矩陣式鍵盤,如圖2</p><p><b>  圖2:按鍵電路</b></p><p>  3.2數(shù)碼管顯示電路</p><p>  本課題所采用的是數(shù)碼管

24、作為顯示電路,用來顯示當(dāng)前的時間及密碼門時輸入的密碼。硬件電路連接是單片機P0口接2片74hc573鎖存芯片,兩片芯片的輸出端分別接數(shù)碼管的段選端跟位選端。這樣P0口不斷送出位碼跟斷碼鎖存可以實現(xiàn)數(shù)碼管的動態(tài)顯示。連接方法如圖3所示。</p><p>  圖3:數(shù)碼管顯示電路</p><p>  3.3 DS1302電路和AT24C02電路</p><p>  24

25、C02的SCK,SDA,WP引腳分別接單片機的P2.0,P2.1引腳和地。DS1302的RST,SCLK,I/O引腳分別接單片機的P1.3,P1.7和P2.3引腳。電路圖如圖4所示。</p><p>  圖4:DS1302和24C02連接電路</p><p><b>  3.4繼電器電路</b></p><p>  繼電器的線圈一端接電源vcc

26、一端接ULN2003的12腳。ULN2003是8個非門,可以耐高壓等,用來驅(qū)動繼電器。電路連接圖如圖5所示。</p><p>  圖5:繼電器連接電路</p><p>  軟件設(shè)計主程序流程圖</p><p><b>  N</b></p><p><b>  Y</b></p>&l

27、t;p>  五、系統(tǒng)調(diào)試和軟件仿真</p><p>  5.1程序調(diào)試部分:</p><p>  uVsion3先新建一個工程,選擇芯片為AT89C52然后點擊是,然后彈出來是否加入標(biāo)準(zhǔn)啟動文件,點擊否,然后新建一個文件,保存為“main.c”。然后雙擊工程窗口的Target選擇添加文件到工程,選剛才新建的文件然后點擊OK,輸入程序,點擊工程選擇,選中Output中的Creat He

28、x File,然后編譯,連接生成Hex文件,有錯誤修改后再編譯連接。當(dāng)編譯結(jié)果中不出現(xiàn)錯誤時說明已經(jīng)沒有語法錯誤,但是否能完成課題所需要的功能則需要進行仿真。5.2軟件仿真部分:</p><p>  運行proteus的ISIS后進入仿真界面將所需元件選擇好,根據(jù)原理圖畫出仿真圖,待仿真圖畫好后雙擊AT89C52導(dǎo)入Keil所產(chǎn)生的后綴名為.HEX文件。按開始鍵進行仿真。</p><p>

29、;<b>  實驗程序:</b></p><p>  #include<reg52.h></p><p>  #include<intrins.h></p><p>  #include"display.h"</p><p>  #include"ds1302.h&q

30、uot;</p><p>  #include"key.h"</p><p>  #include"24c02.h"</p><p>  #include"uln2003.h"</p><p>  sbit buzz=P0^6;</p><p>  sbit

31、relay=P0^4;</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  typedef struct SYSTEMTIME</p><p><b>  { </b></p><p

32、>  uchar min;</p><p>  uchar hour;</p><p>  uchar sec;</p><p><b>  };</b></p><p>  struct SYSTEMTIME clock,time;</p><p>  uchar tempdata[8]

33、,temp[8],disTime[8];</p><p>  uchar keynum,n,setflag,modeflag,hour_temp,min_temp;</p><p>  bit flag,onflag,offflag;</p><p>  void read_time(struct SYSTEMTIME *p) //結(jié)構(gòu)體形參</p>

34、<p><b>  {</b></p><p>  p->hour = read_DS1302(0x85);</p><p>  p->min = read_DS1302(0x83);</p><p>  p->sec = read_DS1302(0x81);</p><p><b&

35、gt;  }</b></p><p><b>  main()</b></p><p><b>  {</b></p><p>  uchar i,j;</p><p>  buzz=0;relay=0;</p><p>  ULN2003_Latch();<

36、;/p><p>  buzz=0;relay=0;</p><p>  ULN2003_Latch();</p><p>  DS1302_init(); //初始化,第一次下載后將其屏蔽</p><p><b>  while(1)</b></p><p><b>  {</b

37、></p><p>  read_time(&clock);</p><p>  disTime[0] = clock.hour>>4; //時十位</p><p>  disTime[1] = clock.hour&0x0f; //時個位 </p><p>  disTime[2] = 10;

38、</p><p>  disTime[3] = clock.min>>4; //分十位</p><p>  disTime[4] = clock.min&0x0f; //分個位 </p><p>  disTime[5] = 10;</p><p>  disTime[6] = clock.sec>>4;

39、 //秒十位</p><p>  disTime[7] = clock.sec&0x0f; //秒個位 </p><p>  hour_temp=disTime[0]*10+disTime[1]; //轉(zhuǎn)換成十進制小時</p><p>  min_temp=disTime[3]*10+disTime[4]; //轉(zhuǎn)換成十進制分鐘</p&g

40、t;<p>  keynum=KeyPro();</p><p>  switch(keynum)</p><p><b>  {</b></p><p><b>  case 0:{</b></p><p>  setflag++;</p><p>  if(

41、setflag==2)</p><p><b>  {</b></p><p>  wrbyte_24c02(n*2,time.hour);</p><p>  wrbyte_24c02(n*2+1,time.min);</p><p><b>  n++;</b></p><p

42、><b>  }</b></p><p>  time.hour=0;</p><p>  time.min=0;</p><p><b>  flag=0;</b></p><p><b>  break;</b></p><p><b&g

43、t;  }</b></p><p><b>  case 1:{</b></p><p>  time.hour++;</p><p>  if(time.hour==24)</p><p>  time.hour=0;</p><p><b>  flag=1;</b

44、></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 2:{</b></p><p>  time.min++;</p><p>  if(time.min==60)&l

45、t;/p><p>  time.min=0;</p><p><b>  flag=1;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 3:{</b&g

46、t;</p><p>  wrbyte_24c02(n*2,time.hour);</p><p>  wrbyte_24c02(n*2+1,time.min);</p><p><b>  flag=0;</b></p><p>  setflag=0;</p><p><b>  n

47、++;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 4:{</b></p><p>  modeflag++;</p><p>  if(modef

48、lag==3)</p><p>  modeflag=0;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 5:{</b></p><p><b>  flag=0

49、;</b></p><p>  setflag=0;</p><p>  modeflag=0;</p><p><b>  onflag=0;</b></p><p>  offflag=0;</p><p>  while(n!=0)</p><p><

50、;b>  {</b></p><p>  wrbyte_24c02((n-1)*2,0);</p><p>  wrbyte_24c02((n-1)*2+1,0);</p><p><b>  n--;</b></p><p><b>  }</b></p><

51、p><b>  break;</b></p><p><b>  }</b></p><p>  default:break;</p><p><b>  }</b></p><p>  switch(setflag)</p><p><b

52、>  {</b></p><p><b>  case 1:{</b></p><p>  temp[0]=(n/2+1)/10;</p><p>  temp[1]=(n/2+1)%10;</p><p>  temp[2]=11;</p><p>  temp[3]=0;&l

53、t;/p><p>  temp[4]=13;</p><p>  temp[5]=11;</p><p>  temp[6]=11;</p><p>  temp[7]=11;</p><p><b>  break;</b></p><p><b>  }<

54、/b></p><p><b>  case 2:{</b></p><p>  temp[0]=(n/2+1)/10;</p><p>  temp[1]=(n/2+1)%10;</p><p>  temp[2]=11;</p><p>  temp[3]=0;</p>&

55、lt;p>  temp[4]=14;</p><p>  temp[5]=14;</p><p>  temp[6]=11;</p><p>  temp[7]=11;</p><p><b>  break;</b></p><p><b>  }</b></p

56、><p>  default:break;</p><p><b>  }</b></p><p>  switch(modeflag)</p><p><b>  {</b></p><p><b>  case 0:{</b></p>&l

57、t;p>  buzz=0;relay=0;</p><p>  ULN2003_Latch();</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 1:{</b></p><

58、p>  buzz=0;relay=1;</p><p>  ULN2003_Latch();</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case 2:{</b></p><p&

59、gt;  for(j=0;j<n/2;j++)</p><p><b>  {</b></p><p>  if(hour_temp==read(4*j)&&min_temp==read(4*j+1))</p><p><b>  {</b></p><p><b>

60、  onflag=1;</b></p><p>  offflag=0;</p><p><b>  }</b></p><p>  if(hour_temp==read(4*j+2)&&min_temp==read(4*j+3))</p><p><b>  {</b>

61、</p><p><b>  onflag=0;</b></p><p>  offflag=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(onflag)</p><p

62、><b>  {</b></p><p>  buzz=0;relay=1;</p><p>  ULN2003_Latch();</p><p><b>  }</b></p><p>  if(offflag)</p><p><b>  {</b&

63、gt;</p><p>  buzz=0;relay=0;</p><p>  ULN2003_Latch();</p><p><b>  }</b></p><p>  if(!offflag&&!onflag)</p><p><b>  {</b>&l

64、t;/p><p>  buzz=0;relay=0;</p><p>  ULN2003_Latch();</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p>

65、<p>  default:break;</p><p><b>  }</b></p><p>  if(!setflag&&!flag)</p><p><b>  {</b></p><p>  for(i=0;i<8;i++)</p><

66、p>  tempdata[i]=disTime[i];</p><p><b>  }</b></p><p>  if(setflag&&!flag)</p><p><b>  {</b></p><p>  for(i=0;i<8;i++)</p>&

67、lt;p>  tempdata[i]=temp[i];</p><p><b>  }</b></p><p>  if(setflag&&flag)</p><p><b>  {</b></p><p>  tempdata[0]=time.hour/10;</p&g

68、t;<p>  tempdata[1]=time.hour%10;</p><p>  tempdata[2]=10;</p><p>  tempdata[3]=time.min/10;</p><p>  tempdata[4]=time.min%10;</p><p>  tempdata[5]=10;</p>

69、<p>  tempdata[6]=0;</p><p>  tempdata[7]=0;</p><p><b>  }</b></p><p>  display(tempdata);</p><p><b>  }</b></p><p><b&g

70、t;  REG52.H</b></p><p>  Header file for generic 80C52 and 80C32 microcontroller.</p><p>  Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.</p><p>  All ri

71、ghts reserved.</p><p>  --------------------------------------------------------------------------*/</p><p>  #ifndef __REG52_H__</p><p>  #define __REG52_H__</p><p>  

72、/* BYTE Registers */</p><p>  sfr P0 = 0x80;</p><p>  sfr P1 = 0x90;</p><p>  sfr P2 = 0xA0;</p><p>  sfr P3 = 0xB0;</p><p>  sfr PSW = 0xD

73、0;</p><p>  sfr ACC = 0xE0;</p><p>  sfr B = 0xF0;</p><p>  sfr SP = 0x81;</p><p>  sfr DPL = 0x82;</p><p>  sfr DPH = 0x83;</p><p&

74、gt;  sfr PCON = 0x87;</p><p>  sfr TCON = 0x88;</p><p>  sfr TMOD = 0x89;</p><p>  sfr TL0 = 0x8A;</p><p>  sfr TL1 = 0x8B;</p><p>  sfr TH0 = 0x8

75、C;</p><p>  sfr TH1 = 0x8D;</p><p>  sfr IE = 0xA8;</p><p>  sfr IP = 0xB8;</p><p>  sfr SCON = 0x98;</p><p>  sfr SBUF = 0x99;</p><p&

76、gt;  /* 8052 Extensions */</p><p>  sfr T2CON = 0xC8;</p><p>  sfr RCAP2L = 0xCA;</p><p>  sfr RCAP2H = 0xCB;</p><p>  sfr TL2 = 0xCC;</p><p>  sfr T

77、H2 = 0xCD;</p><p>  /* BIT Registers */</p><p>  /* PSW */</p><p>  sbit CY = PSW^7;</p><p>  sbit AC = PSW^6;</p><p>  sbit F0 = PSW^5;<

78、;/p><p>  sbit RS1 = PSW^4;</p><p>  sbit RS0 = PSW^3;</p><p>  sbit OV = PSW^2;</p><p>  sbit P = PSW^0; //8052 only</p><p>  /* TCON */</p&g

79、t;<p>  sbit TF1 = TCON^7;</p><p>  sbit TR1 = TCON^6;</p><p>  sbit TF0 = TCON^5;</p><p>  sbit TR0 = TCON^4;</p><p>  sbit IE1 = TCON^3;</p>&

80、lt;p>  sbit IT1 = TCON^2;</p><p>  sbit IE0 = TCON^1;</p><p>  sbit IT0 = TCON^0;</p><p>  /* IE */</p><p>  sbit EA = IE^7;</p><p>  sbit ET

81、2 = IE^5; //8052 only</p><p>  sbit ES = IE^4;</p><p>  sbit ET1 = IE^3;</p><p>  sbit EX1 = IE^2;</p><p>  sbit ET0 = IE^1;</p><p>  sbit EX0

82、 = IE^0;</p><p>  /* IP */</p><p>  sbit PT2 = IP^5;</p><p>  sbit PS = IP^4;</p><p>  sbit PT1 = IP^3;</p><p>  sbit PX1 = IP^2;</p><

83、;p>  sbit PT0 = IP^1;</p><p>  sbit PX0 = IP^0;</p><p>  /* P3 */</p><p>  sbit RD = P3^7;</p><p>  sbit WR = P3^6;</p><p>  sbit T1 = P3

84、^5;</p><p>  sbit T0 = P3^4;</p><p>  sbit INT1 = P3^3;</p><p>  sbit INT0 = P3^2;</p><p>  sbit TXD = P3^1;</p><p>  sbit RXD = P3^0;</p>

85、<p>  /* SCON */</p><p>  sbit SM0 = SCON^7;</p><p>  sbit SM1 = SCON^6;</p><p>  sbit SM2 = SCON^5;</p><p>  sbit REN = SCON^4;</p><p>  sb

86、it TB8 = SCON^3;</p><p>  sbit RB8 = SCON^2;</p><p>  sbit TI = SCON^1;</p><p>  sbit RI = SCON^0;</p><p>  /* P1 */</p><p>  sbit T2EX = P1^1

87、; // 8052 only</p><p>  sbit T2 = P1^0; // 8052 only</p><p>  /* T2CON */</p><p>  sbit TF2 = T2CON^7;</p><p>  sbit EXF2 = T2CON^6;</p><p>  sbi

88、t RCLK = T2CON^5;</p><p>  sbit TCLK = T2CON^4;</p><p>  sbit EXEN2 = T2CON^3;</p><p>  sbit TR2 = T2CON^2;</p><p>  sbit C_T2 = T2CON^1;</p><p>

89、  sbit CP_RL2 = T2CON^0;</p><p><b>  #endif</b></p><p><b>  INTRINS.H</b></p><p>  Intrinsic functions for C51.</p><p>  Copyright (c) 1988-2004

90、 Keil Elektronik GmbH and Keil Software, Inc.</p><p>  All rights reserved.</p><p>  --------------------------------------------------------------------------*/</p><p>  #ifndef __

91、INTRINS_H__</p><p>  #define __INTRINS_H__</p><p>  extern void _nop_ (void);</p><p>  extern bit _testbit_ (bit);</p><p>  extern unsigned char

92、_cror_ (unsigned char, unsigned char);</p><p>  extern unsigned int _iror_ (unsigned int, unsigned char);</p><p>  extern unsigned long _lror_ (unsigned long, unsigned char);</p>

93、;<p>  extern unsigned char _crol_ (unsigned char, unsigned char);</p><p>  extern unsigned int _irol_ (unsigned int, unsigned char);</p><p>  extern unsigned long _lrol_ (unsi

94、gned long, unsigned char);</p><p>  extern unsigned char _chkfloat_(float);</p><p>  extern void _push_ (unsigned char _sfr);</p><p>  extern void _pop_ (un

95、signed char _sfr);</p><p><b>  #endif</b></p><p>  #ifndef __DISPLAY_H__</p><p>  #define __DISPLAY_H__</p><p>  #define uchar unsigned char</p><

96、p>  #define uint unsigned int</p><p>  //0 1 2 3 4 5 6 7 8 9- 滅 _</p><p>  unsigned char code DuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf

97、,0xff,0xf7,0xab,0x8e};//共陽 </p><p>  unsigned char code WeiMa[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//分別對應(yīng)相應(yīng)的數(shù)碼管點亮,即位碼 </p><p>  #define DataPort P0 //定義數(shù)據(jù)端口 程序中遇到DataPort 則用P0替換</p>

98、;<p>  void SEG_Latch(void) //段碼鎖存子程序 </p><p><b>  {</b></p><p>  P2 |= 0xe0;//P2.7~P2.5=111,Y7=0,Y7C=1,即U7的LE=1,段碼數(shù)據(jù)選通 </p><p><b>  _nop_();</b><

99、;/p><p>  P2 &= 0x1f;//P2.7~P2.5=000,Y7=1,Y7C=0,即U7的LE=0,段碼數(shù)據(jù)被鎖存 </p><p><b>  }</b></p><p>  void BIT_Latch(void) //位碼鎖存子程序 </p><p><b>  {</b>

100、</p><p>  P2 |= 0xC0; //P2.7~P2.5=110,Y6=0,Y6C=1,即U8的LE=1,位碼數(shù)據(jù)選通 </p><p><b>  _nop_();</b></p><p>  P2 &= 0x1f; //P2.7~P2.5=000,Y6=1,Y6C=0,即U8的LE=0,位碼數(shù)據(jù)被鎖存 </

101、p><p><b>  }</b></p><p>  void delay_50us(uint t) //50us 延時 </p><p><b>  {</b></p><p>  uchar j; </p><p>  for(;t>0;t--) </

102、p><p>  for(j=19;j>0;j--) </p><p><b>  ;</b></p><p><b>  } </b></p><p>  void display(uchar *point)</p><p><b>  {</b>&l

103、t;/p><p>  unsigned char i=0;</p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  DataPort=WeiMa[i]; //取位碼 </p><p>  BIT_Latch();//數(shù)據(jù)鎖存 &

104、lt;/p><p>  DataPort=DuanMa[*(point+i)]; //取顯示數(shù)據(jù),段碼 </p><p>  SEG_Latch();//數(shù)據(jù)鎖存 </p><p>  delay_50us(30); // 掃描間隙延時,時間太長會閃爍,太短不亮 </p><p>  DataPort=0xff; //關(guān)顯示,消除重

105、影 </p><p>  SEG_Latch(); //數(shù)據(jù)鎖存 </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  #endif</b></p><p>  #ifndef __DS13

106、02_H__</p><p>  #define __DS1302_H__</p><p>  #include <intrins.h></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  #

107、define nop _nop_()</p><p>  sbit DS1302_CLK = P1^7;</p><p>  sbit DS1302_IO = P2^3;</p><p>  sbit DS1302_RST = P1^3;</p><p>  uchar NowTime[8]={0x12,0x5,0x26,0x6,0x00,

108、0x00,0x00};//年,月,日,星期,時,分,秒</p><p>  /*****************************************************************************</p><p>  函數(shù)功能:寫DS1302一個字節(jié)子程序</p><p><b>  入口參數(shù):</b><

109、;/p><p><b>  出口參數(shù):</b></p><p>  *****************************************************************************/</p><p>  void sendbyte(uchar a)</p><p><b>

110、  {</b></p><p><b>  uchar i;</b></p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  DS1302_CLK=0;</p><p><b>

111、;  nop;</b></p><p>  DS1302_IO = a & 0x01;</p><p><b>  a >>= 1;</b></p><p>  DS1302_CLK=1;</p><p><b>  nop; </b></p>

112、<p><b>  }</b></p><p><b>  } </b></p><p>  /*****************************************************************************</p><p>  函數(shù)功能:讀DS1302一個字節(jié)子程序

113、</p><p><b>  入口參數(shù):</b></p><p><b>  出口參數(shù):</b></p><p>  *****************************************************************************/</p><p>  uc

114、har readbyte(void)</p><p><b>  {</b></p><p>  uchar i,dat=0;</p><p>  for(i=8;i>0;i--) </p><p><b>  {</b></p><p>  DS1302_CLK=1

115、;</p><p><b>  nop;</b></p><p>  DS1302_CLK=0;</p><p>  dat>>=1;</p><p>  if(DS1302_IO)</p><p>  dat|=0x80;</p><p>

116、;<b>  }</b></p><p>  DS1302_IO=0;</p><p>  return dat;</p><p><b>  } </b></p><p>  /***********************************************************

117、******************</p><p>  函數(shù)功能:寫DS1302地址子程序 </p><p><b>  入口參數(shù):add</b></p><p><b>  入口數(shù)據(jù):dat</b></p><p>  **************************************

118、***************************************/</p><p>  void write_DS1302(uchar address,uchar dat)</p><p><b>  {</b></p><p>  DS1302_RST=0;</p><p><b>  nop;

119、</b></p><p>  DS1302_CLK=0;</p><p><b>  nop;</b></p><p>  DS1302_RST=1;</p><p><b>  nop;</b></p><p>  sendbyte(address);</

120、p><p><b>  nop;</b></p><p>  sendbyte(dat);</p><p><b>  nop;</b></p><p>  DS1302_RST=0;</p><p><b>  nop;</b></p>&l

121、t;p>  DS1302_CLK=0;</p><p><b>  }</b></p><p>  /*****************************************************************************</p><p>  函數(shù)功能:讀DS1302地址子程序 </p>&

122、lt;p><b>  入口參數(shù):add</b></p><p>  出口參數(shù):readtimeR[]</p><p>  *****************************************************************************/</p><p>  uchar read_DS1302(uc

123、har address)</p><p><b>  {</b></p><p>  uchar timer;</p><p>  DS1302_RST=0;</p><p><b>  nop;</b></p><p>  DS1302_CLK=0;</p>

124、<p><b>  nop;</b></p><p>  DS1302_RST=1;</p><p><b>  nop;</b></p><p>  sendbyte(address); </p><p>  timer=readbyte();</p><p> 

125、 DS1302_RST=0;</p><p><b>  nop;</b></p><p>  DS1302_CLK=0;</p><p>  return timer;</p><p><b>  }</b></p><p>  /*********************

126、********************************************************</p><p>  函數(shù)功能:初始化DS1302子程序</p><p>  入口參數(shù):wr_data[](全局變量)</p><p><b>  出口參數(shù):</b></p><p>  ***********

127、******************************************************************/</p><p>  void DS1302_init()</p><p><b>  {</b></p><p>  write_DS1302(0x8e,0x00); //關(guān)閉保護,若寫0x80,則開啟保護 &

128、lt;/p><p>  write_DS1302(0x8c,NowTime[0]);//年 </p><p>  write_DS1302(0x88,NowTime[1]);//月 </p><p>  write_DS1302(0x86,NowTime[2]);//日 </p><p>  write_DS1302(0x8A

129、,NowTime[3]);//星期 </p><p>  write_DS1302(0x84,NowTime[4]);//時 </p><p>  write_DS1302(0x82,NowTime[5]);//分 </p><p>  write_DS1302(0x80,NowTime[6]);//秒 </p><p

130、>  write_DS1302(0x8e,0x80); //開寫保護</p><p><b>  }</b></p><p>  //=======================時鐘開啟,可省略==================================</p><p>  void clock_start(void)<

131、/p><p><b>  {</b></p><p>  uchar val;</p><p>  val = read_DS1302(0x81); //讀秒寄存器 </p><p>  val &= 0x7f; //最高位CH,振蕩器工作允許 </p><p>  write_DS13

132、02(0x8e,0x00); //關(guān)寫保護 </p><p>  write_DS1302(0x80,val);</p><p>  write_DS1302(0x90,0xa5);//使能涓電流充電,DS=01:選擇一個二極管,RS=01:R1=2k</p><p>  write_DS1302(0x8e,0x80);//開寫保護 </p><

133、p><b>  }</b></p><p><b>  #endif</b></p><p>  #ifndef __KEY_H__</p><p>  #define __KEY_H__</p><p>  #define KeyPort P3</p><p>  /

134、*------------------------------------------------</p><p>  將跳線帽套在J5的BIN針上</p><p>  獨立按鍵掃描函數(shù),返回掃描鍵值</p><p>  左邊一列從上向下對應(yīng)P30,P31,P32,P33</p><p>  分別是0,1,2,3號鍵</p>&

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論