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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機恒溫控制系統程序和仿真

查看數: 10424 | 評論數: 30 | 收藏 4
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2016-11-7 10:31

正文摘要:

恒溫程序,仿真

回復

ID:276534 發表于 2020-3-16 12:42
仿真打不開
ID:683143 發表于 2020-1-7 19:39
好啊
可以自幾做個水暖炕啦
謝謝啊
ID:530516 發表于 2019-12-4 20:33
樓主,你的仿真我看到了,也可以跑,但是你的程序實在是太亂了,好幾個,可以發一下最后生成hex文件的程序嗎
ID:530516 發表于 2019-11-20 15:38
為啥我的不合適?打不開
ID:587292 發表于 2019-7-20 11:47
感謝分享,這里果然大俠多
以后請多多指教
ID:587292 發表于 2019-7-20 11:43
感謝分享,能交流下嗎
ID:587292 發表于 2019-7-20 11:43
感謝分享
ID:530536 發表于 2019-5-9 08:24
#include<reg52.h>
#include"led.h"

uchar code lednum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x76,0x38};//數碼管字0~9、'-'、'H'、'L'、,共陰數碼管段碼
uchar code lednum_p[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//數碼管字0~9,帶小數點

/*****************延時函數********************/
void LedDelay(uint x)
{
        uchar k;
        while(x--)
        for(k=0;k<30;k++) ;
}
/*****************數碼管掃描********************/                                  
void LedScan(void)
{   
        uchar k;
    for(k=0;k<100;k++)
        {  
            SEG=lednum[dig0];                DIG=0xfe; LedDelay(1);        SEG=0x00;//DIG是選擇哪一只數碼管點亮
        SEG=lednum_p[dig1];                DIG=0xfd; LedDelay(1);        SEG=0x00;//SEG是選擇數碼管哪幾段亮,這里0x00是熄滅所有段
            SEG=lednum[dig2];                DIG=0xfb; LedDelay(1);        SEG=0x00;
            SEG=lednum[dig3];                DIG=0xf7; LedDelay(1);        SEG=0x00;               
         }
}
/**************數碼管某位閃爍*****************/                                  
void LedFlick(uchar FlickBit)
{   
        uchar k;
    for(k=0;k<100;k++)
        {  
                switch(FlickBit)
                {
                        case(1)://第1位數碼管閃爍,右往左
                            SEG=lednum[dig0];if(k<50){DIG=0xfe; LedDelay(1);}else{DIG=0xff; LedDelay(1);}        SEG=0x00;
                        SEG=lednum_p[dig1];                DIG=0xfd; LedDelay(1);        SEG=0x00;
                            SEG=lednum[dig2];                DIG=0xfb; LedDelay(1);        SEG=0x00;
                            SEG=lednum[dig3];                DIG=0xf7; LedDelay(1);        SEG=0x00;
                                break;
                        case(2)://第2位數碼管閃爍
                                SEG=lednum[dig0];        DIG=0xfe; LedDelay(1);        SEG=0x00;
                        //SEG=lednum_p[dig1];if(k<50){DIG=0xfd; LedDelay(1);}else{DIG=0xff; LedDelay(1);}        SEG=0x00;
                                //以下這句是用來處理閃爍數字而不閃爍小數點的
                                DIG=0xfd; if(k<50){SEG=lednum_p[dig1];LedDelay(1);}else{SEG=0x80; LedDelay(1);}        DIG=0xff;
                            SEG=lednum[dig2];                DIG=0xfb; LedDelay(1);        SEG=0x00;
                            SEG=lednum[dig3];                DIG=0xf7; LedDelay(1);        SEG=0x00;
                                break;       
                        case(3)://第3位數碼管閃爍
                                SEG=lednum[dig0];                DIG=0xfe; LedDelay(1);        SEG=0x00;
                        SEG=lednum_p[dig1];                DIG=0xfd; LedDelay(1);        SEG=0x00;
                            SEG=lednum[dig2];if(k<50){DIG=0xfb; LedDelay(1);}else{DIG=0xff; LedDelay(1);}        SEG=0x00;
                            SEG=lednum[dig3];                DIG=0xf7; LedDelay(1);        SEG=0x00;
                                break;
                        case(4)://第4位數碼管閃爍
                                SEG=lednum[dig0];                DIG=0xfe; LedDelay(1);        SEG=0x00;
                        SEG=lednum_p[dig1];                DIG=0xfd; LedDelay(1);        SEG=0x00;
                            SEG=lednum[dig2];                DIG=0xfb; LedDelay(1);        SEG=0x00;
                            SEG=lednum[dig3];if(k<50){DIG=0xf7; LedDelay(1);}else{DIG=0xff; LedDelay(1);}        SEG=0x00;
                        default:break;
                }       
         }
}
ID:530536 發表于 2019-5-9 08:24
#include<reg52.h> #include"led.h"  uchar code lednum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x76,0x38};//數碼管字0~9、'-'、'H'、'L'、,共陰數碼管段碼 uchar code lednum_p[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//數碼管字0~9,帶小數點  /*****************延時函數********************/ void LedDelay(uint x) {         uchar k;         while(x--)         for(k=0;k<30;k++) ; } /*****************數碼管掃描********************/                                    void LedScan(void) {            uchar k;     for(k=0;k<100;k++)         {               SEG=lednum[dig0];                DIG=0xfe; LedDelay(1);        SEG=0x00;//DIG是選擇哪一只數碼管點亮         SEG=lednum_p[dig1];                DIG=0xfd; LedDelay(1);        SEG=0x00;//SEG是選擇數碼管哪幾段亮,這里0x00是熄滅所有段             SEG=lednum[dig2];                DIG=0xfb; LedDelay(1);        SEG=0x00;             SEG=lednum[dig3];                DIG=0xf7; LedDelay(1);        SEG=0x00;                          } } /**************數碼管某位閃爍*****************/                                    void LedFlick(uchar FlickBit) {            uchar k;     for(k=0;k<100;k++)         {                   switch(FlickBit)                 {                         case(1)://第1位數碼管閃爍,右往左                             SEG=lednum[dig0];if(k<50){DIG=0xfe; LedDelay(1);}else{DIG=0xff; LedDelay(1);}        SEG=0x00;                         SEG=lednum_p[dig1];                DIG=0xfd; LedDelay(1);        SEG=0x00;                             SEG=lednum[dig2];                DIG=0xfb; LedDelay(1);        SEG=0x00;                             SEG=lednum[dig3];                DIG=0xf7; LedDelay(1);        SEG=0x00;                                 break;                         case(2)://第2位數碼管閃爍                                 SEG=lednum[dig0];        DIG=0xfe; LedDelay(1);        SEG=0x00;                         //SEG=lednum_p[dig1];if(k<50){DIG=0xfd; LedDelay(1);}else{DIG=0xff; LedDelay(1);}        SEG=0x00;                                 //以下這句是用來處理閃爍數字而不閃爍小數點的                                 DIG=0xfd; if(k<50){SEG=lednum_p[dig1];LedDelay(1);}else{SEG=0x80; LedDelay(1);}        DIG=0xff;                             SEG=lednum[dig2];                DIG=0xfb; LedDelay(1);        SEG=0x00;                             SEG=lednum[dig3];                DIG=0xf7; LedDelay(1);        SEG=0x00;                                 break;                                 case(3)://第3位數碼管閃爍                                 SEG=lednum[dig0];                DIG=0xfe; LedDelay(1);        SEG=0x00;                         SEG=lednum_p[dig1];                DIG=0xfd; LedDelay(1);        SEG=0x00;                             SEG=lednum[dig2];if(k<50){DIG=0xfb; LedDelay(1);}else{DIG=0xff; LedDelay(1);}        SEG=0x00;                             SEG=lednum[dig3];                DIG=0xf7; LedDelay(1);        SEG=0x00;                                 break;                         case(4)://第4位數碼管閃爍                                 SEG=lednum[dig0];                DIG=0xfe; LedDelay(1);        SEG=0x00;                         SEG=lednum_p[dig1];                DIG=0xfd; LedDelay(1);        SEG=0x00;                             SEG=lednum[dig2];                DIG=0xfb; LedDelay(1);        SEG=0x00;                             SEG=lednum[dig3];if(k<50){DIG=0xf7; LedDelay(1);}else{DIG=0xff; LedDelay(1);}        SEG=0x00;                         default:break;                 }                  } }
ID:530536 發表于 2019-5-8 13:35
謝謝老板兒!學習到了
ID:464044 發表于 2019-5-5 14:41
學習學習
ID:507638 發表于 2019-4-11 10:13
這是閉環控制嗎
ID:507638 發表于 2019-4-10 19:54
這個是不是閉環控制?
ID:507638 發表于 2019-4-10 19:48
樓主可以交流下單片機的知識嗎
ID:253922 發表于 2018-7-16 17:13
很實用的東西啊 ,想學習
ID:258576 發表于 2018-6-27 21:13
這個不是閉環控制的把?
ID:140183 發表于 2018-1-21 08:23
很好,很實用!!!!!!!!!!!!!!!!!!!
ID:249310 發表于 2017-11-23 13:03

謝謝樓主  很實用
ID:249604 發表于 2017-11-15 10:59
謝謝樓主  很實用
ID:196907 發表于 2017-5-8 21:59

.h文件不能打開
ID:193720 發表于 2017-5-1 17:16
感謝,學習學習
ID:193720 發表于 2017-5-1 17:16
感謝,學習
ID:194701 發表于 2017-5-1 07:52

好東西  多學習
ID:192615 發表于 2017-5-1 07:39

好東西  多學習
ID:164154 發表于 2017-4-18 22:30
樓主有PCB嗎,我想拿你的硬件連接做個實物
ID:188781 發表于 2017-4-16 09:45
恒溫程序很難,你這個算恒溫程序?
ID:188314 發表于 2017-4-10 23:15
好東西  多學習
ID:170906 發表于 2017-3-15 16:52
謝謝樓主。
ID:108622 發表于 2016-11-17 05:36
支持分享好東西
ID:1 發表于 2016-11-13 16:43
  1. #include<reg52.h>
  2. #include"mytype.h"
  3. #include"led.h"
  4. #include"ds18b20.h"
  5. #include"key.h"


  6. /*****繼電器端口***********/
  7. sbit cold=P1^4;
  8. sbit heat=P1^5;

  9. sbit buzzer=P1^6;  //蜂鳴器

  10. uint  tvalue;

  11. uint dig3,dig2,dig1,dig0;          //digx數碼管要顯示的數據,在led.h中聲明的外部變量
  12. uint dig3_u,dig2_u,dig1_u,dig0_u; //保存設置上限  up
  13. uint dig3_d,dig2_d,dig1_d,dig0_d; //保存設置下限  down

  14. uchar key;                                          //key是key的返回值,在key.h中聲明的外部變量

  15. uchar kflag,kshift=1,kmode=0;//按鍵設置標志、閃爍led的移位按鍵、按鍵模式(上下限溫度)
  16. uint  temp;                //緩存溫度

  17. void KeyCtrl();//按鍵控制

  18. void main(void)
  19. {

  20.         TMOD=0x01; //方式1的定時計數50ms,設置定時器每一段時間采集溫度值
  21.           TH0=0x3c;         
  22.           TL0=0xb0;
  23.         EA=1;
  24.         TR0=1;
  25.         ET0=1;
  26.        
  27.         dig2_u=5;  //初始化上限50.0度
  28.         dig1_u=0;
  29.         dig0_u=0;

  30.         dig2_d=3;  //初始化下限30.0度
  31.         dig1_d=0;
  32.         dig0_d=0;

  33.         while(1)
  34.         {                               
  35.                 if(KeyScan())KeyCtrl();//掃描到按鍵執行按鍵控制,否則跳過

  36.                 if(kflag) //如果按鍵設置標志為1,進入閃爍顯示
  37.                 {                       
  38.                         LedFlick(kshift); //數碼管閃爍顯示
  39.                 }
  40.                 else
  41.                 {
  42.                         temp=tvalue;  //tvalue是外部變量,在定時器執行中斷采集溫度時ReadTemp();改變溫度值
  43.                         dig3=0;
  44.                         dig2=temp/100%10;   
  45.                         dig1=temp/10%10 ;   
  46.                         dig0=temp%10;

  47.                         LedScan();//數碼管顯示采集溫度

  48.                                 if( temp>(dig2_u*100+dig1_u*10+dig0_u) )//大于上限值報警并制冷
  49.                                 {       
  50.                                         buzzer=1;
  51.                                         heat=0;       
  52.                                         cold=1;
  53.                                 }
  54.                                 else if(temp<(dig2_d*100+dig1_d*10+dig0_d) )//小于下限值報警并制熱
  55.                                 {
  56.                                         buzzer=1;
  57.                                         heat=1;
  58.                                         cold=0;
  59.                                 }
  60.                                 else //不報警停止制冷制熱
  61.                                 {
  62.                                         buzzer=0;
  63.                                         heat=0;        //高電平有效,此處關閉制熱
  64.                                         cold=0;        //高電平有效,此處關閉制冷
  65.                                 }                               
  66.                 }
  67.                                        
  68.         }       
  69.                
  70. }
  71. /***********按鍵控制函數,模式、加減、確認***********/
  72. void KeyCtrl()
  73. {

  74.         if(key)        //key是外部變量,在掃描的時候改變,在退出這個函數前清零,否則會一直保持控制,閃啊閃的
  75.         {
  76.                 switch(key)        //判斷掃描到的按鍵是什么,作出相應的操作
  77.                 {
  78.                         case 1: kflag=1;         //模式切換按鍵
  79.                                     kmode++;
  80.                                         if(kmode==1)//把保存的上限溫度值顯示出來
  81.                                         {
  82.                                                 dig0=dig0_u;
  83.                                                 dig1=dig1_u;
  84.                                                 dig2=dig2_u;
  85.                                                 dig3=11;//'H'                                               
  86.                                         }
  87.                                         else if(kmode==2) //把保存的下限溫度值顯示出來
  88.                                         {
  89.                                                 dig0=dig0_d;
  90.                                                 dig1=dig1_d;
  91.                                                 dig2=dig2_d;
  92.                                                 dig3=12;//'L'                                       
  93.                                         }
  94.                                         else if(kmode==3) //恢復溫度采集顯示
  95.                                         {
  96.                                                 kmode=0;
  97.                                                 kflag=0;
  98.                                                 dig3=0;
  99.                                         }
  100.                                         break;
  101.                         case 2: kshift++;         //閃爍位左移按鍵
  102.                                         if(kshift==4)kshift=1;
  103.                                         break;

  104.                         case 3:        if(kflag)   //加1按鍵
  105.                                         switch(kshift)
  106.                                         {
  107.                                                 case 1: dig0++;
  108.                                                                 if(dig0==10)dig0=0;        //之所以這樣,是避免dig0加到10以上會顯示數組段碼的后面的字符
  109.                                                                 break;
  110.                                                 case 2: dig1++;
  111.                                                                 if(dig1==10)dig1=0;
  112.                                                                 break;
  113.                                                 case 3: dig2++;
  114.                                                                 if(dig2==10)dig2=0;
  115.                                                                 break;
  116.                                         }
  117.                                         break;
  118.                         case 4:        if(kflag)         //減1按鍵
  119.                                         switch(kshift)
  120.                                         {
  121.                                                 case 1: dig0--;
  122.                                                                 if(dig0==-1)dig0=9;
  123.                                                                 break;
  124.                                                 case 2: dig1--;
  125.                                                                 if(dig1==-1)dig1=9;
  126.                                                                 break;
  127.                                                 case 3: dig2--;
  128.                                                                 if(dig2==-1)dig2=9;
  129.                                                                 break;
  130.                                         }
  131.                                         break;
  132.                         default:break;
  133.                 }
  134.         }
  135.         if(kmode==1)  //把顯示的溫度值上限保存一下
  136.         {
  137.                 dig0_u=dig0;
  138.                 dig1_u=dig1;
  139.                 dig2_u=dig2;
  140.                 dig3_u=dig3;                                               
  141.         }
  142.         else if(kmode==2) //把顯示的溫度值下限保存一下
  143.         {
  144.                 dig0_d=dig0;
  145.                 dig1_d=dig1;
  146.                 dig2_d=dig2;
  147.                 dig3_d=dig3;                                       
  148.        
  149.         }
  150.         key=0;                                               
  151. }

  152. /**********定時中斷每隔一段時間采集一次當前溫度******/
  153. void time0() interrupt 1
  154. {
  155.         uchar cnt;
  156.         TH0=0x3c; //重賦初值
  157.         TL0=0xb0;
  158.                
  159.         if(!cnt)
  160.         {
  161.                 ReadTemp();
  162.         }
  163.         cnt++;
  164.         if(cnt==4)cnt=0; //50ms*4=1/5s采集一次溫度值
  165. }


復制代碼

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩高清一区 | 蜜桃臀av一区二区三区 | 久久久久久免费毛片精品 | 青青久久| 久久久精品网站 | 欧美一级免费片 | 九九亚洲精品 | 福利视频一区二区三区 | 伊人色综合久久久天天蜜桃 | 亚洲人成人网 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 免费在线观看一区二区三区 | 国产高潮好爽受不了了夜夜做 | 欧美99久久精品乱码影视 | 日韩国产一区二区 | 少妇久久久 | 天天人人精品 | 一区二区三区四区不卡视频 | 最新中文字幕久久 | 久久精品国产清自在天天线 | 欧美激情一区二区三区 | 一级毛片视频 | 西西裸体做爰视频 | 亚洲精品天堂 | 一区2区 | 亚洲精品成人网 | 日日操操 | 91精品国产91久久久久久吃药 | www.久久国产精品 | 亚洲网一区 | 国产综合久久久久久鬼色 | av一区二区三区四区 | 超碰日本| 欧美中文字幕一区二区三区亚洲 | 黄色国产大片 | 亚洲人成在线观看 | 久久久精品天堂 | 国产精品日日摸夜夜添夜夜av | 一区二区日韩 | 精品国产一区二区国模嫣然 | 91免费看片 |