欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: ds18b20 lcd1602顯示單片機源代碼 [打印本頁]

作者: LJT520    時間: 2017-3-22 19:42
標題: ds18b20 lcd1602顯示單片機源代碼
ds18b20 lcd1602顯示



單片機源代碼:
  1. # include <reg52.h>
  2. # include <intrins.h>
  3. # define uchar unsigned char
  4. # define uint unsigned int            //宏定義

  5. void delay_50us(uint t);                   //延時函數(shù)
  6. void write_com(uchar com);         //LCD寫指令函數(shù)
  7. void write_data(uchar dat);        //LCD寫數(shù)據(jù)函數(shù)
  8. void init(void);                               //LCD初始化函數(shù)
  9. void write_one_byte(uchar dat);    //向DS18B20寫入一個字節(jié)
  10. uchar  read_one_byte();             //從DS18B20讀出一字節(jié)
  11. void init_ds18b20();               //DS18b20初始化


  12. sbit rs=P2^6;
  13. sbit rw=P2^5;
  14. sbit e=P2^7;
  15. sbit DQ=P3^7;                   //定義按鍵

  16. uchar temph,templ;                   //申明溫度變量
  17. uchar array[4];                                   //申明數(shù)組變量


  18. void delay_50us(uint t)                   //延時函數(shù)
  19. {
  20.         uchar j;
  21.         for(;t>0;t--)
  22.         for(j=6245;j>0;j--);
  23. }

  24. void write_com(uchar com)        //LCD寫指令函數(shù)
  25. {
  26.         e=0;
  27.         rs=0;
  28.         rw=0;
  29.         P0=com;
  30.         delay_50us(10);
  31.         e=1;
  32.         delay_50us(20);
  33.         e=0;        
  34. }

  35. void write_data(uchar dat)      //LCD寫數(shù)據(jù)函數(shù)
  36. {
  37.         e=0;
  38.         rs=1;
  39.         rw=0;
  40.         P0=dat;
  41.         delay_50us(10);
  42.         e=1;
  43.         delay_50us(20);
  44.         e=0;        
  45. }

  46. void init(void)                        //LCD初始化函數(shù)
  47. {
  48.         delay_50us(300);        
  49.         write_com(0x38);
  50.         delay_50us(100);
  51.         write_com(0x38);
  52.         delay_50us(100);
  53.         write_com(0x38);
  54.         write_com(0x38);
  55.                
  56.     write_com(0x08);
  57.         write_com(0x01);
  58.         write_com(0x06);
  59.         write_com(0x0c);
  60. }

  61. void init_ds18b20()        //DS18b20初始化
  62. {
  63.         uint i,q;
  64.         DQ=1;
  65.         _nop_();
  66.         DQ=0;
  67.         i=70;
  68.         while(i--);
  69.         DQ=1;
  70.         i=0;
  71.         q=DQ;
  72.         delay_50us(2);
  73. }

  74. void write_one_byte(uchar dat)//向DS18B20寫入一個字節(jié)
  75. {
  76.         uint i, j;
  77.         for(j=0; j<8; j++)
  78.         {
  79.                 DQ=0;         
  80.                 i++;
  81.                 DQ=dat&0x01;  
  82.                 i=6;
  83.                 while(i--);
  84.                 DQ=1;        
  85.                 dat >>= 1;
  86.         }

  87. }

  88. uchar  read_one_byte()//從DS18B20讀出一字節(jié)
  89. {
  90.         uchar dat;
  91.         uint i, j;        
  92.         for(j=8; j>0; j--)
  93.         {
  94.                 DQ=0;                        //每寫入一位數(shù)據(jù)之前先把總線拉低1us
  95.                 i++;
  96.                 DQ=dat&0x01; //然后寫入一個數(shù)據(jù),從最低位開始
  97.                 i=6;
  98.                 while(i--); //延時68us,持續(xù)時間最少60us
  99.                 DQ=1;        //然后釋放總線,至少1us給總線恢復時間才能接著寫入第二個數(shù)值
  100.                 dat>>=1;
  101.         }                                
  102.         return dat;
  103. }


  104. void main()                                           //主函數(shù)
  105. {
  106.         int TEMP;                                   //聲明溫度變量
  107.         init();                                           //液晶初始化

  108.         while(1)
  109.         {
  110.         
  111.                         init_ds18b20();                         //ds18b20初始化
  112.                         write_one_byte(0xcc);         //跳過ROM操作命令
  113.                         write_one_byte(0x44);         //溫度轉(zhuǎn)換命令
  114.                         init_ds18b20();                         //ds18b20初始化
  115.                         write_one_byte(0xcc);         //跳過ROM操作命令
  116.                         write_one_byte(0xbe);         //發(fā)送讀取溫度命令
  117.                         templ=read_one_byte();         //讀取溫度值共16位,先讀低字節(jié)
  118.                         temph=read_one_byte();         //再讀高字節(jié)
  119.                         TEMP=temph;                                 //高8位賦予返回值
  120.                         TEMP <<= 8;                                 //左移8位
  121.                         TEMP|=templ;                         //與低8位
  122.                         if((temph&0xf8)==0xf8)         //如果高8位為0
  123.                         {
  124.                                 write_com(0x80+0x00);        //寫地址 80表示初始地址
  125.                         write_data('-');                //顯示負號
  126.                                 TEMP=TEMP-1;
  127.                                 TEMP=~TEMP;                                //負數(shù)的補碼是原碼取反,然后再加1。

  128.                         }
  129.                         else                                                  
  130.                         {
  131.                                 write_com(0x80+0x00);  //寫地址 80表示初始地址
  132.                         write_data('+');                //顯示+
  133.                         }
  134.         
  135.                         TEMP=TEMP*0.0625*10+0.5;           //留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉(zhuǎn)換為整型的時候把小數(shù)點
  136.                                                  //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  137.                                                 //算由?.5,還是在小數(shù)點后面。
  138.                         array[0]=TEMP/1000;                    //百位
  139.                         array[1]=(TEMP%1000)/100;        //十位
  140.                         array[2]=(TEMP%100)/10;            //個位
  141.                         array[3]=TEMP%10;                        //小數(shù)
  142.                


  143. …………余下代碼請下載附件…………  

復制代碼

下載:
ds18b20顯示溫度.zip (22.03 KB, 下載次數(shù): 49)


作者: guo1373766226    時間: 2017-12-12 22:30
新人學習,下載看看。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1