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

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

QQ登錄

只需一步,快速開始

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

12864 ds1302時(shí)間和ds18b20溫度仿真圖+源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
12864液晶ds1302時(shí)間和ds18b20溫度程序仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include <ds18b20.h>
  3. #include <word.h>
  4. #include <12864display.h>
  5. #include <ds1302.h>

  6. //聲明外部溫度讀數(shù)數(shù)組
  7. extern unsigned char data temperature[2];
  8. //聲明外部高低溫報(bào)警
  9. extern char Alarm_Temp_HL[2];

  10. //存放分解的7個(gè)ASCII碼溫度數(shù)據(jù)  
  11. unsigned char temp[7];

  12. bit HI_Alarm = 0,LO_Alarm = 0;         //高溫低溫報(bào)警標(biāo)志位
  13. sbit HI_LED = P1^4;                                    //高溫報(bào)警燈
  14. sbit LO_LED = P1^5;                                    //低溫報(bào)警燈
  15. sbit BUZZER = P2^6;                                    //喇叭
  16. sbit button = P1^0;                                    //按鈕切換顯示

  17. sbit button_shi=P1^1;                         //調(diào)節(jié)時(shí)
  18. sbit button_fen=P1^2;                         //分
  19. sbit button_miao=P1^3;                         //秒
  20. sbit button_year=P1^6;                         //年
  21. sbit button_month=P1^7;                         //月
  22. sbit button_day=P3^0;                         //日
  23. sbit button_week=P3^7;                         //星期
  24. //按鈕的7個(gè)變量
  25. unsigned char count1,count2,count3,count4,count5,count6,count7;

  26. //根據(jù)輸入的tem在12864的第1行的pos位置顯示相應(yīng)的0~9
  27. void trans(unsigned char hang,unsigned char tem,unsigned int pos)
  28. {
  29.         switch(tem)
  30.         {
  31.                 case '0':vShowOneChar(hang,pos,uca_0);break;
  32.                 case '1':vShowOneChar(hang,pos,uca_1);break;
  33.                 case '2':vShowOneChar(hang,pos,uca_2);break;
  34.                 case '3':vShowOneChar(hang,pos,uca_3);break;
  35.                 case '4':vShowOneChar(hang,pos,uca_4);break;
  36.                 case '5':vShowOneChar(hang,pos,uca_5);break;
  37.                 case '6':vShowOneChar(hang,pos,uca_6);break;
  38.                 case '7':vShowOneChar(hang,pos,uca_7);break;
  39.                 case '8':vShowOneChar(hang,pos,uca_8);break;
  40.                 case '9':vShowOneChar(hang,pos,uca_9);break;
  41.                 default:break;
  42.         }
  43. }

  44. //l2864顯示
  45. void display()          
  46. {
  47.          unsigned char temp_data,temp_data2;
  48.          unsigned int TempDec;        //用來存放4位小數(shù)
  49.          temp_data = temperature[1]&0xf8;//取高5位
  50.                 
  51.          if (temp_data==0xf8)        //負(fù)溫度讀數(shù)
  52.          {       
  53.                 temperature[0]=~temperature[0]+1;
  54.                 temperature[1]=~temperature[1];
  55.                 if (temperature[0]==0x00)
  56.                         temperature[1]++;
  57.                 temp_data = (temperature[1]&0x07)<<4;                //取高字節(jié)低3位(溫度讀數(shù)高3位)       
  58.             temp_data2 = (temperature[0]&0xf0)>>4;        //取低字節(jié)高4位(溫度讀數(shù)低4位)
  59.             temp_data= temp_data|temp_data2;        //組合成完整數(shù)據(jù)                       
  60.                 if(temp_data>=Alarm_Temp_HL[1])
  61.                 {
  62.                         TF0=1;
  63.                         LO_Alarm=1;
  64.                         HI_Alarm=0;
  65.                 }
  66.                 else
  67.                 {
  68.                         TF0=1;
  69.                         LO_Alarm=0;
  70.                         HI_Alarm=0;
  71.                 }
  72.                 vShowOneChar(0,40,uca_fu);
  73.         }
  74.          else
  75.          {
  76.                 temp_data = (temperature[1]&0x07)<<4;                //取高字節(jié)低3位(溫度讀數(shù)高3位)       
  77.             temp_data2 = (temperature[0]&0xf0)>>4;        //取低字節(jié)高4位(溫度讀數(shù)低4位)
  78.             temp_data= temp_data|temp_data2;        //組合成完整數(shù)據(jù)
  79.                 if(temp_data>=Alarm_Temp_HL[0])
  80.                 {
  81.                     TF0=1;
  82.                         HI_Alarm=1;
  83.                         LO_Alarm=0;
  84.                 }
  85.                 else
  86.                 {
  87.                         TF0=1;
  88.                         HI_Alarm=0;
  89.                         LO_Alarm=0;
  90.                 }
  91.                  vShowOneChar(0,40,uca_zheng);
  92.          }

  93.         temp[0] = temp_data/100+0x30;                 //取百位轉(zhuǎn)換為ASCII碼
  94.         temp[1] = (temp_data%100)/10+0x30;         //取十位轉(zhuǎn)換為ASCII碼
  95.         temp[2] = (temp_data%100)%10+0x30;         //取個(gè)位轉(zhuǎn)換為ASCII碼

  96.         temperature[0]&=0x0f;                                 //取小數(shù)位轉(zhuǎn)換為ASCII碼
  97.         TempDec = (temperature[0]*0.0625)*10000;//小數(shù)部分,擴(kuò)大1萬倍,1/16,最低分辨率 取四位小數(shù)

  98.         temp[3]        = TempDec/1000+0x30;                 //取小數(shù)個(gè)位轉(zhuǎn)換為ASCII碼
  99.         temp[4]        = (TempDec%1000)/100+0x30;         //取小數(shù)十位轉(zhuǎn)換為ASCII碼
  100.         temp[5]        = ((TempDec%1000)%100)/10+0x30;//取小數(shù)百位轉(zhuǎn)換為ASCII碼
  101.         temp[6] = ((TempDec%1000)%100)%10+0x30;//取小數(shù)千位轉(zhuǎn)換為ASCII碼

  102.         trans(0,temp[0],48);
  103.         trans(0,temp[1],56);
  104.         trans(0,temp[2],64);
  105.         vShowOneChar(0,72,uca_dian); //小數(shù)點(diǎn)
  106.         trans(0,temp[3],80);
  107.         trans(0,temp[4],88);
  108.         trans(0,temp[5],96);
  109.         trans(0,temp[6],104);
  110. }

  111. //中斷,溫度過高過低對(duì)應(yīng)的燈亮
  112. void T0_INT() interrupt 1
  113. {
  114.         TF0=0;
  115.         if(HI_Alarm)
  116.         {
  117.                 HI_LED=0;
  118.                 BUZZER=1;
  119.         }
  120.         else
  121.         {
  122.                 HI_LED=1;
  123.         }
  124.         if(LO_Alarm)
  125.         {
  126.                 LO_LED=0;
  127.                 BUZZER=1;
  128.         }
  129.         else
  130.         {
  131.                 LO_LED=1;
  132.         }
  133. }

  134. void show_time(unsigned char time,unsigned char hang,unsigned char pos1,unsigned char pos2)
  135. {
  136.         unsigned char i,j;
  137.         i=time/10+0x30;
  138.         j=time%10+0x30;
  139.         trans(hang,i,pos1);
  140.         trans(hang,j,pos2);
  141. }

  142. //主函數(shù)
  143. void main()
  144. {
  145.         unsigned char shi,fen,miao,year,month,day,week;
  146.         DS1820_Reset();//DS1820初始化
  147.         Set_Alarm_Temp_Value();
  148.         IE=0x82;TMOD=0x02;        //開中斷
  149.         vLCDInitialize();       
  150.         delay100us();
  151.         while(button==1)
  152.         {
  153.                  vShowOneChin(6,16,uca_kb);
  154.                 vShowOneChin(6,32,uca_kb);
  155.                 vShowOneChin(6,80,uca_kb);
  156.                 vShowOneChin(6,96,uca_kb);

  157.                 vShowOneChin(4,32,uca_kb);
  158.                 vShowOneChin(4,48,uca_kb);
  159.                 vShowOneChin(4,64,uca_kb);
  160.                 vShowOneChin(4,80,uca_kb);
  161.                 vShowOneChin(4,16,uca_kb);
  162.                 vShowOneChin(4,96,uca_kb);

  163.                 vShowOneChin(2,32,uca_kb);
  164.                 vShowOneChin(2,48,uca_kb);
  165.                 vShowOneChin(2,64,uca_kb);
  166.                 vShowOneChin(2,80,uca_kb);
  167.                
  168.                 vShowOneChin(0,0,uca_wen);
  169.                 vShowOneChin(0,16,uca_du);
  170.                 vShowOneChar(0,32,uca_mh);
  171.                 vShowOneChar(0,112,uca_o);
  172.                 vShowOneChar(0,120,uca_C);
  173.                 read_temp(); //讀取溫度值
  174.                 delay100us();               
  175.                 display();         //顯示溫度值
  176.                 delay100us();
  177.                 BUZZER=0;
  178.         }
  179.        
  180.         while(button==0)
  181.         {
  182.         //判斷按鍵
  183.                  if(button_shi==0)
  184.                  {
  185.                           while(button_shi==0);
  186.                          count1++;
  187.                  }
  188.                  if(button_fen==0)
  189.                  {
  190.                           while(button_fen==0);
  191.                          count2++;
  192.                  }
  193.                  if(button_miao==0)
  194.                  {
  195.                           while(button_miao==0);
  196.                          count3++;
  197.                  }
  198.                  if(button_year==0)
  199.                  {
  200.                           while(button_year==0);
  201.                          count4++;
  202.                  }
  203.                  if(button_month==0)
  204.                  {
  205.                           while(button_month==0);
  206.                          count5++;
  207.                  }
  208.                  if(button_day==0)
  209.                  {
  210.                           while(button_day==0);
  211.                          count6++;
  212.                  }
  213.                  if(button_week==0)
  214.                  {
  215.                           while(button_week==0);
  216.                          count7++;
  217.                  }

  218.                  shi=ReadSet1302(0x85);
  219.                  shi=((shi&0x70)>>4)*10+(shi&0x0f)+count1;           //高三個(gè)字節(jié)是十位,低4個(gè)字節(jié)為個(gè)位
  220.                  if(shi>=24)
  221.                          shi=shi-24;

  222.                  fen=ReadSet1302(0x83);
  223.                  fen=((fen&0x70)>>4)*10+(fen&0x0f)+count2;
  224.                  if(fen>=60)
  225.                          fen=fen-60;

  226.                  miao=ReadSet1302(0x81);
  227.                  miao=((miao&0x70)>>4)*10+(miao&0x0f)+count3;
  228.                  if(miao>=60)
  229.                          miao=miao-60;

  230.                  year=ReadSet1302(0x8d);
  231.                  year=((year&0x70)>>4)*10+(year&0x0f)+count4;

  232.                  month=ReadSet1302(0x89);
  233.                  month=((month&0x70)>>4)*10+(month&0x0f)+count5;
  234.                  if(month>=13)
  235.                          month=month-12;

  236.                  day=ReadSet1302(0x87);
  237.                  day=((day&0x70)>>4)*10+(day&0x0f)+count6;
  238.                  if(day>=32)
  239.                          day=day-31;

  240.                  week=ReadSet1302(0x8b);
  241.                  week=((week&0x70)>>4)*10+(week&0x0f)+0x30+count7;
  242.                  if(week>=0x38)
  243.                  {
  244.                          week=week-0x07;
  245.                          count7=0;
  246.                  }
  247.                  if(week==0x31)
  248.                  week=week+6;
  249. ……………………

  250. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
12864ds1302時(shí)間和ds18b20溫度程序和仿真圖.zip (235.82 KB, 下載次數(shù): 199)


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

使用道具 舉報(bào)

沙發(fā)
ID:638447 發(fā)表于 2019-11-26 15:48 | 只看該作者
12864不顯示啊
回復(fù)

使用道具 舉報(bào)

板凳
ID:262059 發(fā)表于 2019-11-26 18:41 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報(bào)

地板
ID:585983 發(fā)表于 2021-3-17 17:38 | 只看該作者
有bug啊,23.59.59之后就是23.60.00了
回復(fù)

使用道具 舉報(bào)

5#
ID:402026 發(fā)表于 2021-3-27 14:53 | 只看該作者
做的非常棒!非常不錯(cuò)!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久婷婷天堂 | 久久久久www | 4h影视 | 色网在线观看 | 久久久久久91香蕉国产 | 欧美一区二区三 | 成人欧美一区二区三区黑人孕妇 | 亚洲国产黄 | 日韩视频一区在线观看 | 欧美成人一区二区 | 成人在线视频网址 | 日本不卡一区二区三区 | 成人在线观看免费视频 | 成人影 | 9999久久 | 国产精品国产馆在线真实露脸 | 欧美日韩专区 | 成人黄色三级毛片 | 日产精品久久久一区二区福利 | 一区精品国产欧美在线 | 在线中文字幕视频 | 日韩免费视频一区二区 | 欧美精品乱码久久久久久按摩 | 精品成人一区 | 久久久国产视频 | 国产特级毛片aaaaaa | 精品免费看 | 亚洲久久在线 | 欧美精品久久久 | 亚洲精品欧美 | 欧美偷偷操 | 欧美国产日韩一区二区三区 | 国产一级特黄aaa大片评分 | 一级片免费视频 | 99爱视频| 国产一区二区三区免费观看视频 | 成人免费视频网站在线看 | 毛片一区| 国产成人99久久亚洲综合精品 | a a毛片| 欧美日韩亚洲一区 |