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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc15w單片機ds18b20和tm1637溫度計源程序

  [復制鏈接]
跳轉到指定樓層
樓主
單片機stc15w通用溫度探頭ds18b20  接P3^6
顯示屏tm1637  4位數碼管SCL=P3^1;SDA=P3^0;
晶振11.0592
實測正常 負溫度和100度以上顯示特殊
當溫度大于100度是:        第一位十位   第二位 個位  第三位十分位   第四位顯示A
當溫度大于0小于100度時:第一位十位   第二位 個位  第三位十分位   第四位百分位
當溫度小于0:                  第一位十位   第二位 個位  第三位十分位   第四位顯示-

實測工作電流0.018A 電壓5v  
準備再做一個無線串口通信的溫度計 有興趣的留言

制作出來的實物圖如下:

單片機源程序如下:
  1. //單只DS18B20的溫度檢測,測溫范圍-55 —— +125度。
  2. #include "STC15W4K.H"
  3. #include "DS18b20.h"
  4. #include "myfun.h"
  5. #include "TM1637.h"
  6. unsigned char str[6];                   // 最長字符10字節,比如:-123.4567/0
  7. unsigned char zf;
  8. //****************溫度數據處理函數************************/
  9. void gettemp()                           //讀取溫度值
  10. {                     
  11.          unsigned int temp0,temp;      // 存放小數、整數、符號,10000倍小數值
  12.          temp=DS18B20_ReadTemperature();         // 從18B20中讀取2字節原始溫度值
  13.           
  14.          if ((temp&0xf800)!=0)                   // 如果是負溫,將補碼取反加1變為原碼
  15.          {
  16.                  temp=~temp        +1;
  17.                  zf=1;                 //負值
  18.      temp0=temp*0.0625*100+0.5;       
  19.                 }       
  20.          
  21.          else            //溫度>0
  22.           {       
  23.                         zf=0;                 //正值
  24.                         temp0=temp*0.0625*100+0.5;
  25.                 }
  26.                  str[1]=temp0 / 10000;
  27.                 str[2]=temp0 % 10000 / 1000;
  28.                 str[3]=temp0 % 1000 / 100;
  29.                 str[4]=temp0 % 100 / 10;
  30.                 str[5]=temp0 % 10;               
  31. }
  32. void xsled(void)   //送顯示
  33. {
  34.     SDA=1;
  35.     SCL=1;
  36.     start_IIC(); //調用開始信號
  37.     WriteByte(0x44);//寫命令40H(數據設置)
  38.     stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令

  39.         switch(zf)
  40.         {
  41.                 case 0:    //正值
  42.                              if (str[1]==0)
  43.                                          {
  44.                                          write_LEDSROM(0xC0,xsbcdbuf[str[2]]); //第一個數碼管顯示十位
  45.                        write_LEDSROM(0xC1,xsbcdbuf[str[3]]|0x80);  //第二個數碼管 個位
  46.            write_LEDSROM(0xC2,xsbcdbuf[str[4]]); //第三個數碼管  小數1位
  47.            write_LEDSROM(0xC3,xsbcdbuf[str[5]]);//第四個數碼管  小數2位
  48.                                    }
  49.                                          else
  50.                                          {
  51.                                          write_LEDSROM(0xC0,xsbcdbuf[str[2]]); //第一個數碼管顯示十位
  52.                        write_LEDSROM(0xC1,xsbcdbuf[str[3]]|0x80);  //第二個數碼管 個位
  53.            write_LEDSROM(0xC2,xsbcdbuf[str[4]]); //第三個數碼管  小數1位
  54.            write_LEDSROM(0xC3,xsbcdbuf[11]);//第四個數碼管 顯示 A               
  55.                                          }
  56.                                                  break;
  57.                 case 1:   //負值
  58.                              write_LEDSROM(0xC0,xsbcdbuf[str[2]]); //第一個數碼管顯示 十位
  59.                                    write_LEDSROM(0xC1,xsbcdbuf[str[3]]|0x80);  //第二個數碼管  個位
  60.            write_LEDSROM(0xC2,xsbcdbuf[str[4]]); //第三個數碼管  小數1位       
  61.            write_LEDSROM(0xC3,0x40);//第四個數碼管  -
  62.                                          break;       
  63.         }
  64.    
  65.     IIC_delay();
  66.     start_IIC(); //調用開始信號
  67.     WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據低三位調節。//顯示亮度
  68.     stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
  69. }
  70. void port_mode()            // 端口模式
  71. {
  72.         P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
  73.         P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
  74. }
  75. void main()
  76. {
  77.         unsigned char *s="Now temp is:";
  78.         port_mode();                      // 所有IO口設為準雙向弱上拉方式。
  79.         DS18B20_SetResolution(3);     // 設置DS18B20的分辨率為12位(默認值,新器件可以不作任何設置)
  80.         while(1)
  81.         {               
  82.                 gettemp();
  83.                 xsled();
  84.                 delay60us();
  85.         }
  86. }
復制代碼

所有資料51hei提供下載:
TM1637&18b20測溫.zip (74.03 KB, 下載次數: 200)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:995171 發表于 2021-12-25 19:34 | 只看該作者
兄弟,我手上有個TM1650的模塊,數碼管是共陰的,用你這程序的話要怎么改?
回復

使用道具 舉報

板凳
ID:408809 發表于 2022-11-17 14:35 | 只看該作者
哈哈......咋們用的同一款手機
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区在线 | av在线电影网站 | 国产免费一区二区 | 中文字幕乱码视频32 | 91久久精品 | 97视频在线观看网站 | 国产第二页 | 久久精品国产一区二区三区不卡 | 97免费视频在线观看 | 日日摸夜夜添夜夜添精品视频 | 一区二区视频在线 | 精品一区二区三区电影 | 色资源在线观看 | 亚洲天堂中文字幕 | 97精品视频在线 | 精品九九 | 欧美一区二区三区在线观看视频 | 成人免费视频观看视频 | 欧美日韩一卡 | 日韩在线不卡 | 中文字幕一区二区三区四区 | 精品视频一区二区 | 视频一区在线观看 | 国产69精品久久99不卡免费版 | 日韩精品一区二区三区在线观看 | 在线视频中文字幕 | 男女视频在线免费观看 | 精品日韩在线 | 亚洲一级在线 | 国产剧情一区 | 欧美三区在线观看 | 成人午夜免费网站 | 深夜福利影院 | 久久综合色综合 | www.国产一区 | 日本欧美黄色片 | 伊人在线 | 亚洲精品一区二区三区 | 欧美日韩综合视频 | 欧美色偷拍 | 毛片a级毛片免费播放100 |