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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DIY_oled顯示屏+ds18b20 顯示溫度和時間 單片機程序

  [復制鏈接]
跳轉到指定樓層
樓主


電路原理圖如下:


單片機源程序如下:
  1. #include "STC15W.H"
  2. #include "iic.h"
  3. //#include "zifu.h"
  4. #include "delay.h"
  5. #include "stdio.h"
  6. #include "intrins.h"
  7. #include "temp.h"

  8. /*******定義時間變量********************/
  9. unsigned int count=0;
  10. unsigned int count1=9;
  11. unsigned int second0;
  12. unsigned int second1;
  13. unsigned int min0;
  14. unsigned int min1;
  15. unsigned int hour0;
  16. unsigned int hour1;
  17. unsigned char s[3];
  18. unsigned char h1[1],h0[1],m1[1],m0[1],s1[1],s0[1];
  19. /****************************************************/


  20. bit flag = 0; //定義秒針閃爍的標志位

  21. /**********************定義溫度的參數變量*****************/
  22. code unsigned char float_tab[16]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//小數表
  23. unsigned int  Display_Digit[]={0,0,0,0};
  24. unsigned char wendu=0;
  25. unsigned char aa,bb;
  26. unsigned char CurrentT=0;
  27. unsigned char Temp_Value[]={0x00,0x00};
  28. unsigned char DS18B20_IS_OK;
  29. unsigned char bai[1],shi[1],ge[1];
  30. /********************************************************/
  31. /*  定時器0的配置**************************************/
  32. void Timer0Init()                //定時50ms出發一次中斷
  33. {
  34.         AUXR &= 0x7F;               
  35.         TMOD &= 0xF0;               
  36.         TL0 = 0x00;               
  37.         TH0 = 0x4C;               
  38.         //TF0 = 0;               
  39.         TR0 = 1;               
  40.         ET0=1;
  41.         EA=1;
  42. }
  43. void TIMER0()  interrupt 1
  44. {
  45.         count++;  //50毫秒觸發一次
  46.         if(count==20) //定時為1秒
  47.         {
  48.                 count=0;second0+=1; flag=~flag;
  49.         }
  50.         if(second0>9)
  51.         {
  52.                 second0=0;second1+=1;
  53.         }
  54.         if(second1>5)
  55.         {
  56.                 second1=0;min0+=1;
  57.         }
  58.         if(min0>9)
  59.         {
  60.                 min0=0;min1+=1;
  61.         }
  62.         if(min1>5)
  63.         {
  64.                 min1=0;hour0+=1;
  65.         }
  66.         if(hour1<2)
  67.         {
  68.                 if(hour0>9)
  69.                 {
  70.                         hour0=0;hour1+=1;
  71.                 }
  72.                
  73.         }
  74.         if(hour1==2)
  75.         {
  76.                 if(hour0>3)
  77.                 {
  78.                         second0=0;second1=0;
  79.                         min0=0;min1=0;
  80.                         hour0=0;hour1=0;
  81.                 }
  82.         }
  83.         
  84.         
  85.         
  86.         
  87.         
  88. }

  89. //讀取溫度        
  90. void Read_Temperature()
  91. {
  92.                 if(Init_DS18B20()==1)
  93.                 DS18B20_IS_OK=0;
  94.                 else
  95.                 {
  96.                         
  97.                 WriteOneByte(0xcc);                          //跳過序列號
  98.                 WriteOneByte(0x44);                           //啟動溫度轉換
  99.                 Init_DS18B20();
  100.                 WriteOneByte(0xcc);
  101.                 WriteOneByte(0xbe);                                //讀取溫度
  102.                 Temp_Value[0] = ReadOneByte();           //低八位
  103.                 Temp_Value[1] = ReadOneByte();           //高八位
  104.                 DS18B20_IS_OK=1;        
  105.                         
  106.                         
  107.                 }
  108.         
  109. }



  110. void main()
  111. {
  112.         

  113.         Timer0Init()        ;
  114.         Initial_M096128x64_ssd1306();
  115.         OLED_CLS();
  116.         Delay_ms(5);
  117.         
  118.         
  119.         while(1)
  120.         {
  121.                
  122.                 Read_Temperature();
  123.         if((Temp_Value[1]&0xf8)==0xf8)                        //判斷高5位,如果都為1則是負數
  124.         {
  125.                  Temp_Value[1] = ~Temp_Value[1];                  //如果為負數。高八位需要取反,第八位需要取反后加1.
  126.                 Temp_Value[0] = ~Temp_Value[0]+1;
  127.                 if(Temp_Value[0]==0x00)
  128.                         Temp_Value[1]++;
  129.                 wendu = 1;
  130.                         
  131.         }
  132.         else{wendu = 0;}
  133.          aa=Temp_Value[0]&0x0f;           //小數點后一位算法
  134.          bb=aa*0.0625*10;
  135.          CurrentT= ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);         //整數值
  136.          Display_Digit[1] = CurrentT/10; //百位          CurrentT%1000/100;
  137.          Display_Digit[2] = CurrentT%10;          //十位          CurrentT%100/10;
  138.          Display_Digit[3] =  bb%10;                  //個位          CurrentT%10;
  139.         
  140.         
  141.                
  142.                 OLED_P8x16Str(0,0,"PARA_SYSTEM-V0");
  143.                
  144.         
  145.                 OLED_ShowCHinese(0,2,0);   //當
  146.                 OLED_ShowCHinese(16,2,1);  //前
  147.                 OLED_ShowCHinese(32,2,2);  //溫
  148.                 OLED_ShowCHinese(48,2,3);  //度
  149.                 OLED_P8x16Str(64,2,":");
  150.                
  151.                 //當溫度為負數的時候,顯示-號
  152.           if(wendu==1)
  153.                 {
  154.                  OLED_P8x16Str(72,2,"-");
  155.                         
  156.                 }
  157.                 else
  158.                 {
  159.                          OLED_P8x16Str(72,2," ");
  160.                 }
  161.                
  162.                
  163.                 sprintf(bai,"%d",Display_Digit[1]);
  164.     OLED_P8x16Str(80,2,bai);
  165.           sprintf(shi,"%d",Display_Digit[2]);
  166.     OLED_P8x16Str(88,2,shi);
  167.                 OLED_P8x16Str(96,2,".");
  168.                 sprintf(ge,"%d",Display_Digit[3]);
  169.     OLED_P8x16Str(104,2,ge);
  170.                
  171.         
  172.                
  173.                 OLED_ShowCHinese(0,4,4);   //時
  174.                 OLED_ShowCHinese(16,4,5);  //間
  175.                 OLED_P8x16Str(32,4,":");
  176.                
  177.                
  178.                
  179.                
  180.                 sprintf(h1,"%d",hour1);
  181.     OLED_P8x16Str(40,4,h1);
  182.                 sprintf(h0,"%d",hour0);
  183.     OLED_P8x16Str(48,4,h0);
  184.                
  185.                 if(flag==1)
  186.                 {
  187.                         OLED_P8x16Str(56,4,":");
  188.                 }
  189.                 else
  190.                 {
  191.                         OLED_P8x16Str(56,4," ");
  192.                 }
  193.                
  194.                 sprintf(m1,"%d",min1);
  195.     OLED_P8x16Str(64,4,m1);
  196.                 sprintf(m0,"%d",min0);
  197.     OLED_P8x16Str(72,4,m0);
  198.                
  199.                 if(flag==1)
  200.                 {
  201.                         OLED_P8x16Str(80,4,":");
  202.                 }
  203.                 else
  204.                 {
  205.                         OLED_P8x16Str(80,4," ");
  206.                 }
  207.                
  208.                 sprintf(s1,"%d",second1);
  209.     OLED_P8x16Str(88,4,s1);
  210.                 sprintf(s0,"%d",second0);
  211.     OLED_P8x16Str(96,4,s0);
  212.                
  213.                
  214.                
  215.                
  216.                 Delay_ms(10);

  217.                
  218.                
  219.         }
  220.         
  221.         
  222.         
  223. }
復制代碼

所有資料51hei提供下載:

Sheet2.rar

4.48 KB, 下載次數: 65, 下載積分: 黑幣 -5

layout示意圖

48bfad32c2118735a4643e2c4bc11d34.rar

1.81 MB, 下載次數: 41, 下載積分: 黑幣 -5

視頻展示效果

app_測試.rar

77.09 KB, 下載次數: 167, 下載積分: 黑幣 -5

程序

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:648535 發表于 2019-11-28 10:44 | 只看該作者
這個函數的作用是什么啊?
回復

使用道具 舉報

板凳
ID:195752 發表于 2019-12-31 16:31 | 只看該作者
學習,正想顯示溫度
回復

使用道具 舉報

地板
ID:605938 發表于 2020-3-16 21:46 | 只看該作者
請問12864的驅動程序是怎么寫啊,能給我個例成和新手能夠看懂的程序嗎,謝謝
回復

使用道具 舉報

5#
ID:125616 發表于 2020-7-20 23:23 | 只看該作者
OLED_P8x16Str  大神請問,這個函數是顯示小數的嗎
回復

使用道具 舉報

6#
ID:401598 發表于 2020-7-22 08:06 | 只看該作者
DIY精神萬歲!
回復

使用道具 舉報

7#
ID:856401 發表于 2021-4-11 22:23 來自手機 | 只看該作者
yuanweilong789 發表于 2020-7-20 23:23
OLED_P8x16Str  大神請問,這個函數是顯示小數的嗎

這個是OLED顯示字符串的,它第一行就是顯示引號里面的字符串
回復

使用道具 舉報

8#
ID:966104 發表于 2021-9-20 08:19 | 只看該作者
正想學習彩屏……。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人av鲁丝片一区二区小说 | 久久久国产一区 | 久久久久亚洲 | 日韩精品免费在线观看 | 国产成人精品一区二区三区 | www312aⅴ欧美在线看 | 国产欧美日韩在线播放 | 日韩在线国产 | 国产a区| 韩国av网站在线观看 | 日韩三级在线 | 一级看片| av手机在线免费观看 | 人人九九精 | 国产1区2区3区 | 人人叉 | 日韩精品一区二区久久 | 亚洲精选一区 | 成人国产精品久久 | 国产亚洲精品久久情网 | 久久久久国产精品 | 日韩综合在线 | 99久久精品一区二区成人 | 国产婷婷色一区二区三区 | 中文在线视频 | 看av片网站 | 久久久久亚洲 | 国产99久久 | 真人一级毛片 | 国产我和子的乱视频网站 | 日韩一区二区三区在线 | 久久精品国产一区二区三区 | 日韩亚洲一区二区 | 高清av在线 | 精品视频在线一区 | 在线一级片 | 欧美日韩一区二区视频在线观看 | 国产欧美日韩精品一区二区三区 | 国产精品亚洲一区 | 一区二区三区国产 | 成人区精品 |