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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC89C52+DS18B20+共陰四位數碼管 溫度顯示

  [復制鏈接]
跳轉到指定樓層
樓主
ID:56331 發表于 2016-8-2 09:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用的是STC89C52單片機,圖中四個非門是相當于四個三極管,在仿真中閑麻煩就用非門代替。




實際效果










  1. #include<reg52.h>
  2. #include<intrins.h>
  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;
  5. uchar code table[]             =   {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

  6. uchar code Temperature_Char[8] =   {0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};
  7.                                                                   
  8. uchar code df_Table[]          =   {0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};

  9. uchar code wei[]               =   {0x01,0x02,0x04,0x08};

  10. sbit DQ = P3^7;
  11. sbit digt1=P2^0;
  12. sbit digt2=P2^1;
  13. sbit digt3=P2^2;
  14. sbit digt4=P2^3;
  15. uchar DS18B20_IS_OK;
  16. uchar CurrentT = 0;
  17. uchar Temp_Value[]={0x00,0x00};
  18. uchar Display_Digit[]={0,0,0,0};
  19. void delayus(uint us)
  20. {
  21.          while(--us);
  22. }
  23. void delay(uint ms)
  24. {
  25.          uchar i;
  26.         while(ms--)
  27.         {
  28.                  for(i=0;i<120;i++);
  29.         }
  30. }
  31. uchar Init_DS18B20()                        //18B20初始化
  32. {
  33.          uchar status;
  34.         DQ = 1;                                         //總線拉高
  35.         delayus(8);                         // 12MHz晶振,20us左右
  36.         DQ = 0;                                         
  37.         delayus(90);                        //720us左右
  38.         DQ = 1;                                        //釋放總線
  39.         delayus(8);
  40.         status=DQ;
  41.         delayus(20);                         //160us左右
  42.         DQ=1;
  43.         return status;
  44. }

  45. uchar ReadOneByte()
  46. {
  47.          uchar i,dat=0;
  48.         DQ = 1;
  49.         _nop_();
  50.         for(i=0;i<8;i++)
  51.         {
  52.                  DQ = 0;
  53.                 _nop_();_nop_();
  54.                 dat >>= 1;
  55.                 DQ = 1;
  56.                 _nop_();
  57.                 _nop_();
  58.                 if(DQ)
  59.                         dat |= 0X80;
  60.                 delayus(30);
  61.                 DQ = 1;
  62.         }
  63.         return dat;
  64. }

  65. void WriteOneByte(uchar dat)                  //18B20寫數據
  66. {
  67.          uchar i;
  68.         for(i=0;i<8;i++)
  69.         {
  70.                  DQ = 0;
  71.                 DQ = dat& 0x01;
  72.                 delayus(3);
  73.                 DQ = 1;
  74.                 dat >>= 1;                //右移一位
  75.         }
  76. }

  77. void Read_Temperature()                          //讀取溫度
  78. {
  79.          if(Init_DS18B20()==1)
  80.                 DS18B20_IS_OK=0;
  81.         else
  82.         {
  83.                 WriteOneByte(0xcc);                          //跳過序列號
  84.                 WriteOneByte(0x44);                           //啟動溫度轉換
  85.                 Init_DS18B20();
  86.                 WriteOneByte(0xcc);
  87.                 WriteOneByte(0xbe);                                //讀取溫度
  88.                 Temp_Value[0] = ReadOneByte();           //低八位
  89.                 Temp_Value[1] = ReadOneByte();           //高八位
  90.                 DS18B20_IS_OK=1;        
  91.         }        
  92. }

  93. void Display_Temperature()
  94. {

  95.         uchar t = 150, ng =0xff,  a ,  b;
  96.         if((Temp_Value[1]&0xf8)==0xf8)                        //判斷高5位,如果都為1則是負數
  97.         {
  98.                  Temp_Value[1] = ~Temp_Value[1];                  //如果為負數。高八位需要取反,第八位需要取反后加1.
  99.                 Temp_Value[0] = ~Temp_Value[0]+1;
  100.                 if(Temp_Value[0]==0x00)
  101.                         Temp_Value[1]++;
  102.                 ng = 10;
  103.                         
  104.         }

  105.          a=Temp_Value[0]&0x0f;           //小數點后一位算法
  106.          b=a*0.0625*10;

  107.         /*----0度以上的數值顯示-----*/
  108.          Display_Digit[0]=ng;
  109.         CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);         //整數值
  110.         Display_Digit[1] = CurrentT/10; //百位          CurrentT%1000/100;
  111.         Display_Digit[2] = CurrentT%10;          //十位          CurrentT%100/10;
  112.         Display_Digit[3] =  b%10;                  //個位          CurrentT%10;

  113.         
  114.         }
  115. void display(uchar ge,uchar shi,uchar bai,uchar fu)    //數碼管掃描
  116. {
  117.         P2=0X00;
  118.         delayus(30);

  119.         if(table[fu]==0x40)            ////////
  120.         {
  121.                 digt1=1;                //不加NPN三級管位驅動需要取反
  122.         }
  123.         else
  124.         {
  125.            digt1=0;                            //加NPN三級管位驅動需要取反
  126.         }

  127.         P0=table[fu];
  128.         delay(3);
  129.         digt1=0;                    //不加NPN三級管位驅動需要取反
  130.                                                          
  131.                 if(table[bai]==0x3f)
  132.         {        
  133.                 digt2=0;                //不加NPN三級管位驅動需要取反
  134.         }                          
  135.         else
  136.         {
  137.                 digt2=1;                //不加NPN三級管位驅動需要取反
  138.         }

  139.         P0=table[bai];         
  140.         delay(3);               
  141.         digt2=0;         //不加NPN三級管位驅動需要取反

  142.         digt3=1;         //不加NPN三級管位驅動需要取反

  143.         P0=table[shi]+0X80;
  144.         delay(3);           
  145.         digt3=0;   //不加NPN三級管位驅動需要取反

  146.         digt4=1;    //不加NPN三級管位驅動需要取反
  147.         P0=table[ge];
  148.         delay(3);
  149.         digt4=0;    //不加NPN三級管位驅動需要取反
  150.    

  151. }
  152. void main()
  153. {
  154.     P0=0XFF;
  155.     P2=0X00;
  156. //        delayus(10);
  157.         Read_Temperature();
  158.         delay(500);

  159.         delay(500);

  160.         while(1)
  161.         {        
  162.                 display(Display_Digit[3],Display_Digit[2],Display_Digit[1],Display_Digit[0]);
  163.                  Read_Temperature();
  164.                 if(DS18B20_IS_OK)
  165.                         Display_Temperature();
  166.                 delayus(3);        
  167.         
  168.         }

  169. }
復制代碼



全部資料51hei下載地址:
數碼管溫度顯示.zip (54.94 KB, 下載次數: 180)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:108622 發表于 2016-10-12 19:22 來自觸屏版 | 只看該作者
能顯示低溫嗎
回復

使用道具 舉報

板凳
ID:56331 發表于 2016-11-29 16:46 | 只看該作者

實時顯示溫度
回復

使用道具 舉報

地板
ID:207497 發表于 2017-6-5 22:30 | 只看該作者
這里面有protues仿真嗎?
回復

使用道具 舉報

5#
ID:207497 發表于 2017-6-9 17:40 | 只看該作者
這個是實時顯示溫度嗎,為什么我用你的hex還是和你一樣的溫度呢
回復

使用道具 舉報

6#
ID:84492 發表于 2018-9-13 10:11 | 只看該作者
謝謝分享
回復

使用道具 舉報

7#
ID:256289 發表于 2018-11-17 20:38 | 只看該作者
感謝分享
回復

使用道具 舉報

8#
ID:424506 發表于 2019-2-22 23:29 | 只看該作者
你好 我想咨詢下你是使用的PNP三極管 還是NPN三極管
回復

使用道具 舉報

9#
ID:424506 發表于 2019-2-23 08:46 | 只看該作者
我想問一下 你的NPN三極管如何在電路中接線的 求回復 謝謝了
回復

使用道具 舉報

10#
ID:343102 發表于 2019-2-23 10:28 | 只看該作者
謝謝分享!
回復

使用道具 舉報

11#
ID:424506 發表于 2019-4-27 15:48 | 只看該作者
感謝分享
回復

使用道具 舉報

12#
ID:522050 發表于 2019-4-27 17:43 來自觸屏版 | 只看該作者
感謝分享
回復

使用道具 舉報

13#
ID:554057 發表于 2019-6-15 01:14 來自觸屏版 | 只看該作者
感謝分享
回復

使用道具 舉報

14#
ID:564693 發表于 2019-6-17 15:58 來自觸屏版 | 只看該作者
感謝分享
回復

使用道具 舉報

15#
ID:424506 發表于 2020-10-16 16:36 | 只看該作者
共陰數碼管 CA
回復

使用道具 舉報

16#
ID:831210 發表于 2020-10-17 23:31 | 只看該作者
ttwwtt 發表于 2017-6-5 22:30
這里面有protues仿真嗎?

有的,proteus畫好了
回復

使用道具 舉報

17#
ID:255559 發表于 2020-10-20 13:29 | 只看該作者
你好。如果把數碼管換成共陽的,只修改段碼行不行,單片機驅動共陰管亮度好像不理想
回復

使用道具 舉報

18#
ID:337139 發表于 2020-10-20 17:40 | 只看該作者
溫度顯示的范圍可以更寬一點的。
回復

使用道具 舉報

19#
ID:283883 發表于 2021-1-1 19:44 | 只看該作者
您好,為什么仿真通過,但我實物搭建出來不行呢,沒搭錯。謝謝!
回復

使用道具 舉報

20#
ID:926496 發表于 2021-5-28 14:05 | 只看該作者
周栩樂 發表于 2021-1-1 19:44
您好,為什么仿真通過,但我實物搭建出來不行呢,沒搭錯。謝謝!

串口要改的,而且他是共陰的
回復

使用道具 舉報

21#
ID:143767 發表于 2021-5-28 15:52 | 只看該作者
你好樓主,能顯示負溫度嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品免费在线观看 | 一区二区三区视频在线观看 | 福利av在线 | 午夜精品久久久久久久 | 一区二区在线不卡 | 国产精品视频导航 | 91在线精品视频 | 久久精品网 | 夜夜艹 | 福利片在线观看 | 中文字幕成人在线 | 中文字幕亚洲视频 | 性高湖久久久久久久久3小时 | 黄a在线观看 | 日韩福利在线观看 | 国产免费让你躁在线视频 | 一区二区三区中文字幕 | 一区二区三区在线免费看 | 精品国产乱码久久久久久蜜柚 | 黑人性hd| 欧美综合久久久 | 欧美极品视频在线观看 | 欧美日韩精品一区二区三区四区 | av资源中文在线天堂 | 久久久人| 中文字幕国产一区 | 在线日韩不卡 | 久久大| av大片在线观看 | 日批免费看 | 久久久久中文字幕 | 久久久久久久久久久丰满 | 美女久久| 综合国产| 一区二区三区免费观看 | 黄色毛片在线播放 | 欧美日韩视频在线 | 日韩网站免费观看 | 视频在线一区二区 | 国产激情视频网站 | 国产91在线 | 欧美 |