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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3209|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

三點(diǎn)溫度采集及串口發(fā)送51單片機(jī)源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:311219 發(fā)表于 2018-4-18 21:02 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
三個(gè)DS18B20的溫度采集單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit ds = P2^0;
  6. sbit ds2 = P2^1;
  7. sbit ds3 = P2^2;
  8. sbit Led1 = P0^4;
  9. sbit Led2 = P0^5;
  10. sbit Led3 = P0^7;
  11. uint temp,temp2,temp3;                        //整形溫度數(shù)據(jù)
  12. float f_temp1,f_temp2,f_temp3;                //浮點(diǎn)型溫度數(shù)據(jù)
  13. uchar rev=0,flag_rev=0;
  14. void delay(uint z)
  15. {
  16.         uint x,y;
  17.         for(x=z;x>0;x--)
  18.                 for(y=110;y>0;y--);
  19. }
  20. /*****DS18B20復(fù)位,初始化函數(shù)*****/
  21. void dsreset(void)       
  22. {
  23.         uint i;
  24.         ds = 0;
  25.         i = 103;
  26.         while(i>0)
  27.                 i--;
  28.         ds = 1;
  29.         i = 4;
  30.         while(i>0)
  31.                 i--;
  32. }
  33. void dsreset2(void)       
  34. {
  35.         uint i;
  36.         ds2 = 0;
  37.         i = 103;
  38.         while(i>0)
  39.                 i--;
  40.         ds2 = 1;
  41.         i = 4;
  42.         while(i>0)
  43.                 i--;
  44. }

  45. void dsreset3(void)       
  46. {
  47.         uint i;
  48.         ds3 = 0;
  49.         i = 103;
  50.         while(i>0)
  51.                 i--;
  52.         ds3 = 1;
  53.         i = 4;
  54.         while(i>0)
  55.                 i--;
  56. }

  57. /*****讀1位數(shù)據(jù)函數(shù)*****/
  58. bit tempreadbit(void)
  59. {
  60.         uint i;
  61.         bit dat;
  62.         ds = 0;
  63.         i++;
  64.         ds = 1;
  65.         i++;
  66.         i++;
  67.         dat = ds;
  68.         i = 8;
  69.         while(i>0)
  70.                 i--;
  71.         return (dat);
  72. }
  73. bit tempreadbit2(void)
  74. {
  75.         uint i;
  76.         bit dat;
  77.         ds2 = 0;
  78.         i++;
  79.         ds2 = 1;
  80.         i++;
  81.         i++;
  82.         dat = ds2;
  83.         i = 8;
  84.         while(i>0)
  85.                 i--;
  86.         return (dat);
  87. }
  88. bit tempreadbit3(void)
  89. {
  90.         uint i;
  91.         bit dat;
  92.         ds3 = 0;
  93.         i++;
  94.         ds3 = 1;
  95.         i++;
  96.         i++;
  97.         dat = ds3;
  98.         i = 8;
  99.         while(i>0)
  100.                 i--;
  101.         return (dat);
  102. }
  103. /*****讀一個(gè)字節(jié)數(shù)據(jù)函數(shù)*****/
  104. uchar tempread(void)
  105. {
  106.         uchar i,j,dat;
  107.         dat = 0;
  108.         for(i=1;i<=8;i++)
  109.         {
  110.                 j = tempreadbit();
  111.                 dat = (j<<7)|(dat>>1);   
  112.         }
  113.         return (dat);
  114. }
  115. uchar tempread2(void)
  116. {
  117.         uchar i,j,dat;
  118.         dat = 0;
  119.         for(i=1;i<=8;i++)
  120.         {
  121.                 j = tempreadbit2();
  122.                 dat = (j<<7)|(dat>>1);   
  123.         }
  124.         return (dat);
  125. }
  126. uchar tempread3(void)
  127. {
  128.         uchar i,j,dat;
  129.         dat = 0;
  130.         for(i=1;i<=8;i++)
  131.         {
  132.                 j = tempreadbit3();
  133.                 dat = (j<<7)|(dat>>1);   
  134.         }
  135.         return (dat);
  136. }
  137. /*****向DS18B20寫一個(gè)字節(jié)數(shù)據(jù)函數(shù)*****/
  138. void tempwritebyte(uchar dat)
  139. {
  140.         uint i;
  141.         uchar j;
  142.         bit testb;
  143.         for(j=1;j<=8;j++)
  144.         {
  145.                 testb = dat&0x01;
  146.                 dat = dat>>1;
  147.                 if(testb)
  148.                 {
  149.                         ds = 0;
  150.                         i++; i++;
  151.                         ds = 1;
  152.                         i = 8;
  153.                         while(i>0)
  154.                                 i--;
  155.                 }
  156.                 else
  157.                 {
  158.                         ds = 0;
  159.                         i = 8;
  160.                         while(i>0)
  161.                                 i--;
  162.                         ds = 1;
  163.                         i++; i++;
  164.                 }
  165.         }
  166. }
  167. void tempwritebyte2(uchar dat)
  168. {
  169.         uint i;
  170.         uchar j;
  171.         bit testb;
  172.         for(j=1;j<=8;j++)
  173.         {
  174.                 testb = dat&0x01;
  175.                 dat = dat>>1;
  176.                 if(testb)
  177.                 {
  178.                         ds2 = 0;
  179.                         i++; i++;
  180.                         ds2 = 1;
  181.                         i = 8;
  182.                         while(i>0)
  183.                                 i--;
  184.                 }
  185.                 else
  186.                 {
  187.                         ds2 = 0;
  188.                         i = 8;
  189.                         while(i>0)
  190.                                 i--;
  191.                         ds2 = 1;
  192.                         i++; i++;
  193.                 }
  194.         }
  195. }
  196. void tempwritebyte3(uchar dat)
  197. {
  198.         uint i;
  199.         uchar j;
  200.         bit testb;
  201.         for(j=1;j<=8;j++)
  202.         {
  203.                 testb = dat&0x01;
  204.                 dat = dat>>1;
  205.                 if(testb)
  206.                 {
  207.                         ds3 = 0;
  208.                         i++; i++;
  209.                         ds3 = 1;
  210.                         i = 8;
  211.                         while(i>0)
  212.                                 i--;
  213.                 }
  214.                 else
  215.                 {
  216.                         ds3 = 0;
  217.                         i = 8;
  218.                         while(i>0)
  219.                                 i--;
  220.                         ds3 = 1;
  221.                         i++; i++;
  222.                 }
  223.         }
  224. }
  225. void tempchange(void)
  226. {
  227.         dsreset();
  228.         delay(1);
  229.         tempwritebyte(0xcc);                //寫跳過讀ROM指令
  230.         tempwritebyte(0x44);                //寫溫度轉(zhuǎn)換指令
  231. }
  232. void tempchange2(void)
  233. {
  234.         dsreset2();
  235.         delay(1);
  236.         tempwritebyte2(0xcc);                //寫跳過讀ROM指令
  237.         tempwritebyte2(0x44);                //寫溫度轉(zhuǎn)換指令
  238. }
  239. void tempchange3(void)
  240. {
  241.         dsreset3();
  242.         delay(1);
  243.         tempwritebyte3(0xcc);                //寫跳過讀ROM指令
  244.         tempwritebyte3(0x44);                //寫溫度轉(zhuǎn)換指令
  245. }
  246. /*****讀取寄存器中存儲(chǔ)的溫度數(shù)據(jù)*****/
  247. uint get_temp()
  248. {
  249.         uchar a,b;
  250.         dsreset();
  251.         delay(1);
  252.         tempwritebyte(0xcc);
  253.         tempwritebyte(0xbe);
  254.         a = tempread();          //低八位
  255.         b = tempread();                //高八位
  256.         temp = b;
  257.         temp<<=8;
  258.         temp = temp|a;
  259.   f_temp1 = temp*0.0625;
  260.         temp = f_temp1*10+0.5;
  261.         f_temp1 = f_temp1+0.05;
  262.         return temp;
  263. }
  264. uint get_temp2()
  265. {
  266.         uchar a,b;
  267.         dsreset2();
  268.         delay(1);
  269.         tempwritebyte2(0xcc);
  270.         tempwritebyte2(0xbe);
  271.         a = tempread2();          //低八位
  272.         b = tempread2();                //高八位
  273.         temp2 = b;
  274.         temp2<<=8;
  275.         temp2 = temp2|a;
  276.   f_temp2 = temp2*0.0625;
  277.         temp2 = f_temp2*10+0.5;
  278.         f_temp2 = f_temp2+0.05;
  279.         return temp2;
  280. }
  281. uint get_temp3()
  282. {
  283.         uchar a,b;
  284.         dsreset3();
  285.         delay(1);
  286.         tempwritebyte3(0xcc);
  287.         tempwritebyte3(0xbe);
  288.         a = tempread3();          //低八位
  289.         b = tempread3();                //高八位
  290.         temp3 = b;
  291.         temp3<<=8;
  292.         temp3 = temp3|a;
  293.   f_temp3 = temp3*0.0625;
  294.         temp3 = f_temp3*10+0.5;
  295.         f_temp3 = f_temp3+0.05;
  296.         return temp3;
  297. }
  298. /*****串口配置部分*****/
  299. void int_com(void)
  300. {
  301.         TMOD = 0X20;
  302.         PCON = 0X00;
  303.         SCON = 0X50;
  304.         TH1 = 0XFd;                                //波特率9600
  305.         TL1 = 0XFd;
  306.         TR1 = 1;
  307.         SM0 = 0;
  308.         SM1 = 1;
  309.         REN = 1;
  310.         EA = 1;
  311.         ES = 1;
  312. }

  313. void comm(char *parr)
  314. {
  315.         do
  316.         {
  317.                 SBUF = *parr++;                //發(fā)送數(shù)據(jù)
  318.                 while(!TI);                                //等待發(fā)送完成標(biāo)志為1
  319.                 TI = 0;                                                //標(biāo)志位清0
  320.         }
  321.         while(*parr);                                //保持循環(huán)直到字符為'\0'
  322. }

  323. void main()
  324. {
  325.         uchar buff1[4],buff2[4],buff3[4],buffer[12];
  326.         uint m;
  327.         int_com();
  328.         while(1)
  329.         {
  330.                 tempchange();
  331.                 tempchange2();
  332.                 tempchange3();
  333.                 get_temp();                                //獲取溫度
  334.                 get_temp2();       
  335.                 get_temp3();       
  336.                 sprintf(buff1,"%f",f_temp1);                                //浮點(diǎn)型溫度格式轉(zhuǎn)換為字符型
  337.                 sprintf(buff2,"%f",f_temp2);
  338.                 sprintf(buff3,"%f",f_temp3);
  339.                 /*****數(shù)據(jù)打包處理*****/
  340.                 for(m=0;m<4;m++)
  341.                 {
  342.                         buffer[m] = buff1[m];       
  343.                         buffer[m+4] = buff2[m];
  344.                         buffer[m+8] = buff3[m];
  345.                 }
  346.                         comm(buffer);                                                                                                //串口發(fā)送數(shù)據(jù)       
  347.                
  348.                 if(flag_rev == 1)
  349.                 {
  350.                         ES = 0;
  351.                         switch(rev)
  352.                         {
  353.                                 case '0': Led1=1;Led2=1;Led3=1;
  354.                                                 break;
  355.                                 case '1': Led1=0;Led2=1;Led3=1;
  356.                                                 break;
  357.                                 case '2': Led1=1;Led2=0;Led3=1;
  358.                                                 break;
  359.                                 case '3': Led1=1;Led2=1;Led3=0;
  360.                                                 break;
  361.                                 case '4': Led1=0;Led2=0;Led3=1;
  362.                                                 break;
  363.                                 case '5': Led1=1;Led2=0;Led3=0;
  364.                                                 break;
  365.                                 case '6': Led1=1;Led2=0;Led3=1;
  366.                                                 break;
  367.                                 case '7': Led1=0;Led2=0;Led3=0;
  368.                                                 break;
  369.                         }
  370.                         ES = 1;
  371.                         flag_rev = 0;
  372.                 }
  373.        
  374.         }
  375. }

  376. void ser() interrupt 4
  377. {
  378.                  RI = 0;
  379.                 rev = SBUF;
  380.                 flag_rev = 1;       
  381. }
復(fù)制代碼

所有資料51hei提供下載:
三點(diǎn)溫度采集及串口發(fā)送51.zip (88.42 KB, 下載次數(shù): 37)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费观看 | 狠狠色狠狠色综合日日92 | 九九久久国产精品 | 毛片站 | 久久激情视频 | 欧美黄在线观看 | 久久夜视频 | 怡红院怡春院一级毛片 | 色频| 日韩亚洲欧美综合 | 亚洲精品www | a级片在线观看 | 成人免费视频观看视频 | 欧美精品欧美精品系列 | 精品久久精品 | 日韩一区二区在线视频 | 亚洲天天 | 亚洲黄色av网站 | 日韩一级免费观看 | 久久免费视频观看 | 自拍亚洲| 国产精品一区二区三区四区 | 日韩精品免费在线观看 | 久久最新 | 国产精品免费视频一区 | 午夜精品一区二区三区在线视频 | 国产精品不卡视频 | 噜久寡妇噜噜久久寡妇 | 一区二区三区免费 | 女人毛片a毛片久久人人 | 久久久123| 精品久久香蕉国产线看观看亚洲 | 亚洲国产中文字幕 | 精品久久久久久 | 日本电影韩国电影免费观看 | 91精品国产91久久久久游泳池 | 伊人久久成人 | 一区二区三区国产 | 日本涩涩网 | 三a毛片 | 久久久精 |