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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我的單片機數字溫度實驗 含源代碼,Proteus仿真原理圖

[復制鏈接]
跳轉到指定樓層
樓主
這是我做的單片機數字溫度課實驗,
用了兩個星期的時間,
附件里面包含數字溫度的單片機的源碼
和Proteus仿真工程文件



單片機源程序如下:
  1. #include <reg52.h>
  2. #include "ds18b20.h"
  3. #include "ds1302.h"
  4. #include "lcd1602.h"

  5. //LED引腳定義
  6. sbit LED_LOW=P1^4;                //低溫度報警
  7. sbit LED_NORMAL=P1^5; //正常溫度
  8. sbit LED_HIGH=P1^6;   //高溫報警

  9. //按鍵引腳定義
  10. sbit k1=P3^4;        //模式切換(按鍵溫度上下限+或溫度上下限-)
  11. sbit k2=P3^2;        //設置溫度下限
  12. sbit k3=P3^3; //設置溫度上限

  13. //DS1302相關
  14. uchar  times[9];//保存時間
  15. uchar  date[11];//保存日期

  16. //溫度數據
  17. uchar HT=40;        //溫度上限
  18. uchar LT=15;        //溫度下限
  19. uchar WenduData[6]; //實時溫度
  20. uchar HTem[3],LTem[3];//溫度上下限

  21. //全局變量定義
  22. bit flag=0;//模式切換標志位


  23. //主函數
  24. void main()
  25. {
  26.         EA=1;      //開總中斷
  27.         TCON=0x05; //外部中斷0,1設置為邊沿觸發
  28.         EX0=1;     //開外部中斷0
  29.         EX1=1;                 //開外部中斷1
  30.         //init_1302(time_1302);
  31.         ReadTemperature();//預讀取溫度并延時跳過默認初始溫度顯示
  32.         Delay(50000);
  33.         Delay(50000);
  34.         LCD_init();//LCD初始化
  35.         while(1)
  36.         {        
  37.                 if(k1==0){ //按下KEY1時,切換溫度上下限設置方向
  38.                         Delay(5);
  39.                         while(k1==0);
  40.                         flag=~flag;
  41.                 }
  42.                 Disp_Temperature();//顯示溫度
  43.                 Delay(500);
  44.                
  45.                 get_1302(time_1302);//獲取時間
  46.                 change(); //時間轉換
  47.                
  48.                 gotoxy(8,2);
  49.                 LCD_display(times);//顯示時間
  50.         }
  51. }

  52. //溫度轉換顯示函數
  53. void Disp_Temperature()     //顯示溫度
  54. {
  55.         uint a,b,c,d,e,m;  
  56.   e=ReadTemperature();  //獲取溫度值
  57.   a=e/1000;             //計算得到十位數
  58.   b=e/100-a*10;         //計算得到個位數字  
  59.   d=e%10;               //計算得到小數點后兩位
  60.   c=(e%100)/10;         //計算得到小數點后一位
  61.   m=e/100;  
  62.         
  63.         //溫度不在范圍內報警
  64.         if( m<LT){ //溫度超過溫度上限
  65.                 LED_LOW=0;
  66.                 LED_HIGH=1;//黃燈亮
  67.                 LED_NORMAL=1;
  68.         }         
  69.         else if(m>HT){ //溫度低于溫度下限
  70.                 LED_LOW=1;
  71.                 LED_HIGH=0;//紅燈亮
  72.                 LED_NORMAL=1;
  73.         }
  74.         else{        //溫度處于正常范圍
  75.                 LED_LOW=1;
  76.                 LED_HIGH=1;
  77.                 LED_NORMAL=0;//綠燈亮
  78.         }
  79.         //LCD顯示溫度數據
  80.         WenduData[0] = a+'0';
  81.         WenduData[1] = b+'0';
  82.         WenduData[2] = '.';
  83.         WenduData[3] = c+'0';
  84.         WenduData[4] = d+'0';
  85.         WenduData[5] = '\0';
  86.         LTem[0] = LT/10+'0';
  87.         LTem[1] = LT%10+'0';
  88.         LTem[2] = '\0';
  89.         HTem[0] = HT/10+'0';
  90.         HTem[1] = HT%10+'0';
  91.         HTem[2] = '\0';
  92.         
  93.         gotoxy(1,1);
  94.         LCD_display("LT:");
  95.         gotoxy(4,1);
  96.         LCD_display(LTem);
  97.         gotoxy(1,2);
  98.         LCD_display("HT:");
  99.         gotoxy(4,2);
  100.         LCD_display(HTem);
  101.         gotoxy(8,1);
  102.         LCD_display("T:");
  103.         gotoxy(10,1);
  104.         LCD_display(WenduData);
  105. }

  106. //外部0中斷子函數
  107. void int0() interrupt 0
  108. {
  109.         if(k2==0) //按鍵KEY2按下
  110.         {
  111.                 Delay(5);
  112.                 while(k2==0);
  113.                 if(flag==0)
  114.                         LT++; //溫度下限+
  115.                 else
  116.                         LT--;//溫度下限-
  117.         }               
  118. }

  119. //外部1中斷子函數
  120. void int1() interrupt 2
  121. {
  122.         if(k3==0)
  123.         {
  124.                 Delay(5);
  125.                 while(k3==0);
  126.                 if(flag==0)
  127.                         HT++;//溫度上限+
  128.                 else
  129.                         HT--;//溫度上限-
  130.         }               
  131. }

  132. //DS1302數值轉換
  133. void change()
  134. {
  135. // 時 間 的 轉 換
  136.   times[0]=time_1302[2]/10+'0';
  137.   times[1]=time_1302[2]%10+'0';
  138.   times[2]=':';
  139.   times[3]=time_1302[1]/10+'0';
  140.   times[4]=time_1302[1]%10+'0';
  141.   times[5]=':';
  142.   times[6]=time_1302[0]/10+'0';
  143.   times[7]=time_1302[0]%10+'0';
  144.         times[8]='\0';
  145.   // 日 期 的 轉 換
  146.         date[0]='2';
  147.         date[1]='0';
  148.   date[2]=time_1302[6]/10+'0';
  149.   date[3]=time_1302[6]%10+'0';
  150.   date[4]='/';
  151.   date[5]=time_1302[4]/10+'0';
  152.   date[6]=time_1302[4]%10+'0';
  153.   date[7]='/';
  154.   date[8]=time_1302[3]/10+'0';
  155.   date[9]=time_1302[3]%10+'0';
  156.         date[10]='\0';
  157. }
復制代碼

Keil代碼與Proteus仿真下載:
ds18b20數字溫度計.7z (112.68 KB, 下載次數: 50)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:1036340 發表于 2022-6-22 11:44 | 只看該作者
keil2能用嗎
回復

使用道具 舉報

板凳
ID:1035505 發表于 2022-6-24 05:12 來自手機 | 只看該作者
用protues8.9可以仿得起來嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品在线 | 亚洲国产精品久久久久久 | 亚洲精品一区二区三区蜜桃久 | 精品久久一区 | 国产av毛片 | 国产精品一区二区无线 | 国产高清免费视频 | 久久精品小视频 | 欧美日韩福利 | 亚洲黄色av | 日韩视频在线免费观看 | 欧美成人一区二区三区片免费 | 久久精品网 | 56pao在线 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | a毛片 | 盗摄精品av一区二区三区 | 国产成人精品一区二区 | 视频一区在线观看 | 91精品国产综合久久精品 | 国产精品美女久久久久久免费 | 亚洲精品日日夜夜 | 精品国产乱码久久久久久88av | 久久久91精品国产一区二区三区 | 毛片在线免费播放 | 久久久高清| 色欧美综合| 国产精品日韩欧美一区二区三区 | 久久精品小视频 | 国产精品久久一区二区三区 | 欧美日韩亚洲二区 | 在线观看中文字幕亚洲 | 久久婷婷国产麻豆91 | 香蕉视频91 | 一区二区三区精品视频 | 久久久国产一区二区三区 | 久久久婷婷 | 91免费在线播放 | 亚洲小视频在线观看 | 精品国产乱码久久久久久丨区2区 | 久久久精品综合 |