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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3431|回復(fù): 2
收起左側(cè)

基于51單片機溫度控制上下限 數(shù)碼管

[復(fù)制鏈接]
ID:325974 發(fā)表于 2018-5-9 15:54 | 顯示全部樓層 |閱讀模式
基于單片機的溫度控制的設(shè)計

單片機源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #include <DS18B20.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define SMGIO P0

  7. sbit SET=P3^2;                   //定義設(shè)定上下限鍵
  8. sbit ADD=P3^4;                   //定義增加鍵
  9. sbit DEC=P3^5;                   //定義減小限鍵          
  10. sbit SMG1=P2^0;                   //定義數(shù)碼管第一位
  11. sbit SMG2=P2^1;                   //定義數(shù)碼管第二位
  12. sbit SMG3=P2^2;                   //定義數(shù)碼管第三位
  13. sbit SMG4=P2^3;                   //定義數(shù)碼管第四位
  14. sbit BEEP=P2^7;                   //定義蜂鳴器報警
  15. sbit LED1=P1^0;                   //風(fēng)扇降溫
  16. sbit LED2=P1^1;                   //加熱棒加熱
  17. uint tempValue;                   //變量 存儲當(dāng)前溫度值
  18. uint HI_Alarm=30;           //初始上限
  19. uint LO_Alarm=25;           //初始下限
  20. uchar SMG_CC[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0xff};                  
  21. uchar SMG_CC_DOT[]={0x40,0x79,0x24,0x30,0x19,0x12, 0x02,0x78,0x00,0x10,0xff};          

  22. /********************************************************************/
  23. /*                                                1ms延時                                                                                */
  24. /********************************************************************/

  25. void delayms(uint x)
  26. {
  27. uchar i;
  28. while(x--)
  29. {
  30.   for(i=150;i>0;i--);
  31. }
  32. }

  33. void Display_Temperature()                   //顯示溫度
  34. {
  35.         char smg1,smg2,smg3,smg4;
  36.         smg1=tempValue/1000;                         //以下表示將溫度值拆分開
  37.         smg2=(tempValue-smg1*1000)/100;
  38.         smg3=(tempValue%100)/10;
  39.         smg4=tempValue%10;

  40.         if(tflag==1)                                         //負(fù)數(shù)顯示
  41.                 {
  42.                         SMGIO=SMG_CC[smg4];                //顯示小數(shù)位
  43.                         SMG4=0;
  44.                         delayms(1);
  45.                         SMG4=1;
  46.                         SMGIO=SMG_CC_DOT[smg3];         //顯示個數(shù)位
  47.                         SMG3=0;
  48.                         delayms(1);
  49.                         SMG3=1;
  50.                         if(smg2==0)
  51.                         {
  52.                                 SMGIO=0x40;                         //顯示十?dāng)?shù)位
  53.                                 SMG2=0;
  54.                                 delayms(1);
  55.                                 SMG2=1;
  56.                                 SMGIO=0x00;                         //顯示百數(shù)位
  57.                                 SMG1=0;
  58.                                 delayms(1);
  59.                                 SMG1=1;
  60.                         }
  61.                         else
  62.                         {
  63.                                 SMGIO=SMG_CC[smg2];         //顯示十?dāng)?shù)位
  64.                                 SMG2=0;
  65.                                 delayms(1);
  66.                                 SMG2=1;
  67.                                 SMGIO=0x40;                         //顯示十?dāng)?shù)位
  68.                                 SMG1=0;
  69.                                 delayms(1);
  70.                                 SMG1=1;                                       
  71.                         }
  72.                 }
  73.         else                                //正數(shù)顯示
  74.                 {
  75.                         SMGIO=SMG_CC[smg4];         //顯示小數(shù)位
  76.                         SMG4=0;
  77.                         delayms(1);
  78.                         SMG4=1;
  79.                         SMGIO=SMG_CC_DOT[smg3];         //顯示個數(shù)位
  80.                         SMG3=0;
  81.                         delayms(1);
  82.                         SMG3=1;
  83.                         if(smg1==0)                                  
  84.                         {
  85.                                 SMGIO=0x00;         
  86.                                 SMG1=0;
  87.                                 delayms(1);
  88.                                 SMG1=1;
  89.                                 if(smg2==0)
  90.                                 {
  91.                                         SMGIO=0x00;         
  92.                                         SMG1=0;
  93.                                         delayms(1);
  94.                                         SMG1=1;         
  95.                                 }
  96.                                 else
  97.                                 {
  98.                                         SMGIO=SMG_CC[smg2];         
  99.                                         SMG2=0;
  100.                                         delayms(1);
  101.                                         SMG2=1;               
  102.                                 }
  103.                         }
  104.                         else
  105.                         {
  106.                                 SMGIO=SMG_CC[smg1];
  107.                                 SMG1=0;
  108.                                 delayms(1);
  109.                                 SMG1=1;
  110.                                 SMGIO=SMG_CC[smg2];
  111.                                 SMG2=0;
  112.                                 delayms(1);
  113.                                 SMG2=1;
  114.                         }                       
  115.                 }
  116. }
  117. void Display_HI_Alarm()
  118. {
  119.         SMGIO=~0x76;                //顯示H
  120.         SMG1=0;
  121.         delayms(1);
  122.         SMG1=1;
  123.         SMGIO=~0x40;                //顯示-
  124.         SMG2=0;
  125.         delayms(1);
  126.         SMG2=1;

  127.         SMGIO=SMG_CC[HI_Alarm/10];        //顯示報警高值十位
  128.         SMG3=0;
  129.         delayms(1);
  130.         SMG3=1;
  131.         SMGIO=SMG_CC[HI_Alarm%10];        //顯示報警高值個數(shù)位
  132.         SMG4=0;
  133.         delayms(1);
  134.         SMG4=1;       
  135. }
  136. void Display_LO_Alarm()
  137. {
  138.         SMGIO=~0x38;                //顯示L
  139.         SMG1=0;
  140.         delayms(1);
  141.         SMG1=1;
  142.         SMGIO=~0x40;                //顯示-
  143.         SMG2=0;
  144.         delayms(1);
  145.         SMG2=1;

  146.         SMGIO=SMG_CC[LO_Alarm/10];        //顯示報警高值十位
  147.         SMG3=0;
  148.         delayms(1);
  149.         SMG3=1;
  150.         SMGIO=SMG_CC[LO_Alarm%10];        //顯示報警高值個數(shù)位
  151.         SMG4=0;
  152.         delayms(1);
  153.         SMG4=1;       
  154. }
  155. void SET_KEY()
  156. {          bit SET_FLAG=1;
  157.         if(SET==0)                                         //設(shè)定按鍵按下
  158.                 {
  159.                 delayms(40);
  160.                 if(SET==1)                                 //延時去除抖動再次判斷是否按下按鍵
  161.                 {
  162.                         while(SET_FLAG==1)
  163.                         {
  164.                                 Display_HI_Alarm();           //設(shè)定上限溫度值
  165.                                 if(ADD==0)                                //增加按鍵
  166.                                         {
  167.                                                 delayms(40);          //延時去除抖動再次判斷是否按下按鍵
  168.                                                 if(ADD==1)
  169.                                                         HI_Alarm++;         //溫度值加一
  170.                                         }
  171.                                 if(DEC==0)                                  //減小按鍵
  172.                                         {
  173.                                                 delayms(40);
  174.                                                 if(DEC==1)                   //延時去除抖動再次判斷是否按下按鍵
  175.                                                         HI_Alarm--;           //溫度值減一
  176.                                         }
  177.                                 if(SET==0)                                 //以下表示 再次按下設(shè)定按鍵 進入設(shè)定下限程序       
  178.                                         {
  179.                                                 delayms(40);               
  180.                                                 if(SET==1)                                                            //延時去除抖動再次判斷是否按下按鍵
  181.                                                         {
  182.                                                                 while(1)
  183.                                                                 {
  184.                                                                         Display_LO_Alarm();                   //設(shè)定下限溫度值
  185.                                                                         if(ADD==0)                                   //增加按鍵
  186.                                                                                 {
  187.                                                                                         delayms(40);
  188.                                                                                         if(ADD==1)                    //延時去除抖動再次判斷是否按下按鍵
  189.                                                                                                 LO_Alarm++;                //溫度值加一
  190.                                                                                 }
  191.                                                                         if(DEC==0)                                        //減小按鍵
  192.                                                                                 {
  193.                                                                                         delayms(40);
  194.                                                                                         if(DEC==1)                    //延時去除抖動再次判斷是否按下按鍵
  195.                                                                                                 LO_Alarm--;                //溫度值減一
  196.                                                                                 }
  197.                                                                         if(SET==0)                                        //設(shè)定按鍵按下
  198.                                                                                 {
  199.                                                                                         delayms(40);
  200.                                                                                         if(SET==1)
  201.                                                                                                 {                                 //延時去除抖動再次判斷是否按下按鍵
  202.                                                                                                         SET_FLAG=0;          
  203.                                                                                                         break;                 //上下限設(shè)定完成 退出
  204.                                                                                                 }
  205.                                                                                 }                                       
  206.                                                                 }                                                               
  207.                                                         }
  208.                                         }                                               
  209.                         }
  210.                 }
  211. }       
  212. }

  213. void BJ_LED()
  214. {       
  215.         if(tempValue>=HI_Alarm*10)         //如果溫度超過上限
  216.            {       
  217.              BEEP=0;LED1=0;        LED2=1;
  218.            }
  219.         if(tempValue<=LO_Alarm*10)         //如果溫度低過下限
  220.            {       
  221.              BEEP=0;LED2=0;LED1=1;               
  222.            }                                                                         
  223.         if(tempValue>LO_Alarm*10&&tempValue<HI_Alarm*10)
  224.            {
  225.              BEEP=1;LED1=1;LED2=1;
  226.            }
  227. }


  228. void main()
  229. {       
  230.         BEEP=1;                  
  231.         LED1=1;
  232.         LED2=1;                                                                 //表示先清除報警
  233.         while(1)
  234.         {         
  235.                 tempValue=ReadTemperature();                         //讀取溫度值
  236.                 Display_Temperature();                                         //顯示溫度數(shù)據(jù)
  237.                 BJ_LED();                                                                 //調(diào)用報警函數(shù)
  238.                 SET_KEY();                                                                 //調(diào)用按鍵讀取函數(shù)

  239.         }
  240. }
復(fù)制代碼

所有資料51hei提供下載:
1-程序.zip (61.92 KB, 下載次數(shù): 47)


回復(fù)

使用道具 舉報

ID:108622 發(fā)表于 2018-7-19 10:03 | 顯示全部樓層
能給個電路圖嗎
回復(fù)

使用道具 舉報

ID:535889 發(fā)表于 2019-5-25 21:46 來自觸屏版 | 顯示全部樓層
沒有圖,有圖就好了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲日韩欧美一区二区在线 | 国产一区二区在线播放 | 可以免费看的毛片 | 国产午夜高清 | 精品久久久久久久 | 亚洲免费观看视频网站 | 日韩精品一二三区 | 久久久久久国模大尺度人体 | 日韩高清电影 | 国产日韩欧美激情 | 亚洲三级在线 | 成人一区二 | 精品久久久久一区二区国产 | 免费国产成人av | 日韩欧美国产精品综合嫩v 一区中文字幕 | 一区二区av | 中国一级特黄毛片大片 | 国产精品毛片无码 | 国产精品国产三级国产aⅴ无密码 | 国产一区中文字幕 | 日韩1区 | 亚洲精品久久久久久久久久久久久 | 国产一级特黄视频 | a级在线| 亚洲高清在线免费观看 | 99re视频在线| 男插女下体视频 | 亚洲综合色站 | 欧美在线天堂 | 日本一区二区三区在线观看 | 久热国产在线 | 亚洲精品一区二区在线观看 | 午夜精品在线观看 | 人人擦人人 | 国产a视频| 四虎影院免费在线播放 | 九九在线精品视频 | 国产高清精品一区二区三区 | 亚洲欧美日韩精品久久亚洲区 | 欧美在线观看一区 | www.亚洲一区二区三区 |