單片機課程設計報告--遠程溫度采集系統(tǒng)_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  單片機原理及應用</b></p><p><b>  課程設計</b></p><p>  學院: </p><p>  班級: </p><p>  學號: </p>

2、;<p>  姓名: </p><p>  指導老師: </p><p>  日期: </p><p>  單片機應用技術課程設計任務書</p><p><b>  課程設計內(nèi)容及步驟</b></p>&l

3、t;p>  使用proteus作為開發(fā)工具,完成雙機通訊的溫度采集功能:</p><p>  使用LM20溫度傳感器、AD1674模數(shù)轉(zhuǎn)換器、AT89C51單片機、4位撥碼開關組成溫度采集模塊(從機),撥碼開關用于設定模塊的地址(00-15),從機在采集完溫度信號(間隔5S)后通過串口發(fā)送到主機;</p><p>  使用AT89C51單片機、4位撥碼開關、LED顯示組成溫度接收模塊

4、(主機),4位撥碼開關用于設定通訊波特率(1200,2400,4800,9600)當主機波特率改變后,從機波特率也自動改變,上電運行顯示波特率信息(停3S),之后顯示接收地址與溫度信息。</p><p><b>  擴展要求:</b></p><p>  將其設計成:當定時器達到一定時間時,從機沒有收到來自主機的信號,則從機“發(fā)光報警”。當遇到故障時,也會發(fā)光報警,即

5、將從機上的RXD或TXD接按鍵開關,接地或是接電源作為模擬信號。收到主機的信號后,又能恢復正常。</p><p>  整個系統(tǒng)的電路原理圖:</p><p>  各功能模塊的工作原理:</p><p><b>  溫度采集模塊</b></p><p>  使用LM20溫度傳感器、AD1674模數(shù)轉(zhuǎn)換器、AT89C51單片

6、機、4位撥碼開關組成溫度采集模塊(從機),撥碼開關用于設定模塊的地址(00-15),從機在采集完溫度信號(間隔5S)后通過串口發(fā)送到主機;</p><p>  (1)LM20經(jīng)AD1674轉(zhuǎn)換為12位數(shù)據(jù)給從機</p><p>  LM20溫度傳感器經(jīng)過電壓跟隨器后輸入到AD1674的10VIN口,AD1674組成雙峰。STS、CS、A0、CE、RC分別接到從機的P0-P4口實現(xiàn)AD167

7、4的控制作用。一開始CE=1,CS=0,RC=0,A0=0啟動12位溫度轉(zhuǎn)換,然后等待數(shù)據(jù)采集結(jié)束while(STS==1); 接著CE=1,CS=0,RC=1,12/8=1,A0=0允許高八位數(shù)據(jù)并行輸出,最后CE=1,CS=0,RC=1,12/8=0,A0=1允許低四位數(shù)據(jù)并行輸出。讀出的12位數(shù)據(jù)存放在變量temp中。經(jīng)過AD1674轉(zhuǎn)換后輸出的結(jié)果精確到(10.0/4095.0)。若LM20溫度轉(zhuǎn)換為電壓值是1.13598v時,

8、經(jīng)過AD1674轉(zhuǎn)換后輸出的12位數(shù)為1.13598*4095/10=465轉(zhuǎn)換為2進制為000111010001。12位數(shù)據(jù)經(jīng)過公式轉(zhuǎn)換T = (1.8525-temp*10/4095.0)*10000/11.79.然后把低位小數(shù)位給temp1,temp就為整數(shù)部分,接著就是等待發(fā)送給主機。</p><p>  /*讀取AD1674轉(zhuǎn)換結(jié)果*/</p><p>  uint AD1674

9、_Read(void)</p><p><b>  {</b></p><p>  uint temp;</p><p><b>  CS = 1;</b></p><p>  CE = 0; //初始化,關閉數(shù)據(jù)采集</p><p><b>  CS = 0;&l

10、t;/b></p><p><b>  A0 = 1; </b></p><p><b>  RC = 0; </b></p><p>  CE = 1; //CE=1,CS1=0,RC=0,A0=0啟動8位溫度轉(zhuǎn)換</p><p><b>  _nop_();</b>&

11、lt;/p><p>  while(STS==1);//等待數(shù)據(jù)采集結(jié)束</p><p>  CE = 0; //芯片使能關閉</p><p><b>  RC = 1; </b></p><p><b>  A0 = 0; </b></p><p>  CE = 1; //CE

12、=1,CS1=0,RC=1,12/8=1,A0=0允許高八位數(shù)據(jù)并行輸出</p><p><b>  _nop_();</b></p><p>  temp = P1;//讀取轉(zhuǎn)換結(jié)果的低八位</p><p>  return (temp);//返回轉(zhuǎn)換結(jié)果</p><p><b>  }</b>&

13、lt;/p><p> ?。?)從機接收主機發(fā)送的波特率并且設置自己的波特率</p><p>  主機發(fā)送波特率給從機,從機查詢法判斷是否接收到主機發(fā)送的波特率,如果接收到主機發(fā)送的波特率則改變自己的波特率,跳出循環(huán)來實現(xiàn)發(fā)送溫度地址的發(fā)送,否則一直循環(huán)判斷是否接收到主機發(fā)送的波特率。</p><p><b>  //設置波特率</b></p&

14、gt;<p>  void set()</p><p><b>  {</b></p><p>  uint temp=P0;</p><p>  temp=temp>>4;</p><p>  temp = temp&0x0f;</p><p>  if(tem

15、p==1)</p><p><b>  {</b></p><p>  TMOD=0x21;//定時器為方式2,TMOD高四位控制 T1</p><p>  TL1=0xF4;//時間常數(shù)初值</p><p>  TH1=0xF4;//時間常數(shù)初值,波特率為1.2k</p><p>  PCON=

16、0x00; //正常方式,SMOD=0,波特率為f/64</p><p><b>  }</b></p><p>  else if(temp==2)</p><p><b>  {</b></p><p>  TMOD=0x21;//定時器為方式2</p><p><

17、b>  TL1=0xFA;</b></p><p>  TH1=0xFA;//波特率為2.4K</p><p>  PCON=0x00;</p><p><b>  }</b></p><p>  else if(temp==4)</p><p><b>  {<

18、/b></p><p>  TMOD=0x21;//定時器為方式2</p><p><b>  TL1=0xFD;</b></p><p>  TH1=0xFD;//波特率為4.8K</p><p>  PCON=0x00;</p><p><b>  }</b><

19、;/p><p>  else if(temp==8)</p><p><b>  {</b></p><p>  TMOD=0x21;//定時器為方式2</p><p><b>  TL1=0xFD;</b></p><p>  TH1=0xFD;//波特率為9.6K</p

20、><p>  PCON=0x80; //SMOD=1,波特率加倍</p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?)撥碼開關實現(xiàn)地址的變換</p><p>  撥碼開關接從機的P1口,然后改變撥碼開關的值,P1口的數(shù)據(jù)變換,

21、等待傳送給主機。</p><p> ?。?)定時器實現(xiàn)5秒間隔</p><p>  定時器0工作方式1,初值裝(65536-50000)實現(xiàn)50ms的定時,num為定時次數(shù),當num=100時,定時為5s的間隔。</p><p><b>  溫度接收模塊</b></p><p>  使用AT89C51單片機、4位撥碼開關

22、、LED顯示組成溫度接收模塊(主機),4位撥碼開關用于設定通訊波特率(1200,2400,4800,9600)當主機波特率改變后,從機波特率也自動改變,上電運行顯示波特率信息(停3S),之后顯示接收地址與溫度信息。</p><p> ?。?)波特率設定及發(fā)送</p><p>  撥碼開關接主機的P1口,用于設定主機的波特率。P1口的數(shù)據(jù)分別為1、2、4、8時的波特率為1200、2400、4

23、800、9600。然后發(fā)送給從機波特率,接著自己的波特率也隨之改變。</p><p>  (2)波特率顯示并且延時3s</p><p>  由P1口可以得到不同的值,從而用軟件設定波特率(即設定定時器1的初值),不同的值存放在bote[]數(shù)組中用以數(shù)碼管的顯示。定時器T0實現(xiàn)定時功能,初值裝(65536-50000)實現(xiàn)50ms的定時,num為定時次數(shù),當num為60的時候定時到了3s,以

24、后就不用顯示波特率了,所以用m變量為1表示波特率顯示結(jié)束,不再顯示波特率。</p><p> ?。?)溫度、地址的接收和判斷</p><p>  溫度地址接收是用串口中斷實現(xiàn)的。RI為1的時候表示一幀數(shù)據(jù)已經(jīng)接收完了,所以就開始判斷是溫度的整數(shù)部分、小數(shù)部分、還是地址和正負標志位組成的數(shù)據(jù)。通信協(xié)議如上:</p><p>  if(temp < 16)<

25、/p><p><b>  {</b></p><p>  disnum[4] = temp / 10;//求十位</p><p>  disnum[5] = temp % 10;//求個位</p><p><b>  }</b></p><p><b>  else&l

26、t;/b></p><p><b>  {</b></p><p>  temp1 = (uint)((1.8528-temp*10.0/255)*(10000/11.79));</p><p>  HEXTOBCD(temp1);</p><p><b>  }</b></p>

27、<p> ?。?)數(shù)碼管顯示模塊</p><p>  數(shù)據(jù)存于disnum數(shù)組中,用8位數(shù)碼管來顯示溫度、地址以及波特率。段選接主機的P0口,片選接主機的P2口。一開始顯示波特率,就選中最后4位。</p><p>  然后就是要顯示溫度和地址的信息了。溫度為-55—130所以前面4位顯示溫度后2位顯示地址即:XX.X—XX。由于數(shù)碼管是動態(tài)掃描的,所以要一定速度才可以實現(xiàn)視覺

28、殘留。看上去好像是一直點亮一樣的。</p><p>  void display_led()</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i = 0; i < 8; i++) </p><p>

29、;<b>  {</b></p><p>  P2 = disbit[i]; //使用查表法進行位選 </p><p>  if(i != 2)</p><p>  P0 = table[disnum[i]]; </p><p><b>  else </b></p><

30、;p>  P0 = table1[disnum[i]];</p><p>  delay(150); //掃描間隔時間 太長會數(shù)碼管會有閃爍感</p><p><b>  }</b></p><p><b>  }</b></p><p><b> ?。?)系統(tǒng)報警</

31、b></p><p>  定時器0實現(xiàn)定時功能,num1為報警的時間的計算,定時器是實現(xiàn)50ms的,所以要120才能實現(xiàn)6s。num1 = 120,那么判斷一下flag(是否接收到傳送過來的數(shù)據(jù))如果flag = 0;說明沒有接收到采集的數(shù)據(jù),接著就報警,還要把num1和flag重新清0,實現(xiàn)下次的報警功能。 </p><p><b>  else</b>&

32、lt;/p><p><b>  {</b></p><p><b>  m = 0;</b></p><p>  if(num1 == 120)</p><p><b>  {</b></p><p>  if(flag == 0)</p>&

33、lt;p><b>  {</b></p><p>  uchar t =8;</p><p>  while(t--)</p><p><b>  BEEP();</b></p><p><b>  LED();</b></p><p><b

34、>  }</b></p><p><b>  else</b></p><p><b>  flag = 0;</b></p><p><b>  num1 = 0;</b></p><p><b>  }</b></p>

35、<p>  if(txd==0)</p><p><b>  {</b></p><p><b>  flag=1;</b></p><p><b>  BEEP();</b></p><p><b>  LED();</b></p>

36、<p><b>  }</b></p><p>  display_led();</p><p><b>  }</b></p><p><b>  課程設計成果</b></p><p><b>  1、顯示波特率</b></p>

37、<p><b>  2、顯示溫度與地址</b></p><p><b>  3、報警</b></p><p><b>  程序流程圖:</b></p><p><b>  課程設計心得:</b></p><p>  通過本次課程設計我學到了很

38、多在課本上、課堂上難以學到的東西。這也驗證了實踐是檢驗真理的唯一標準。雖然大二的時候已經(jīng)學過了C語言,但這與實際的單片機還是有點區(qū)別的。本次實驗中,我沒有用匯編編寫程序,而是采用了C語言。</p><p>  剛拿到實驗內(nèi)容的時候,我的頭腦一片空白,可以說對于這次的課程設計相當沒有底。就比如AD1674,之前從未接觸過,更別說將其連到電路中了,還有很多問題如何在程序中實現(xiàn)等問題。</p><p

39、>  于是,我只得先去查資料。首先是LM20,查看它的功能和作用。知道了他的轉(zhuǎn)換公式。接著要用單片機采集的話,必須經(jīng)過模數(shù)轉(zhuǎn)換才可以實現(xiàn),于是便開始AD1674芯片的學習了。這個芯片的理解還是比較麻煩的,花了將近1天時間才總算弄明白一點。之后,我又通過看書學習了串口怎么發(fā)送,怎么接收,怎么初始化,怎么設定波特率。問題很多,但是在同學們的幫助下,終于完成了從機發(fā)送采集到的數(shù)據(jù)給主機。接著便是改變地址,改變波特率,報警等等功能,這些功

40、能的話,其實前面的弄懂后,這些都是比較容易實現(xiàn)的。</p><p>  好不容易將程序?qū)懞?、弄懂后,迎來了老師的答辯時間。老師要求我們增加發(fā)光報警功能。剛拿到的時候,感覺挺簡單的,但是要改,卻又不知改哪里。最終在即將到時間的時候,我靈光一閃,成功實現(xiàn)了老師要求的內(nèi)容。</p><p>  當時真的好開心,因為這是我憑自己的能力做出來的。在這次課程設計中,我不僅學到了很多知識,而且對于單片機

41、還產(chǎn)生了更加濃厚的興趣。我決定以后多花更多的課余時間,來設計這類的單片機問題,讓自己積累更多的實踐經(jīng)驗。同時也讓我知道了,做事不能猶豫,不能害怕,遇到困難就想辦法解決。不要總是等著別人去完成,自信的自己才是最最好的。相信自己肯定可以完成一切??梢詰?zhàn)勝困難,最后得到成功!</p><p><b>  參考文獻:</b></p><p>  [1] 郭天祥。新概念51單片

42、機C語言教程[M] 2009.12</p><p>  [2]《單片機原理及其接口技術》,胡漢才編著,清華大學出版社</p><p>  附錄:源程序代碼及注釋</p><p><b>  從機代碼:</b></p><p>  #include<reg51.h></p><p>  

43、#include<intrins.h></p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int</p><p>  #define addo (10.0/255.0)//轉(zhuǎn)換進率,12位精度(2^12-1=4095),滿量程為10V</p><

44、;p><b>  /*管腳定義*/</b></p><p>  sbit STS = P2^0;</p><p>  sbit CS = P2^1;</p><p>  sbit A0 = P2^2;</p><p>  sbit CE = P2^3;</p><p>  sbit RC =

45、 P2^4;</p><p>  /*毫秒延時函數(shù)*/</p><p>  void delay_ms(uint n)</p><p><b>  {</b></p><p><b>  uint i;</b></p><p>  while(n--)</p>

46、<p><b>  {</b></p><p>  for(i=0;i<110;i++);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*讀取AD1674轉(zhuǎn)換結(jié)果*/</p><p&g

47、t;  uint AD1674_Read(void)</p><p><b>  {</b></p><p>  uint temp;</p><p><b>  CS = 1;</b></p><p>  CE = 0; //初始化,關閉數(shù)據(jù)采集</p><p><b

48、>  CS = 0;</b></p><p><b>  A0 = 1; </b></p><p><b>  RC = 0; </b></p><p>  CE = 1; //CE=1,CS1=0,RC=0,A0=0啟動8位溫度轉(zhuǎn)換</p><p><b>  _nop

49、_();</b></p><p>  while(STS==1);//等待數(shù)據(jù)采集結(jié)束</p><p>  CE = 0; //芯片使能關閉</p><p><b>  RC = 1; </b></p><p><b>  A0 = 0; </b></p><p>

50、;  CE = 1; //CE=1,CS1=0,RC=1,12/8=1,A0=0允許高八位數(shù)據(jù)并行輸出</p><p><b>  _nop_();</b></p><p>  temp = P1;//讀取轉(zhuǎn)換結(jié)果的低八位</p><p>  return (temp);//返回轉(zhuǎn)換結(jié)果</p><p><b>

51、;  }</b></p><p>  void putbyte(uchar byte)// 利用硬件串口方式2 發(fā)送一個字節(jié)數(shù)據(jù)</p><p><b>  {</b></p><p>  SBUF = byte;//將要發(fā)送的數(shù)據(jù)送到發(fā)送緩沖區(qū)域,系統(tǒng)自動發(fā)送</p><p>  while(!TI);//

52、查詢是否發(fā)送結(jié)束 當TI=1 代表發(fā)送結(jié)束</p><p>  TI = 0;//清發(fā)送結(jié)束位方便下一次發(fā)送</p><p><b>  }</b></p><p>  void init()</p><p><b>  {</b></p><p>  SCON = 0x

53、50; //串行口方式1,10位異步收發(fā),定時器控制</p><p>  TR1 = 1; //啟T1計數(shù)</p><p>  ET1 = 1;// 開T1中斷</p><p><b>  SM0 = 0;</b></p><p><b>  SM1 = 1;</b></p><

54、p>  EA = 1; // 開所有中斷</p><p>  ES = 1;// 開串行口中斷</p><p><b>  }</b></p><p><b>  //設置波特率</b></p><p>  void set()</p><p><b>  

55、{</b></p><p>  uint temp=P0;</p><p>  temp=temp>>4;</p><p>  temp = temp&0x0f;</p><p>  if(temp==1)</p><p><b>  {</b></p>

56、<p>  TMOD=0x21;//定時器為方式2,TMOD高四位控制 T1</p><p>  TL1=0xF4;//時間常數(shù)初值</p><p>  TH1=0xF4;//時間常數(shù)初值,波特率為1.2k</p><p>  PCON=0x00; //正常方式,SMOD=0,波特率為f/64</p><p><b>

57、  }</b></p><p>  else if(temp==2)</p><p><b>  {</b></p><p>  TMOD=0x21;//定時器為方式2</p><p><b>  TL1=0xFA;</b></p><p>  TH1=0xFA;

58、//波特率為2.4K</p><p>  PCON=0x00;</p><p><b>  }</b></p><p>  else if(temp==4)</p><p><b>  {</b></p><p>  TMOD=0x21;//定時器為方式2</p>

59、<p><b>  TL1=0xFD;</b></p><p>  TH1=0xFD;//波特率為4.8K</p><p>  PCON=0x00;</p><p><b>  }</b></p><p>  else if(temp==8)</p><p>&

60、lt;b>  {</b></p><p>  TMOD=0x21;//定時器為方式2</p><p><b>  TL1=0xFD;</b></p><p>  TH1=0xFD;//波特率為9.6K</p><p>  PCON=0x80; //SMOD=1,波特率加倍</p><

61、p><b>  }</b></p><p><b>  }</b></p><p><b>  /*主函數(shù)*/</b></p><p>  void main(void)</p><p><b>  {</b></p><p>

62、;<b>  init();</b></p><p><b>  set();</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  uint temp; </p>

63、<p><b>  set();</b></p><p>  temp = AD1674_Read(); </p><p>  putbyte(temp); //發(fā)送溫度</p><p>  delay_ms(50);</p><p>  temp = P0;</p><p>  tem

64、p = temp & 0x0f; //屏蔽高四位</p><p>  putbyte(temp); //發(fā)送地址</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  主機代碼:</b></p>&l

65、t;p>  #include <reg51.h></p><p>  #include <intrins.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p><b>  //</b

66、></p><p>  uchar code table[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99,</p><p>  0x92, 0x82, 0xf8, 0x80, 0x90,0xbf};//顯示 0到 9的代碼 ,使 P2口顯示</p><p>  uchar code table1[]={0x40, 0x79, 0x24, 0x3

67、0, 0x19,</p><p>  0x12, 0x02, 0x78, 0x00, 0x10,0x3f};//顯示 0.到 9. 即使 P0口可以顯示小數(shù)點</p><p>  uchar disbit[6] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20};//依次使六個LCD顯示數(shù)字</p><p>  uchar disnum

68、[6],bote[4];</p><p>  uchar flag, num, num1, m;</p><p>  sbit beep = P2^6; //蜂鳴器報警</p><p>  sbit led = P2^7;//紅燈亮報警</p><p>  sbit txd=P3^1;</p><p>  #def

69、ine addo (10.0/4095.0)//轉(zhuǎn)換進率,12位精度(2^12-1=4095),滿量程為10V</p><p>  void delay(uint i) //延時</p><p><b>  {</b></p><p><b>  char j;</b></p><p>  for(

70、i; i > 0; i--)</p><p>  for(j = 200; j > 0; j--);</p><p><b>  }</b></p><p>  /*向緩沖器中寫入要顯示的數(shù)據(jù)*/</p><p>  void HEXTOBCD(uint temp)</p><p>&

71、lt;b>  {</b></p><p>  disnum[0] = temp/100;//求百位上的數(shù)字</p><p>  disnum[1] = temp%100/10;//求十位上的數(shù)字</p><p>  disnum[2] = temp%10;//求個位上的數(shù)字</p><p>  disnum[3] = 10;

72、//</p><p><b>  }</b></p><p>  void init()</p><p><b>  {</b></p><p>  SCON = 0x50;</p><p>  TH0 = (65536 - 50000) / 256;</p>

73、<p>  TL0 = (65526 - 50000) % 256;</p><p>  TR0 = 1; //啟 T0計數(shù)</p><p><b>  TR1 = 1; </b></p><p>  ET0 = 1;//開 T0中斷</p><p>  REN= 1;//允許接收</p>&l

74、t;p><b>  SM0 = 0;</b></p><p>  SM1 = 1;//開串口中斷</p><p><b>  EA = 1;</b></p><p><b>  ES = 1;</b></p><p><b>  }</b><

75、/p><p>  /*設置波特率 */</p><p>  void set()</p><p><b>  {</b></p><p>  uint temp=P1;//讀取波特率</p><p>  temp=temp&0x0f; //屏蔽高四位,保留低四位</p><

76、p>  if(temp==1)</p><p><b>  {</b></p><p>  TMOD=0x21;//定時器為方式 2 ,選擇T0</p><p><b>  TL1=0xF4;</b></p><p>  TH1=0xF4;//波特率為1.2k</p><p

77、>  PCON=0x00;</p><p><b>  }</b></p><p>  else if(temp==2)</p><p><b>  {</b></p><p>  TMOD=0x21;//定時器為方式2</p><p><b>  TL1=0

78、xFA;</b></p><p>  TH1=0xFA;//波特率為2.4K</p><p>  PCON=0x00;</p><p><b>  }</b></p><p>  else if(temp==4)</p><p><b>  {</b></p

79、><p>  TMOD=0x21;//定時器為方式2</p><p><b>  TL1=0xFD;</b></p><p>  TH1=0xFD;//波特率為4.8K</p><p>  PCON=0x00;</p><p><b>  }</b></p><

80、;p>  else if(temp==8)</p><p><b>  {</b></p><p>  TMOD=0x21;//定時器為方式2</p><p><b>  TL1=0xFD;</b></p><p>  TH1=0xFD;//波特率為9.6K</p><p&

81、gt;  PCON=0x80;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void display_led()//選擇每位顯示的數(shù)據(jù)類型 ,依次從第一位 到 第六位</p><p><b>  {</b></p&g

82、t;<p><b>  uchar i;</b></p><p>  for(i = 0; i < 6; i++)</p><p><b>  {</b></p><p>  P2 = disbit[i];//使用查表法進行位選,P2口用于選擇哪個LED發(fā)光 </p><p>

83、;<b>  if(i==1)</b></p><p><b>  {</b></p><p>  P0 = table1[disnum[i]];//顯示數(shù) 碼管的第二個disnum[i]:求十位上的數(shù)字</p><p><b>  }</b></p><p><b>

84、;  else</b></p><p><b>  {</b></p><p>  P0 = table[disnum[i]];</p><p><b>  }</b></p><p>  delay(150); //掃描間隔 時間,太長會數(shù)碼管會有閃爍感</p>&l

85、t;p><b>  }</b></p><p><b>  }</b></p><p>  void BEEP()</p><p><b>  {</b></p><p>  uchar i , j;</p><p><b>  led

86、= 1;</b></p><p>  for (i = 0; i < 100; i++)</p><p><b>  {</b></p><p>  beep = !beep; //beep取反</p><p>  for(j = 0; j < 250 ; j++)

87、 //需要產(chǎn)生方波</p><p><b>  _nop_();</b></p><p><b>  }</b></p><p>  beep = 1; //關閉蜂鳴器</p><p><b>  }</b></p>

88、<p>  void LED ()</p><p><b>  {</b></p><p>  uchar i , j;</p><p><b>  beep = 1;</b></p><p>  for (i = 0; i < 100; i++)</p><p&

89、gt;<b>  {</b></p><p>  led = !led; //led取反</p><p>  for(j = 0; j < 250 ; j++) //需要產(chǎn)生方波</p><p><b>  _nop_();</b></p><p><

90、b>  }</b></p><p>  led = 1; //滅紅燈</p><p><b>  }</b></p><p>  void main(void)</p><p><b>  {</b></p><p>

91、;<b>  uchar i;</b></p><p><b>  num = 0;</b></p><p><b>  num1 = 0;</b></p><p><b>  m = 1;</b></p><p><b>  flag = 1;

92、</b></p><p>  init();set();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  led = 0;set();</p><p>  if(num <= 60

93、&& m == 1)</p><p><b>  {</b></p><p>  uchar temp = P1 & 0x0f;//取 P1口的低四位</p><p>  if(temp==1)</p><p><b>  {</b></p><p>

94、  bote[0] = 1;bote[1] = 2;bote[2] = 0;bote[3] = 0;</p><p><b>  }</b></p><p>  else if(temp==2)</p><p><b>  {</b></p><p>  bote[0] = 2;bote[1] =

95、4;bote[2] = 0;bote[3] = 0;</p><p><b>  }</b></p><p>  else if(temp==4)</p><p><b>  {</b></p><p>  bote[0] = 4;bote[1] = 8;bote[2] = 0;bote[3] =

96、0;</p><p><b>  }</b></p><p>  else if(temp==8)</p><p><b>  {</b></p><p>  bote[0] = 9;bote[1] = 6;bote[2] = 0;bote[3] = 0;</p><p>&

97、lt;b>  }</b></p><p>  for(i = 0; i < 4; i++)</p><p><b>  {</b></p><p>  P2 = disbit[i+2];//使用查表法進行位選 ,顯示波特率四位</p><p>  P0 = table[bote[i]];&

98、lt;/p><p>  delay(150); //掃描間隔 時間,太長會數(shù)碼管會有閃爍感</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  else</b></p><p><b&g

99、t;  {</b></p><p><b>  m = 0;</b></p><p>  if(num1 == 120)</p><p><b>  {</b></p><p>  if(flag == 0)</p><p><b>  {</b&

100、gt;</p><p>  uchar t =8;</p><p>  while(t--)</p><p><b>  BEEP();</b></p><p><b>  LED();</b></p><p><b>  }</b></p>

101、<p><b>  else</b></p><p><b>  flag = 0;</b></p><p><b>  num1 = 0;</b></p><p><b>  }</b></p><p>  if(txd==0)</p

102、><p><b>  {</b></p><p><b>  flag=1;</b></p><p><b>  BEEP();</b></p><p><b>  LED();</b></p><p><b>  }<

103、/b></p><p>  display_led();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void t0() interrupt 1<

104、/p><p><b>  {</b></p><p>  TH0 = (65536 - 50000) / 256;</p><p>  TL0 = (65526 - 50000) % 256;</p><p><b>  num++;</b></p><p><b> 

105、 num1++;</b></p><p><b>  }</b></p><p>  void recieve() interrupt 4</p><p><b>  {</b></p><p>  uchar temp;</p><p>  uint temp1

106、;</p><p>  if(RI) //RI=1,表示一楨數(shù)據(jù)接收完</p><p><b>  {</b></p><p>  flag = 1; </p><p>  temp = SBUF;</p><p>  if(temp

107、 < 16)</p><p><b>  {</b></p><p>  disnum[4] = temp / 10;//求十位</p><p>  disnum[5] = temp % 10;//求個位</p><p><b>  }</b></p><p><

108、b>  else</b></p><p><b>  {</b></p><p>  temp1 = (uint)((1.8528-temp*10.0/255)*(10000/11.79));</p><p>  HEXTOBCD(temp1);</p><p><b>  }</b&

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論