久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7039|回復: 8
收起左側

基于51單片機和紅外收發模塊的遠程溫度控制與檢測

[復制鏈接]
ID:223492 發表于 2017-7-31 10:20 | 顯示全部樓層 |閱讀模式
紅外線遙控Proteus仿真電路+發射+接收程序

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

同時還附帶了大量的相關新資料:
0.png
目錄:
hw+ds1307\
38kHz 紅外發射與接收.doc
8050.pdf
8050S.pdf
90182.pdf
901850303.pdf
S8050.pdf
wendu.ldb
基于M50462AP和CX20106A芯片的雙工紅外線通信系統.pdf
基于nRF9E5的多點無線溫度采集系統設計.pdf
基于ZigBee技術的公共場所無線溫度采集系統.pdf
微機—單片機紅外線通信.pdf
無線溫度采集系統.doc
無線溫度采集系統.pdf
無線溫度采集系統的設計.pdf
無線溫度采集系統設計報告.doc
用89C51單片機控制紅外線通信接口電路設計.pdf
短距離無線溫度采集系統設計.pdf
線溫度采集系統.pdf

0.png

單片機發送源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<absacc.h>

  4. #define  uchar  unsigned  char
  5. #define  uint   unsigned  int

  6. #define Write_comm XBYTE[0XFCFF]    //RS=0,RW=0,指令寄存器寫入  0100 0000
  7. #define Read_addr XBYTE[0XFEFF]     //RS=0,RW=1,忙標志和地址計數器讀出   0100 0010
  8. #define Write_data XBYTE[0X4DFF]

  9. sbit  DATA = P1^0; //DS18B20接入口

  10. uchar t;
  11. uchar xsd;



  12. delay1(uint i)            //延時1MS
  13. {
  14. uint j,k;
  15. for(j=0;j<i;j++)
  16. for(k=0;k<120;k++);
  17. }

  18. /*延時子函數*/
  19. void delay(uint num)
  20. {
  21.         while(num--) ;
  22. }


  23. void LCDBusy()           //------------lcd忙碌判斷
  24. {

  25. uchar a;
  26.    do{
  27.       P0=0xFF;
  28.       a=Read_addr;
  29.       }
  30.      while ((a&0x80)!=0x00);
  31. }


  32. void LCDInit()                        //---------------lcd初始化
  33. {
  34.   LCDBusy();
  35. Write_comm=0x38;       //使用8 位數據,顯示兩行,使用5*7 的字型
  36.   LCDBusy();
  37. Write_comm=0x01;      //清屏
  38.   LCDBusy();
  39. Write_comm=0x06;       //字符不動,光標自動右移一格
  40.   LCDBusy();
  41. Write_comm=0x0c;      //顯示器開,光標不顯示,字符不閃爍
  42. }



  43. lcd1()        //---------數據處理,液晶顯示屏第一行處理程序
  44. {
  45. LCDBusy();
  46. Write_comm=0x80;
  47. LCDBusy();
  48. Write_data=(0x54);             //T
  49. LCDBusy();
  50. Write_data=(0x65);            //e
  51. LCDBusy();
  52. Write_data=(0x6d);            //m
  53. LCDBusy();
  54. Write_data=(0x70);             //p
  55. LCDBusy();
  56. Write_data=(0x65);             //e
  57. LCDBusy();
  58. Write_data=(0x72);             //r
  59. LCDBusy();
  60. Write_data=(0x61);             //a
  61. LCDBusy();
  62. Write_data=(0x74);             //t
  63. LCDBusy();
  64. Write_data=(0x75);             //u
  65. LCDBusy();
  66. Write_data=(0x72);             //r
  67. LCDBusy();
  68. Write_data=(0x65);             //e
  69. LCDBusy();
  70. Write_data=(0x3a);             //:
  71. LCDBusy();
  72. Write_comm=0xc0;
  73. LCDBusy();
  74. Write_data=0x2b;
  75. LCDBusy();
  76. Write_comm=0xc4;
  77. LCDBusy();
  78. Write_data=0x2e;  
  79. LCDBusy();
  80. Write_comm=0xc6;
  81. LCDBusy();
  82. Write_data=0xdf;
  83. LCDBusy();
  84. Write_data=0x43;

  85. }


  86. xsdcl()         //小數點位處理程序
  87. {
  88.   switch(xsd)
  89. {
  90. case 0x00:  return(0);   break;
  91. case 0x01:  return(0);   break;
  92. case 0x02:  return(1);   break;
  93. case 0x03:  return(1);   break;
  94. case 0x04:  return(2);   break;
  95. case 0x05:  return(3);   break;
  96. case 0x06:  return(3);   break;
  97. case 0x07:  return(4);   break;
  98. case 0x08:  return(5);   break;
  99. case 0x09:  return(5);   break;
  100. case 0x0a:  return(6);   break;
  101. case 0x0b:  return(6);   break;
  102. case 0x0c:  return(7);   break;
  103. case 0x0d:  return(8);   break;
  104. case 0x0e:  return(8);   break;
  105. case 0x0f:  return(9);   break;
  106. default:   break;
  107. }

  108. }



  109. lcd2()        //---------數據處理,液晶顯示屏第二行處理程序,顯示當前溫度
  110. {

  111. uchar a[4];

  112. a[0]=t/100;                                           
  113. a[1]=(t%100)/10;                                             
  114. a[2]=t%10;
  115. a[3]=xsdcl();                                              
  116.                      
  117. LCDBusy();
  118. Write_comm=0xc1;
  119. LCDBusy();
  120. Write_data=a[0]+0x30;          //百位
  121. LCDBusy();
  122. Write_data=a[1]+0x30;         //十位
  123. LCDBusy();
  124. Write_data=a[2]+0x30;        //個
  125. LCDBusy();
  126. Write_comm=0xc5;

  127. LCDBusy();
  128. Write_data=a[3]+0x30;      //小數點位      
  129. }



  130. /*******************************************DS18b20溫度傳感器函數***************************************/

  131. //傳感器初始化
  132. Init_DS18B20(void)                  
  133. {
  134.         uchar x=0;
  135.         DATA = 1;    //DQ復位
  136.         delay(10);  //稍做延時
  137.         DATA = 0;    //單片機將DQ拉低
  138.         delay(80); //精確延時 大于 480us    //450
  139.         DATA = 1;    //拉高總線
  140.         delay(20);
  141.         x=DATA;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
  142.         delay(30);
  143. }

  144. //讀一個字節
  145. ReadOneChar(void)
  146. {
  147.         uchar i=0;
  148.         uchar dat = 0;
  149.         for (i=8;i>0;i--)
  150.         {
  151.                   DATA = 0; // 給脈沖信號
  152.                   dat>>=1;
  153.                   DATA = 1; // 給脈沖信號
  154.                   if(DATA)
  155.                    dat|=0x80;
  156.                   delay(8);
  157.         }
  158.         return(dat);
  159. }

  160. //寫一個字節
  161. WriteOneChar(unsigned char dat)
  162. {
  163.         uchar i=0;
  164.         for (i=8; i>0; i--)
  165.         {
  166.                   DATA = 0;
  167.                   DATA = dat&0x01;
  168.           delay(10);
  169.           DATA = 1;
  170.           dat>>=1;
  171.         }
  172.         delay(8);
  173. }

  174. //讀取溫度
  175. ReadTemperature(void)
  176. {
  177.         uchar a=0;
  178.         uchar b=0;
  179.         //int t=0;
  180.         float tt=0;
  181.         Init_DS18B20();
  182.         WriteOneChar(0xCC); // 跳過讀序號列號的操作
  183.         WriteOneChar(0x44); // 啟動溫度轉換
  184.         Init_DS18B20();
  185.         WriteOneChar(0xCC); //跳過讀序號列號的操作
  186.         WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度

  187.         a=ReadOneChar();//低位
  188.         b=ReadOneChar();//高位

  189.     //b=b&0x0f;
  190.         t=b<<4;

  191.     xsd=a&0x0f;
  192.     a=a>>4;
  193.     t=t|a;
  194. }
  195. /*********************************************************************************************************/



  196. //*****************溫度采集單片機串行口發送程序***********************//

  197. void transdata()   
  198. {
  199. uchar m[2];
  200. uchar i;
  201. m[0]=t;
  202. m[1]=xsd;
  203. for(i=0;i<2;i++)
  204. {
  205. SBUF=m[i];
  206. while(!TI);
  207. TI=0;
  208. }
  209. }


  210. //**********串行口初始化,串行工作在工作方式1,T1定時,工作在方式2,波特率不加倍*************//
  211. void Initial()   
  212. ……………………

  213. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
基于51單片機和紅外收發模塊的遠程溫度控制與檢測.rar (2.37 MB, 下載次數: 113)


回復

使用道具 舉報

ID:102679 發表于 2017-8-5 10:53 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:294229 發表于 2018-3-23 09:37 | 顯示全部樓層
謝謝您的分享,很有幫助
回復

使用道具 舉報

ID:294229 發表于 2018-3-23 09:38 | 顯示全部樓層
謝謝分享,很有幫助
回復

使用道具 舉報

ID:297180 發表于 2018-3-26 13:10 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:322550 發表于 2018-5-5 10:02 來自手機 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:328844 發表于 2018-5-13 14:31 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:440585 發表于 2019-12-7 15:40 | 顯示全部樓層
樓主您好  這個程序非常實用  能幫我加一個接收模塊上 當溫度達到255.9度時P1^7腳輸出低電平嗎? 謝謝了
回復

使用道具 舉報

ID:698376 發表于 2020-3-23 17:00 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产成人精品一区二区 | 羞羞视频免费观 | 激情欧美日韩一区二区 | 中文字幕国产精品 | 精品国产乱码一区二区三区 | 久久久久久蜜桃一区二区 | 一区二区三区精品视频 | 91大神在线资源观看无广告 | 欧美美女二区 | 国产乱码一二三区精品 | 亚洲日韩欧美一区二区在线 | 欧一区 | 欧美区在线观看 | 国产午夜精品久久久久 | 午夜影院毛片 | 在线看av网址 | 国产日韩精品在线 | 欧美在线一级 | 久久精品亚洲精品国产欧美 | 精品国产91乱码一区二区三区 | 国产中文原创 | 亚洲欧美在线一区 | 亚洲精品一区二区三区中文字幕 | 国产免费一二三区 | 中文字幕一区二区三区乱码在线 | 国产免费一区二区 | 日本三级视频 | 亚洲一级二级三级 | 免费久久久| 久久99精品久久久久久 | 性做久久久久久免费观看欧美 | 欧美在线一区视频 | 午夜天堂精品久久久久 | 成人免费黄色 | 国产精品久久久久久久白浊 | 亚洲一区二区三区桃乃木香奈 | 久久一二 | 黄色片在线网站 | 美女久久视频 | 天天操天天玩 | 91社区在线观看高清 |