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

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

QQ登錄

只需一步,快速開(kāi)始

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

DS18B20測(cè)溫1602液晶屏顯示(已通過(guò),帶proteus仿真和源碼)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

仿真工程文件及所有完整程序等資料下載地址:
http://www.zg4o1577.cn/bbs/dpj-56304-1.html

單片機(jī)源程序:
  1. #include <at89x51.h>//用AT89C51時(shí)就用這個(gè)頭文件
  2. //#include <reg52.h>//用華邦W78E58B時(shí)必須用這個(gè)頭文件
  3. #include <absacc.h>
  4. #include <ctype.h>
  5. #include <math.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <DS18B20.h>
  9. #include "LCD1602.h"                        ////液晶顯示頭文件
  10. //sbit DQ = P3^4;                                        //定義DQ引腳為P3.4
  11. unsigned char t[2],*pt;                                //用來(lái)存放溫度值,測(cè)溫程序就是通過(guò)這個(gè)數(shù)組與主函數(shù)通信的
  12. unsigned char  TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};
  13.                                                                 //顯示實(shí)時(shí)溫度,上電時(shí)顯示+125.00C
  14. unsigned char  TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,
  15.                                                                 0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};
  16.                                                                 //顯示溫度上下限,上電時(shí)顯示TH:+125 TL:+124C                                                        
  17. unsigned char code dotcode[4]={0,25,50,75};
  18. /***因顯示分辨率為0.25,但小數(shù)運(yùn)算比較麻煩,故采用查表的方法*******
  19. 再將表值分離出十位和個(gè)位后送到十分位和百分位********************/


  20. void covert0( unsigned char TH, unsigned char TL)        //將溫度上下限轉(zhuǎn)換為L(zhǎng)CD顯示的數(shù)據(jù)
  21. {
  22.    if(TH>0x7F)                    //判斷正負(fù),如果為負(fù)溫,將其轉(zhuǎn)化為其絕對(duì)值
  23.    {
  24.     TempBuffer0[3]=0x2d;             //0x2d為"-"的ASCII碼
  25.         TH=~TH;
  26.         TH++;
  27.    }
  28.    else TempBuffer0[3]=0x2b;        //0x2B為"+"的ASCII碼

  29.    if(TL>0x7f)
  30.    {
  31.    TempBuffer0[11]=0x2d;             //0x2d為"-"的ASCII碼
  32.    TL=~TL+1;
  33.    }
  34.    else TempBuffer0[11]=0x2b;        //0x2B為"+"的ASCII碼

  35.   TempBuffer0[4]=TH/100+0x30;                             //分離出TH的百十個(gè)位
  36.   if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位數(shù)消隱
  37.   TempBuffer0[5]=(TH%100)/10+0x30;                                //分離出十位
  38.   TempBuffer0[6]=(TH%100)%10+0x30;                                 //分離出個(gè)位
  39.   TempBuffer0[12]=TL/100+0x30;                             //分離出TL的百十個(gè)位
  40.   if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位數(shù)消隱
  41.   TempBuffer0[13]=(TL%100)/10+0x30;                                //分離出十位
  42.   TempBuffer0[14]=(TL%100)%10+0x30;                                 //分離出個(gè)位
  43. }


  44. void covert1(void)        //將溫度轉(zhuǎn)換為L(zhǎng)CD顯示的數(shù)據(jù)
  45. {
  46.    unsigned char x=0x00,y=0x00;
  47.    t[0]=*pt;
  48.    pt++;
  49.    t[1]=*pt;
  50.    if(t[1]>0x07)                    //判斷正負(fù)溫度
  51.    {
  52.     TempBuffer1[0]=0x2d;             //0x2d為"-"的ASCII碼
  53.         t[1]=~t[1];                         /*下面幾句把負(fù)數(shù)的補(bǔ)碼*/
  54.         t[0]=~t[0];                  /* 換算成絕對(duì)值*********/
  55.         x=t[0]+1;                                 /***********************/
  56.         t[0]=x;                                         /***********************/
  57.         if(x>255)                /**********************/
  58.         t[1]++;                                 /*********************/
  59.    }
  60.    else TempBuffer1[0]=0x2b;        //0xfe為變"+"的ASCII碼
  61.   t[1]<<=4;                //將高字節(jié)左移4位
  62.   t[1]=t[1]&0x70;                //取出高字節(jié)的3個(gè)有效數(shù)字位
  63.   x=t[0];                                        //將t[0]暫存到X,因?yàn)槿⌒?shù)部分還要用到它
  64.   x>>=4;                                        //右移4位
  65.   x=x&0x0f;                                        //和前面兩句就是取出t[0]的高四位        
  66.   t[1]=t[1]|x;                        //將高低字節(jié)的有效值的整數(shù)部分拼成一個(gè)字節(jié)
  67.   TempBuffer1[1]=t[1]/100+0x30;                             //+0x30 為變 0~9 ASCII碼
  68.    if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe; //百位數(shù)消隱
  69.   TempBuffer1[2]=(t[1]%100)/10+0x30;                                //分離出十位
  70.   TempBuffer1[3]=(t[1]%100)%10+0x30;                                 //分離出個(gè)位
  71.   t[0]=t[0]&0x0c;                                                        //取有效的兩位小數(shù)
  72.   t[0]>>=2;                                                                        //左移兩位,以便查表
  73.   x=t[0];                                                                                
  74.   y=dotcode[x];                                                                        //查表?yè)Q算成實(shí)際的小數(shù)
  75.   TempBuffer1[5]=y/10+0x30;                                                        //分離出十分位
  76.   TempBuffer1[6]=y%10+0x30;                                                        //分離出百分位
  77. }                        

  78. void delay(unsigned char i)
  79. {
  80.         while(i--);
  81. }

  82. main()
  83. {
  84. unsigned char TH=110,TL=-20;                                            //下一步擴(kuò)展時(shí)可能通過(guò)這兩個(gè)變量,調(diào)節(jié)上下限
  85.                                                                                 //測(cè)溫函數(shù)返回這個(gè)數(shù)組的頭地址
  86. while(1)
  87. {        
  88.     pt=ReadTemperature(TH,TL,0x3f);                 //上限溫度-22,下限-24,分辨率10位,也就是0.25C
  89.                                                                                  //讀取溫度,溫度值存放在一個(gè)兩個(gè)字節(jié)的數(shù)組中,
  90.         delay(100);
  91.         covert1();
  92.         covert0(TH,TL);
  93.         LCD_Initial();                                                        //第一個(gè)參數(shù)列號(hào),第二個(gè)為行號(hào),為0表示第一行
  94.                                                                                         //為1表示第二行,第三個(gè)參數(shù)為顯示數(shù)據(jù)的首地址
  95.         LCD_Print(0,0,TempBuffer0);        
  96.         LCD_Print(0,1,TempBuffer1);                                 
  97. }
  98. }
  99.   


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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:72088 發(fā)表于 2016-10-10 07:29 | 只看該作者
好東西,贊,我搞過(guò)一個(gè),負(fù)溫度設(shè)定沒(méi)做好,正溫度設(shè)置調(diào)整正常
回復(fù)

使用道具 舉報(bào)

板凳
ID:567279 發(fā)表于 2019-6-20 22:59 | 只看該作者
請(qǐng)問(wèn)有沒(méi)有大神會(huì)把LCD的程序改成LED數(shù)碼管顯示的程序
回復(fù)

使用道具 舉報(bào)

地板
ID:567279 發(fā)表于 2019-6-20 23:22 | 只看該作者
有大神會(huì)把LCD顯示的程序改成LED顯示的程序嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:906689 發(fā)表于 2021-4-16 14:35 | 只看該作者
大佬,如果再加一個(gè)HS1101和NE555組成的一個(gè)濕度檢測(cè)電路,程序應(yīng)該怎么沒(méi)寫
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频久久 | 亚洲高清一区二区三区 | 日韩成人在线网址 | 91美女视频 | 欧美久久久久久 | 91综合网 | 99精品视频一区二区三区 | 欧美一级久久 | 精品久久久999 | 一区二区三区四区免费观看 | 日韩欧美亚洲 | 亚洲一区视频 | 日本久久网 | 亚洲视频一区二区三区 | 久久久久亚洲精品 | 亚洲国产精品一区二区久久 | 久久久久久亚洲国产精品 | 午夜成人免费视频 | 日韩精品一区二区三区中文在线 | 久久久久久国产 | 日韩精品1区2区3区 成人黄页在线观看 | av在线免费观看网址 | 亚洲精品视频在线看 | 精品一区在线 | 久久综合久久综合久久 | 欧美一级欧美三级在线观看 | 国产成人在线播放 | 欧美日一区 | 三级黄色片在线播放 | 亚洲欧洲精品一区 | 日韩不卡一区二区三区 | 中文一区二区 | 国产精品久久av | 999视频 | 欧美又大粗又爽又黄大片视频 | 国产一在线观看 | 91精品国产91久久久久久最新 | 中文字幕高清av | 欧美在线一区二区三区 | 超碰97人人人人人蜜桃 | 精品1区|