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

標題: 18b20與單片機串口結合,實時接收,檢測溫度程序 [打印本頁]

作者: mpc112    時間: 2019-4-25 18:09
標題: 18b20與單片機串口結合,實時接收,檢測溫度程序
18b20檢測溫度,顯示在數碼管上,同過串口發送到電腦

單片機源程序如下:
  1. #include <at89x51.h>

  2. sbit DQ =     P2 ^ 6;  //定義端口DQ

  3. sbit led1    =P2^0;
  4. sbit led2    =P2^1;
  5. sbit led3    =P2^2;
  6. sbit led4    =P2^3;
  7. #define BCD unsigned char
  8. #define shi unsigned char
  9. unsigned char tx[10]={0,0,0x2E,0,0,0,0,0xDF,0x43,0x0A};

  10. unsigned code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
  11.                         0xf8,0x80,0x90};

  12. void Delay(int num)//延時函數
  13. {
  14.         while(num--) ;
  15. }

  16. void Delaynms(unsigned int di) //延時
  17. {
  18.         unsigned int da,db;
  19.          for(da=0;da<di;da++)
  20.                    for(db=0;db<100;db++);
  21. }

  22. void Init_DS18B20(void)//初始化ds1820
  23. {
  24.         unsigned char x=0;
  25.         DQ = 1;    //DQ復位
  26.         Delay(8);  //稍做延時
  27.         DQ = 0;    //單片機將DQ拉低
  28.         Delay(80); //精確延時 大于 480us
  29.         DQ = 1;    //拉高總線
  30.         Delay(14);
  31.         x=DQ;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
  32.         Delay(20);
  33. }


  34. unsigned char ReadOneChar(void)//讀一個字節
  35. {
  36.         unsigned char i=0;
  37.         unsigned char dat = 0;
  38.         for (i=8;i>0;i--)
  39.         {
  40.                 DQ = 0; // 給脈沖信號
  41.                 dat>>=1;
  42.                 DQ = 1; // 給脈沖信號
  43.                 if(DQ)
  44.                 dat|=0x80;
  45.                 Delay(4);
  46.         }
  47.         return(dat);
  48. }


  49. void WriteOneChar(unsigned char dat)//寫一個字節
  50. {
  51.         unsigned char i=0;
  52.         for (i=8; i>0; i--)
  53.         {
  54.                 DQ = 0;
  55.                 DQ = dat&0x01;
  56.                 Delay(2);
  57.                 DQ = 1;
  58.                 dat>>=1;
  59.         }
  60. }


  61. void ReadTemperature(void)//讀取溫度
  62. {
  63.         unsigned char a=0;
  64.         unsigned char b=0;
  65.         unsigned char Data_L=0;
  66.         unsigned char num=0;

  67.         Init_DS18B20();

  68.         WriteOneChar(0xCC); // 跳過讀序號列號的操作
  69.         WriteOneChar(0x44); // 啟動溫度轉換
  70.         Init_DS18B20();
  71.         WriteOneChar(0xCC); //跳過讀序號列號的操作
  72.         WriteOneChar(0xBE); //讀取溫度寄存器

  73.         a=ReadOneChar();  //讀低8位
  74.         b=ReadOneChar(); //讀高8位

  75.     tx[0] = (a/16+b*16)/10;      //整數部分


  76.         tx[1] = (a/16+b*16)%10;

  77.     Data_L=a&0X0F;
  78.     for(num=3;num<7;num++)                 //小數部分
  79.    {
  80.       Data_L=Data_L*10;                                 //10           //100                //40                 //80
  81.      tx[num]=Data_L/16;                         //0          //6                        //2                         //5
  82.       Data_L=Data_L%16;                                 //10           //4                        //8
  83.         }

  84. }

  85. void Display_SMG(void)
  86. {
  87.    unsigned char a;
  88.    for(a=0;a<=50;a++)
  89.    {
  90.            P0=table[tx[0]];
  91.            P2_0 = 0;
  92.            Delaynms(5);
  93.            P2_0 = 1;
  94.         
  95.            P0=(table[tx[1]])&0x7f;
  96.            P2_1 = 0;
  97.            Delaynms(5);
  98.            P2_1 = 1;
  99.         
  100.            P0=table[tx[3]];
  101.            P2_2 = 0;
  102.            Delaynms(5);
  103.            P2_2 = 1;
  104.         
  105.            P0=table[tx[4]];
  106.            P2_3 = 0;
  107.            Delaynms(5);
  108.            P2_3 = 1;
  109.    }
  110. }
  111. void b(unsigned int baud)
  112. {
  113.         SCON=0x50;//0101  0000
  114.         TMOD &=0x0F;
  115.         TMOD |=0x20;
  116.         TH1=TL1=(256-11059200)/12/2/16/baud;
  117.         ET1=0;
  118.         TR1=1;
  119. }

  120. void main(void)
  121. {  
  122.         BCD w,a,s,d;
  123.         shi z,x,c,v;
  124.         Init_DS18B20();
  125.         while(1)
  126.         {                 
  127.                 ReadTemperature();         
  128.                 Display_SMG();         
  129.                 b(9600);
  130.         w=(table[tx[0]]/10*16)+(table[tx[0]]%10);
  131.         z=((w>>4)*10+(w&0x0f));

  132.                 SBUF=z;
  133.                 while(TI==0);
  134.              TI=0;
  135.                  Delay(1000);
  136.                 a=(table[tx[1]]&0x7f/10*16)+(table[tx[1]]&0x7f%10);
  137.                 x=((a>>4)*10+(a&0x0f));
  138.                 SBUF=x;
  139.                 while(TI==0);
  140.              TI=0;
  141.                  Delay(1000);
  142.                 s=(table[tx[3]]/10*16)+(table[tx[3]]%10);
  143.                 c=((s>>4)*10+(s&0x0f));
  144.                                 SBUF=c;
  145.                 while(TI==0);
  146.              TI=0;
  147.                  Delay(1000);
  148.                 d=(table[tx[4]]/10*16)+(table[tx[4]]%10);
  149.                 v=((d>>4)*10+(d&0x0f));
  150.                                 SBUF=v;
  151.                 while(TI==0);
  152.              TI=0;
  153.      Delay(1000);
  154.         }         
  155. }
復制代碼

所有資料51hei提供下載:
串口溫度.rar (40.68 KB, 下載次數: 17)








歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成年人黄色免费视频 | 毛片免费在线观看 | 成人在线免费av | 三级免费av | 色www精品视频在线观看 | 国产精品日产欧美久久久久 | 夜夜骑综合 | 国产网站久久 | 91欧美精品 | 四虎最新地址 | 色综合久久伊人 | 一区二区三区国产好的精 | 成人在线播放 | 狠狠干美女 | 一级特黄在线 | 三级黄色大片网站 | 欧美日韩国产一区二区三区 | 亚洲第一在线 | 中文字幕欧美日韩 | 中文字幕四虎 | 一二区视频 | 亚洲成人动漫在线观看 | 91精品国模一区二区三区 | 欧美成人精品一区二区男人看 | 国产精品高潮呻吟久久 | 天天av网| 久久一区二区视频 | 午夜免费电影院 | 国产欧美在线观看 | 久久爱黑人激情av摘花 | 亚洲视频二 | 欧美一级电影免费观看 | 日韩福利视频 | 精品视频一区二区三区在线观看 | 日韩av一区二区在线观看 | 日屁网站 | 久久国产精品久久久久 | 欧美激情在线精品一区二区三区 | 永久av | 九九热在线免费视频 | 亚洲最大看片网站 |