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

下載本文檔

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

文檔簡介

1、<p>  單片微型計算機原理 與接口技術(shù)課程設計報告</p><p>  題目: 溫度測量 </p><p><b>  班級:</b></p><p><b>  學號: </b></p><p><b>  姓名: </b></p><

2、p><b>  指導老師: </b></p><p>  實習日期: 6.27~7.1</p><p><b>  1、課程設計要求</b></p><p>  (1)通過按鍵設置溫度上、下限</p><p>  (2)讀入A/D轉(zhuǎn)換數(shù)據(jù):</p><p>  若數(shù)據(jù)&

3、lt;下限,則顯示溫度并顯示L、報警并使步進電機正轉(zhuǎn);</p><p>  若數(shù)據(jù)>上限,則顯示溫度并顯示H、報警并使步進電機反轉(zhuǎn);</p><p>  若下限<數(shù)據(jù)<上限,則顯示C</p><p>  (3)本機地址為06H,當接到上位機發(fā)的06H時,則回發(fā)06H</p><p>  當接到上位機發(fā)的AAH時,則將當前溫度

4、發(fā)給上位機</p><p>  當接到上位機發(fā)的55H時,則小燈亮,提示修改上、下限</p><p><b>  2、方案論證</b></p><p>  由于本設計是于AT89C51 單片機的溫度測量系統(tǒng),可以使用熱敏電阻之類的器件利用其感溫效應,在將隨被測溫度變化的電壓或電流采集過來,進行A/D 轉(zhuǎn)換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示

5、電路上將被測溫度顯示出來。但是這種設計需要用到A/D 轉(zhuǎn)換電路,還要涉及到電阻與溫度的對應值的計算,比較麻煩。所以采用DS18B20溫度傳感器,這樣可以很容易直接讀取被測溫度值,進行轉(zhuǎn)換,電路簡單,精度高,軟硬件都容易實現(xiàn),而且使用單片機的接口便于系統(tǒng)的再擴展,滿足設計要求。</p><p>  步進電機模塊,由于步進電機的額定工作電流過大,單片機無法獨立驅(qū)動其工作,因而在接口電路與步進電機之間加入ULN2003

6、A驅(qū)動芯片,利用驅(qū)動芯片的電流放大作用,使步進電機可靠的運轉(zhuǎn)。</p><p>  總體設計方框圖如圖2.1所示。</p><p>  圖2.1總體設計方框圖</p><p>  3、硬件系統(tǒng)設計及原理圖</p><p>  3.1單片機主控電路</p><p>  本設計中采用美國Atmel公司的8位單片機AT89C

7、51作為單片機控制模塊的核心部件,該型單片機在本設計中的應用如下:晶振采用 12MHZ,復位電路采用上電加按鈕復位。</p><p>  圖3.1.2 復位電路</p><p><b>  3.2 顯示電路</b></p><p>  顯示電路采用 4位共陰極 LED 數(shù)碼管 , P 0 口 由上拉電阻提高驅(qū)動能力,作為段碼輸出并作為數(shù)碼管的驅(qū)

8、動。 P2 口的低四位作為數(shù)碼管的位選端。采用動態(tài)掃描的方式顯示。</p><p>  圖3.2數(shù)碼管顯示電路</p><p><b>  3.3溫度傳感器</b></p><p>  DS18B2 0 溫度傳感器是美國 DALLA S 半導體公司最新推出的一種改進型智能溫度傳感器 , 與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且

9、可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式。</p><p>  圖3.3溫度傳感器與單片機的連接</p><p>  3.4溫度上下限調(diào)整按鍵</p><p>  本系統(tǒng)設計三個按鍵,采用查詢方式,一個用于選擇切換設置溫度上下限和當前溫度,另外兩個分別用于設置報警溫度的加和減。均采用軟件消抖。</p><p><b&g

10、t;  圖3.4按鍵電路</b></p><p><b>  3.5步進電機</b></p><p>  3.5.1步進電機驅(qū)動電路</p><p>  本設計選用驅(qū)動芯片ULN2003驅(qū)動四相步進電機。</p><p>  ULN2003是高耐壓、大電流達林頓陳列,由七個硅NPN達林頓管組成。ULN2003

11、 的每一對達林頓都串聯(lián)一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和 CMOS 電路直接相連,可以直接處理原先需要標準邏輯緩沖器來處理的數(shù)據(jù)。</p><p>  ULN2003 工作電壓高,工作電流大,灌電流可達 500mA,并且能夠在關態(tài)時承受 50V 的電壓,輸出還可以在高負載電流并行運行。</p><p>  圖3.5.2.1 ULN2003方框圖</p>

12、<p>  表3.5.2 ULN2003極限值參數(shù)</p><p>  ULN2003與單片機連接驅(qū)動步進電機原理圖如下:</p><p>  圖3.5.2.2步進電機驅(qū)動電路</p><p><b>  3.6雙機通信</b></p><p>  利用單片機串行口實現(xiàn)兩個單片機(主機、從機)之間的通信,

13、其中一個單片機作為主機(發(fā)送方),另一個為從機(接收方),主機讀入按鍵值并將相應命令發(fā)送給從機,從機收到命令后執(zhí)行相應的功能。雙機通信示意圖如下:</p><p>  圖3.6雙機通信示意圖</p><p><b>  4、軟件清單</b></p><p>  系統(tǒng)程序主要包括主程序和通信程序。</p><p>  其中

14、主程序包括延時函數(shù)、掃描顯示函數(shù)、DS18B20 復位函數(shù)、DS18B20 寫命令函數(shù)、DS18B20 讀1 字節(jié)函數(shù)、讀出溫度函數(shù)、溫度數(shù)據(jù)處理函數(shù)、報警函數(shù)、步進電機函數(shù)、設置溫度顯示轉(zhuǎn)換函數(shù)、按鍵查詢程序、主函數(shù)。</p><p>  通信上位機程序包括延時函數(shù)、掃描顯示函數(shù)、初始化函數(shù)、按鍵查詢程序、主函數(shù)。下位機函數(shù)包括初始化、接收程序、主函數(shù)。</p><p><b>

15、;  上位機軟件清單:</b></p><p>  #include "reg51.h"</p><p>  #include "intrins.h" //_nop_();延時函數(shù)用</p><p>  #define dm P0 //段碼輸出口</p><p>  #define ucha

16、r unsigned char</p><p>  #define uint unsigned int</p><p><b>  uint h;</b></p><p>  sbit w0=P2^0; //數(shù)碼管4</p><p>  sbit w1=P2^1; //數(shù)碼管3</p><p> 

17、 sbit w2=P2^2; //數(shù)碼管2</p><p>  sbit w3=P2^3; //數(shù)碼管1</p><p>  sbit aa=P1^0; </p><p>  sbit bb=P1^1; </p><p>  sbit cc=P1^2; </p><p>  uchar idata buf[1];<

18、;/p><p>  uchar code table_dm[15]=</p><p>  {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x38,0x76,0x39};</p><p>  //共陰LED 段碼表"0" "1" "2"

19、"3" "4" "5" "6" "7" "8" "9" "不亮" "-"'L''H''C'</p><p>  uchar data display[4]={0x00,0x00,0x00,

20、0x00}; //顯示單元數(shù)據(jù),共4 個數(shù)據(jù)和一個運算暫用</p><p>  /******11us 延時函數(shù)*******/</p><p>  void delay(uint t)</p><p><b>  {</b></p><p>  for (;t>0;t--);</p><p&g

21、t;<b>  }</b></p><p>  /************scan*************/</p><p>  void scan()</p><p><b>  {</b></p><p><b>  int j;</b></p><p

22、>  for(j=0;j<4;j++)</p><p><b>  {</b></p><p>  switch (j)</p><p><b>  {</b></p><p>  case 0: dm=table_dm[display[0]];w0=0;delay(50);w0=1;&

23、lt;/p><p>  case 1: dm=table_dm[display[1]];w1=0;delay(50);w1=1;</p><p>  case 2: dm=table_dm[display[2]];w2=0;delay(50);w2=1;</p><p>  case 3: dm=table_dm[display[3]];w3=0;delay(50);w

24、3=1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /**********初始化函數(shù)***********/</p><p>  void init()&l

25、t;/p><p><b>  {</b></p><p>  TMOD=0x20;</p><p><b>  TH1=0xfd;</b></p><p><b>  TL1=0xfd;</b></p><p>  PCON=0x00;</p>

26、<p><b>  TR1=1;</b></p><p>  SCON=0x50;</p><p><b>  }</b></p><p>  /*************keyscan***********/</p><p>  void keyscan()</p>&l

27、t;p><b>  {</b></p><p>  if (aa==0)</p><p><b>  {</b></p><p>  SBUF=0x06;</p><p>  do{} while(TI==0);TI=0;</p><p><b>  }<

28、;/b></p><p>  else if (bb==0)</p><p><b>  {</b></p><p>  SBUF=0xaa;</p><p>  do{} while(TI==0);TI=0;</p><p><b>  }</b></p>

29、<p>  else if(cc==0)</p><p>  {SBUF=0x55;</p><p>  display[3]=0x0d;</p><p>  display[2]=0x0d;</p><p>  display[1]=0x0d;</p><p>  display[0]=0x0d;<

30、;/p><p>  do{} while(TI==0);TI=0;</p><p><b>  }</b></p><p><b>  else ;</b></p><p><b>  }</b></p><p>  /************main***

31、************/</p><p>  void main()</p><p><b>  {</b></p><p><b>  init();</b></p><p>  dm=0x00; //初始化端口</p><p><b>  w0=0;</

32、b></p><p><b>  w1=0;</b></p><p><b>  w2=0;</b></p><p><b>  w3=0;</b></p><p>  for(h=0;h<4;h++) //開機顯示"0000"</p>

33、;<p><b>  {</b></p><p>  display[h]=0;</p><p><b>  }</b></p><p><b>  while(1)</b></p><p><b>  {</b></p>&l

34、t;p><b>  scan();</b></p><p>  keyscan();</p><p><b>  if(RI==1)</b></p><p><b>  {</b></p><p><b>  RI=0;</b></p>

35、<p>  buf[0]=SBUF;</p><p>  if(buf[0]==0x55)</p><p><b>  {</b></p><p><b>  }</b></p><p>  else if(buf[0]==0x06)</p><p><

36、;b>  {</b></p><p>  display[3]=0x0a;</p><p>  display[2]=0x0a;</p><p>  display[1]=buf[0]%100/10;</p><p>  display[0]=buf[0]%10;</p><p><b> 

37、 }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  display[3]=0x0a;</p><p>  display[2]=0x0e;</p><p>  display[1]=buf[0]

38、%100/10;</p><p>  display[0]=buf[0]%10;</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</

39、b></p><p><b>  下位機軟件清單</b></p><p>  #include "reg51.h"</p><p>  #include "intrins.h" //_nop_();延時函數(shù)用</p><p>  #define dm P0 //段碼輸出口&l

40、t;/p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  uchar code Table[4]={0x03,0x06,0x0c,0x09};</p><p>  uchar code Table1[4]={0x09,0x0c,0x06

41、,0x03};</p><p>  sbit DQ=P2^7; //溫度輸入口 </p><p>  sbit w0=P2^0; //數(shù)碼管4</p><p>  sbit w1=P2^1; //數(shù)碼管3</p><p>  sbit w2=P2^2; //數(shù)碼管2</p><p>  sbit w3=P2

42、^3; //數(shù)碼管1</p><p>  sbit beep=P3^7; //蜂鳴器和指示燈</p><p>  sbit set=P2^6; //溫度設置切換鍵</p><p>  sbit add=P2^4; //溫度加</p><p>  sbit dec=P2^5; //溫度減</p><p>  sbit l

43、ig=P3^6;</p><p>  int temp1=0; //顯示當前溫度和設置溫度的標志位為0 時顯示當前溫度</p><p><b>  uint h;</b></p><p>  uint temp;</p><p><b>  uchar r;</b></p><p

44、>  uchar high=35,low=20;</p><p>  uchar sign;</p><p>  uchar q=0;</p><p>  uchar tt=0;</p><p>  uchar scale;</p><p>  uchar idata buf[1]={0x00};</p&g

45、t;<p>  int num=0;</p><p>  int num1=0;</p><p>  //*****溫度小數(shù)部分用查表法****//</p><p>  uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,

46、0x09,0x09};</p><p><b>  //小數(shù)斷碼表</b></p><p>  uchar code table_dm[15]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x38,0x76,0x39};</p><p>  //共陰LED 段碼表&q

47、uot;0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"'L''H''C'</p><p>

48、  uchar table_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //個位帶小數(shù)點的斷碼表</p><p>  uchar data temp_data[2]={0x00,0x00}; //讀出溫度暫放</p><p>  uchar data display[5]={0x00,0x00,0x00,0x00,0

49、x00}; //顯示單元數(shù)據(jù),共4 個數(shù)據(jù)和一個運算暫用</p><p>  /**********延時函數(shù)************/</p><p>  void delay(uint t)</p><p><b>  {</b></p><p>  for (;t>0;t--);</p><

50、p><b>  }</b></p><p>  //********掃描顯示函數(shù)******//</p><p>  void scan()</p><p><b>  {</b></p><p><b>  int j;</b></p><p>

51、  for(j=0;j<4;j++)</p><p><b>  {</b></p><p>  switch (j)</p><p><b>  {</b></p><p>  case 0: dm=table_dm[display[0]];w0=0;delay(50);w0=1;//xia

52、oshu</p><p>  case 1: dm=table_dm1[display[1]];w1=0;delay(50);w1=1;//gewei</p><p>  case 2: dm=table_dm[display[2]];w2=0;delay(50);w2=1;//shiwei</p><p>  case 3: dm=table_dm[display

53、[3]];w3=0;delay(50);w3=1;//baiwei</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //******18B20 復位函數(shù)*******/</p>

54、;<p>  ow_reset(void)</p><p><b>  {</b></p><p>  char presence=1;</p><p>  while(presence)</p><p><b>  {</b></p><p>  while(

55、presence)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_();//從高拉倒低</p><p><b>  DQ=0;</b></p><p>  delay(50); //550 us</p><p><b&g

56、t;  DQ=1;</b></p><p>  delay(6); //66 us</p><p>  presence=DQ; //presence=0 復位成功,繼續(xù)下一步</p><p><b>  }</b></p><p>  delay(45); //延時500 us</p><

57、;p>  presence=~DQ;</p><p><b>  }</b></p><p>  DQ=1; //拉高電平</p><p><b>  }</b></p><p>  /*******DS18B20 寫命令函數(shù)*****/</p><p>  //向1-

58、WIRE 總線上寫1 個字節(jié)</p><p>  void write_byte(uchar val)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i=8;i>0;i--)</p><p>&

59、lt;b>  {</b></p><p>  DQ=1;_nop_();_nop_(); //從高拉倒低</p><p>  DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us</p><p>  DQ=val&0x01; //最低位移出</p><p>  delay(6);

60、//66 us</p><p>  val=val/2; //右移1 位</p><p><b>  }</b></p><p><b>  DQ=1;</b></p><p><b>  delay(1);</b></p><p><b> 

61、 }</b></p><p>  /*****S18B20 讀1 字節(jié)函數(shù)*****/</p><p>  //從總線上取1 個字節(jié)</p><p>  uchar read_byte(void)</p><p><b>  {</b></p><p><b>  uchar

62、 i;</b></p><p>  uchar value=0;</p><p>  for(i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ=1;_nop_();_nop_();</p><p>  value>>=1;&l

63、t;/p><p>  DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us</p><p>  DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us</p><p>  if(DQ)value|=0x80;</p><p>  delay(6); //66 us</p&

64、gt;<p><b>  }</b></p><p><b>  DQ=1;</b></p><p>  return(value);</p><p><b>  }</b></p><p>  /*******讀出溫度函數(shù)******//</p>

65、<p>  read_temp()</p><p><b>  {</b></p><p>  ow_reset(); //總線復位</p><p>  delay(200);</p><p>  write_byte(0xcc); //發(fā)命令</p><p>  write_byte(

66、0x44); //發(fā)轉(zhuǎn)換命令</p><p>  ow_reset();</p><p><b>  delay(1);</b></p><p>  write_byte(0xcc); //發(fā)命令</p><p>  write_byte(0xbe);</p><p>  temp_data[0]

67、=read_byte(); //讀溫度值的第字節(jié)</p><p>  temp_data[1]=read_byte(); //讀溫度值的高字節(jié)</p><p>  temp=temp_data[1];</p><p><b>  temp<<=8;</b></p><p>  temp=temp|temp_d

68、ata[0]; // 兩字節(jié)合成一個整型變量。</p><p>  return temp; //返回溫度值</p><p><b>  }</b></p><p>  /*******溫度數(shù)據(jù)處理函數(shù)*******/</p><p>  work_temp(uint tem)</p><p>&

69、lt;b>  {</b></p><p>  display[4]=tem&0x0f; // 取小數(shù)部分的值</p><p>  display[0]=ditab[display[4]]; // 存入小數(shù)部分顯示值</p><p>  display[4]=tem>>4; // 取中間八位,即整數(shù)部分的值</p>

70、<p>  display[3]=display[4]/100; // 取百位數(shù)據(jù)暫存</p><p>  display[1]=display[4]%100; // 取后兩位數(shù)據(jù)暫存</p><p>  display[2]=display[1]/10; // 取十位數(shù)據(jù)暫存</p><p>  display[1]=display[1]%10; //個

71、位數(shù)據(jù)</p><p>  r=display[1]+display[2]*10+display[3]*100;</p><p>  /////符號位顯示判斷/////</p><p>  if(r<high)</p><p><b>  {</b></p><p><b>  i

72、f(r>low)</b></p><p><b>  {</b></p><p>  display[3]=0x0e;</p><p><b>  }</b></p><p><b>  else</b></p><p><b&g

73、t;  {</b></p><p>  display[3]=0x0c;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {&

74、lt;/b></p><p>  display[3]=0x0d;</p><p><b>  }</b></p><p>  if(!display[2])</p><p><b>  {</b></p><p>  display[2]=0x0a; //次高位為0

75、時不顯示</p><p><b>  }</b></p><p><b>  }</b></p><p>  //*******報警函數(shù)******//</p><p>  void BEEP()</p><p><b>  {</b></p>

76、;<p>  if((r>high&&r<129)||r<low)</p><p><b>  {</b></p><p>  beep=!beep;</p><p><b>  }</b></p><p><b>  else</b&

77、gt;</p><p><b>  {</b></p><p><b>  beep=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*********步進電機函數(shù)

78、*********/</p><p>  void stepper()</p><p><b>  {</b></p><p>  if(r>high)</p><p><b>  {</b></p><p><b>  TR0=1;</b><

79、;/p><p>  if(num1<8)</p><p><b>  {</b></p><p>  do{}while(!TF0);num1++;TH0=0x06;TL0=0x06;</p><p><b>  }</b></p><p><b>  else

80、</b></p><p><b>  {</b></p><p><b>  num1=0;</b></p><p>  P1=Table[num];</p><p><b>  num++;</b></p><p>  if(num==4)

81、 num=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(r<low)</p><p><b>  {</b></p><p><b>  TR0=1;<

82、/b></p><p>  if(num1<8)</p><p><b>  {</b></p><p>  do{}while(!TF0);num1++;TH0=0x06;TL0=0x06;</p><p><b>  }</b></p><p><b&g

83、t;  else </b></p><p><b>  {</b></p><p><b>  num1=0;</b></p><p>  P1=Table1[num];</p><p><b>  num++;</b></p><p>  

84、if(num==4) num=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else TR0=0;</p><p><b>  }</b></p><p>  //*******設置溫度顯示

85、轉(zhuǎn)換*****//</p><p>  void xianshi(int horl)</p><p><b>  {</b></p><p>  if(horl==high)</p><p><b>  {</b></p><p>  display[3]=0x0d;<

86、/p><p>  display[2]=horl%100/10;</p><p>  display[1]=horl%10;</p><p>  display[0]=0;</p><p><b>  }</b></p><p><b>  else</b></p>

87、<p><b>  {</b></p><p>  display[3]=0x0c;</p><p>  display[2]=horl%100/10;</p><p>  display[1]=horl%10;</p><p>  display[0]=0;</p><p><

88、b>  }</b></p><p>  if(!display[2])</p><p><b>  {</b></p><p>  display[2]=0x0a; //次高位為0 時不顯示</p><p><b>  }</b></p><p><b

89、>  }</b></p><p>  //*********按鍵查詢程序********//</p><p>  void keyscan()</p><p><b>  {</b></p><p>  //int temp1; //最高溫度和最低溫度標志位</p><p>  

90、if(set==0)</p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  delay(500);//消抖</p><p>  if(set==0)<

91、;/p><p><b>  {</b></p><p><b>  temp1++;</b></p><p>  while(!set)</p><p><b>  scan();</b></p><p><b>  }</b><

92、/p><p>  if(temp1==1)</p><p><b>  {</b></p><p>  xianshi(high);</p><p><b>  scan();</b></p><p>  if(add==0)</p><p><b&

93、gt;  {</b></p><p>  while(!add)</p><p><b>  scan();</b></p><p><b>  high+=1;</b></p><p><b>  }</b></p><p>  if(de

94、c==0)</p><p><b>  {</b></p><p>  while(!dec)</p><p><b>  scan();</b></p><p><b>  high-=1;</b></p><p><b>  }</b

95、></p><p><b>  }</b></p><p>  if(temp1==2)</p><p><b>  {</b></p><p>  xianshi(low);</p><p>  if(add==0)</p><p><b

96、>  {</b></p><p>  while(!add)</p><p><b>  scan();</b></p><p><b>  low+=1;</b></p><p><b>  }</b></p><p>  if(de

97、c==0)</p><p><b>  {</b></p><p>  while(!dec)</p><p><b>  scan();</b></p><p><b>  low-=1;</b></p><p><b>  }</b&

98、gt;</p><p><b>  scan();</b></p><p><b>  }</b></p><p>  if(temp1>=3)</p><p><b>  {</b></p><p><b>  temp1=0;<

99、/b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

100、/b></p><p>  /**********初始化***********/</p><p>  void init (void)</p><p><b>  {</b></p><p>  TMOD=0x22;</p><p>  TH0=0x06;TL0=0x06;</p>

101、;<p><b>  TH1=0xfd;</b></p><p><b>  TL1=0xfd;</b></p><p>  PCON=0x00;</p><p><b>  TR1=1;</b></p><p>  SCON=0x50;</p>&

102、lt;p>  SBUF=0x55;</p><p><b>  }</b></p><p>  /**********接收函數(shù)*********/</p><p>  void receive ()</p><p><b>  {</b></p><p>  buf[0

103、]=SBUF;</p><p>  if(buf[0]==0x06)</p><p><b>  {</b></p><p><b>  lig=1;</b></p><p>  SBUF=0x06;</p><p>  do{} while(TI==0);TI=0;<

104、/p><p><b>  }</b></p><p>  else if(buf[0]==0xaa)</p><p><b>  {</b></p><p><b>  lig=1;</b></p><p><b>  SBUF=r;</b&

105、gt;</p><p>  do{} while(TI==0);TI=0;</p><p><b>  }</b></p><p>  else if(buf[0]==0x55)</p><p><b>  {</b></p><p><b>  lig=0x00;

106、</b></p><p>  SBUF=0x55;</p><p>  do{} while(TI==0);TI=0;</p><p><b>  }</b></p><p><b>  else ;</b></p><p><b>  }</b&

107、gt;</p><p>  /*********主函數(shù)*********/</p><p>  void main()</p><p><b>  {</b></p><p><b>  init();</b></p><p>  dm=0x00; //初始化端口</p

108、><p><b>  w0=0;</b></p><p><b>  w1=0;</b></p><p><b>  w2=0;</b></p><p><b>  w3=0;</b></p><p>  for(h=0;h<4;

109、h++) //開機顯示"0000"</p><p><b>  {</b></p><p>  display[h]=0;</p><p><b>  }</b></p><p>  ow_reset(); //開機先轉(zhuǎn)換一次</p><p>  writ

110、e_byte(0xcc); //Skip ROM</p><p>  write_byte(0x44); //發(fā)轉(zhuǎn)換命令</p><p>  for(h=0;h<100;h++) //開機顯示"0000"</p><p><b>  {</b></p><p><b>  scan()

111、;</b></p><p><b>  }</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  if(RI==1)</b></p><p>&

112、lt;b>  {</b></p><p><b>  RI=0;</b></p><p>  receive ();</p><p><b>  }</b></p><p>  if (temp1==0)</p><p><b>  {</b

113、></p><p>  work_temp(read_temp()); //處理溫度數(shù)據(jù)</p><p>  stepper();</p><p>  scan(); //顯示溫度值</p><p><b>  BEEP();</b></p><p>  keyscan();</p&g

114、t;<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  keyscan();</p><p><b>  }</b></p><p>

115、;<b>  }</b></p><p><b>  }</b></p><p><b>  5、實驗仿真</b></p><p><b>  5.1從機</b></p><p>  進入 protuse 后,連接好電路,并將程序下載進去。數(shù)碼管顯示溫度與

116、傳感器的溫度相同。當前溫度高于上限值時,步進電機倒轉(zhuǎn)并蜂鳴器報警;當前溫低于下限值時,步進電機正轉(zhuǎn)并蜂鳴器報警。</p><p>  當按下 SET 鍵一次時,進入溫度上限調(diào)節(jié),此時顯示軟件設置的溫度上限,按 AD D或 DEC 分別對上限溫度進行加一或減一。</p><p>  當再次按下 SET 鍵時,進入溫度下限調(diào)節(jié),此時顯示軟件設置的溫度下限,按 AD D或 DEC 分別對下限溫度

117、進行加一或減一。</p><p>  當?shù)谌伟聪?SET 鍵時,退出溫度報警線設置。顯示當前溫度。</p><p><b>  圖5.1從機仿真圖</b></p><p><b>  5.2主機</b></p><p><b>  圖5.2主機仿真圖</b></p>

118、;<p><b>  5.3雙機通信</b></p><p>  上電時主機顯示“0000”。按下左鍵向從機發(fā)送“06h”,從機回發(fā)“06h”,主機顯示“06”;按下中鍵向從機發(fā)送“0aah”,從機將當前溫度回發(fā)給主機,主機顯示當前溫度值;按下右鍵,向從機發(fā)送“055h”,從機發(fā)光二極管亮,并重新設定溫度上下限,主機顯示“HHHH”。</p><p> 

119、 圖5.3雙機通信仿真圖</p><p><b>  6、實驗心得體會</b></p><p>  通過本次單片機接口設計實習,本組成員在軟件及硬件上均設計并實現(xiàn)了實習要求的功能。在軟件功能的實現(xiàn)方面,成員們結(jié)合單片機原理圖,經(jīng)過反復推敲,最終統(tǒng)一思路以中斷的方式進行程序的編譯,同時熟悉并掌握了proteus軟件的使用,用該軟件進行了一些功能的初步演示仿真。這次實驗中

溫馨提示

  • 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

提交評論