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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2515|回復: 2
打印 上一主題 下一主題
收起左側

51單片機測溫程序(18B20+LCD1602)

[復制鏈接]
跳轉到指定樓層
樓主
ID:56932 發表于 2020-6-19 15:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 簡簡單單♂ 于 2020-6-19 15:49 編輯

  1. FILE NAME:                        main.c
  2. CHIP TYPE:                        STC12C5A60S2
  3. CLOCK FREQUENCY:        11.0592 MHZ
  4. IDE:                                WAVE SH51
  5. COMPILER:                        KEIL for 8051
  6. TIME:                                20/09/2013
  7. AUTHOR:                                RE
  8. VERSION:                        2.0
  9. HARDWARE CONNECT:        MAIN_BOARD       CPU_51
  10.                   RS     ---                           P0.6
  11.                                                 RW     ---                                 P0.5
  12.                                                 E      ---                           P0.4
  13.                                                 D0-D7  ---                           P1.0-P1.7
  14.                                                 CPU_51                 SENSOR
  15.                                                 P0.0   ---                   18B20_OUT
  16.                                 
  17. ***************************************************/
  18. #include<reg51.h>

  19. #define uchar unsigned char
  20. #define uint unsigned  int



  21. sbit DQ = P0^0;
  22. sbit RS = P0^6;
  23. sbit RW = P0^5;
  24. sbit EN = P0^4;

  25. uchar data disdata[7];

  26. uint tvalue;                        //溫度值
  27. uchar tflag;                        //溫度正負標志
  28.                                                                                           
  29. /********************************************************
  30.                           LCD1602相關程序
  31. ********************************************************/
  32. void delay1ms(unsigned int ms)         //延時1毫秒
  33. {
  34.         unsigned int i,j;
  35.         for(i=0;i<ms;i++)
  36.         {
  37.           for(j=0;j<100;j++);
  38.         }
  39. }

  40. void Lcd_Write_Com(unsigned char com)   //LCD1602的寫指令程序
  41. {
  42.         delay1ms(1);
  43.         RS=0;
  44.         RW=0;
  45.         EN=0;
  46.         P1=com;
  47.         delay1ms(1);
  48.         EN=1;
  49.         delay1ms(1);
  50.         EN=0;
  51. }
  52. void Lcd_Write_Dat(unsigned char dat)    //LCD1602的寫數據程序
  53. {
  54.         delay1ms(1);;
  55.         RS=1;
  56.         RW=0;
  57.         EN=0;
  58.         P1=dat;
  59.         delay1ms(1);
  60.         EN=1;
  61.         delay1ms(1);
  62.         EN=0;
  63. }
  64. void Lcd_Init()                            //LCD1602初始化設置
  65. {
  66.         delay1ms(15);
  67.         Lcd_Write_Com(0x38);delay1ms(5);
  68.         Lcd_Write_Com(0x08);delay1ms(5);
  69.         Lcd_Write_Com(0x01);delay1ms(5);
  70.         Lcd_Write_Com(0x06);delay1ms(5);
  71.         Lcd_Write_Com(0x0c);delay1ms(5);
  72. }

  73. void Lcd_1602_Display_String(uchar ad, uchar *s)//LCD1602的顯示程序
  74. {
  75.         Lcd_Write_Com(ad);
  76.         while(*s>0)
  77.         {
  78.                 Lcd_Write_Dat(*s++);
  79.         }
  80. }

  81. /****************************************************
  82.                            DS18B20相關程序
  83. ****************************************************/
  84. void delay_18B20(unsigned int i)//延時1微秒
  85. {
  86.         while(i--);
  87. }

  88. void DS18B20_Reset()                        //DS18B20的復位程序
  89. {
  90.         unsigned char x=0;
  91.          DQ = 1;                        //DQ復位
  92.          delay_18B20(80);                //延時
  93.          DQ = 0;                        //DQ拉低
  94.          delay_18B20(750);              //精確延時大于480us    小于960us
  95.          DQ = 1;                        //拉高
  96.          delay_18B20(140);
  97. }

  98. uchar DS18B20_Read()                         //DS18B20的讀數據程序
  99. {
  100.         unsigned char i=0;
  101.         unsigned char dat = 0;
  102.         for (i=8;i>0;i--)
  103.         {   
  104.                 DQ = 0;                        //給脈沖信號
  105.                 dat>>=1;
  106.                 DQ = 1;                    //給脈沖信號
  107.                 if(DQ)
  108.                 {
  109.                   dat|=0x80;
  110.                 }
  111.                 delay_18B20(40);
  112.         }
  113.         return(dat);
  114. }

  115. void DS18B20_Write(uchar wdata)   //DS18B20的寫數據程序
  116. {
  117.         unsigned char i=0;
  118.         for (i=8; i>0; i--)
  119.         {
  120.                 DQ = 0;
  121.                 DQ = wdata&0x01;
  122.                 delay_18B20(40);
  123.                 DQ = 1;
  124.                 wdata>>=1;
  125.         }
  126. }

  127. /***************************************************
  128.               讀取溫度值并轉換
  129. ***************************************************/
  130. DS18B20_Read_Temp()
  131. {
  132.         uchar a,b;
  133.         DS18B20_Reset();   
  134.         DS18B20_Write(0xcc);   //跳過讀序列號
  135.         DS18B20_Write(0x44);   //啟動溫度轉換
  136.         DS18B20_Reset();   
  137.         DS18B20_Write(0xcc);   //跳過讀序列號
  138.         DS18B20_Write(0xbe);   //讀取溫度
  139.         a=DS18B20_Read();
  140.         b=DS18B20_Read();
  141.         tvalue=b;
  142.         tvalue<<=8;
  143.         tvalue=tvalue|a;
  144.         if(tvalue<0x0fff)
  145.         {
  146.                 tflag=0;
  147.         }
  148.         else
  149.         {
  150.                 tvalue=~tvalue+1;
  151.                 tflag=1;
  152.         }
  153.         tvalue=tvalue*(0.625); //溫度值擴大10倍,精確到1位小
  154.         return(tvalue);
  155. }

  156. /************************************************************
  157.                                   溫度值顯示
  158. *************************************************************/

  159. void DS18B20_Display()
  160. {   
  161.         uchar flagdat;
  162.         disdata[0]=tvalue/1000+0x30;     //百位數
  163.         disdata[1]=tvalue%1000/100+0x30; //十位數
  164.         disdata[2]=tvalue%100/10+0x30;   //個位數
  165.         disdata[3] = '.';                                 
  166.         disdata[4]=tvalue%10+0x30;                 //小數位
  167.         disdata[5]=0xDF;
  168.         disdata[6]='C';

  169.         Lcd_1602_Display_String(0x80, "Current Temp :");

  170.         if(tflag==0)
  171.         {
  172.     flagdat=0x20;//正溫度不顯示符號
  173.   }              
  174.         else
  175.         {
  176.     flagdat=0x2d;//負溫度顯示負號:-
  177.   }              
  178.         if(disdata[0]==0x30)
  179.         {
  180.                 disdata[0]=0x20;             //如果百位為0,不顯示
  181.                 if(disdata[1]==0x30)
  182.                 {
  183.                         disdata[1]=0x20;         //如果百位為0,十位為0也不顯示
  184.                 }
  185.         }
  186.         Lcd_Write_Com(0xc0);
  187.         Lcd_Write_Dat(flagdat);          //顯示符號
  188.         Lcd_1602_Display_String(0xc1,disdata);
  189. }


  190. /******************************************************
  191.                     主函數
  192. ******************************************************/

  193. void main()
  194. {
  195.         Lcd_Init();                                    //清屏
  196.         while(1)
  197.         {
  198.                 DS18B20_Read_Temp();  //讀取溫度
  199.                 DS18B20_Display();    //顯示
  200.         }
  201. }
復制代碼


18B20溫度測量實驗.zip

99.33 KB, 下載次數: 45, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:695384 發表于 2020-6-20 10:00 | 只看該作者
這是調試成功的代碼嗎
回復

使用道具 舉報

板凳
ID:56932 發表于 2020-6-20 11:53 | 只看該作者
QQ820270087 發表于 2020-6-20 10:00
這是調試成功的代碼嗎

是的,調試完成了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲九九精品 | 成人毛片视频在线播放 | 亚洲欧美中文字幕在线观看 | 一区二区三区视频在线免费观看 | 欧美天堂一区 | 欧美三级电影在线播放 | 天天草天天干 | 欧美精品一区三区 | 在线日韩av电影 | 国产精品1区2区 | 午夜精品久久久久久久久久久久久 | 一区二区三区四区不卡视频 | www操操| 一a一片一级一片啪啪 | 亚洲欧美一区二区三区国产精品 | 国产精品久久久久久久久污网站 | 亚洲第一视频网 | 国产精品揄拍一区二区久久国内亚洲精 | 成人精品一区二区三区中文字幕 | 国产免费福利小视频 | 欧美成人精品欧美一级 | 欧美激情亚洲天堂 | 在线视频中文字幕 | 一区在线免费视频 | 国产日韩欧美在线播放 | 日韩国产三区 | 国产精品福利网站 | 国产精品中文字幕在线观看 | 亚洲激情在线观看 | 91久久久久久久久久久久久 | 91黄在线观看 | 成人高清视频在线观看 | 丁香婷婷综合激情五月色 | 免费特黄视频 | 久久久久99 | 国产成人高清在线观看 | 成人福利影院 | 欧美一级在线观看 | 1000部精品久久久久久久久 | 一区二区三区在线免费 | 欧美 日韩 国产 成人 在线 |