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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機溫度控制儀改造定時開關(guān) Proteus仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:228935 發(fā)表于 2021-2-7 10:16 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. /*溫度控制儀主要材料變壓器(220V-5V) 繼電器、 STC89C52 、74LS145P 、74HC164、兩個三位八段數(shù)碼管。*/



  2. /*定時開關(guān),可以設(shè)定什么時間啟動,通電保持時間。該程序數(shù)碼管第一位代表小時1-19。10以后的數(shù)字用小數(shù)點代表10。后兩位是分鐘。*/



  3. /*程序缺點:按鍵按下,數(shù)碼管閃爍。暫未找到解決辦法。另外想讓設(shè)置鍵長按進入設(shè)置,小白一枚不會做,有高手希望指點一番。*/



  4. #include "reg51.h"    //此文件中定義了單片機的一些特殊功能寄存器

  5. #define uint unsigned int      //

  6. #define uchar unsigned char   //         

  7.         

  8. int xmin=0,xhour=1,smin=10,shour=0;

  9. int count,sec,min,hour;

  10. int key_press=1;



  11. sbit DAT=P3^0;//顯示段(數(shù)字)

  12. sbit CLK=P3^1;//鎖存

  13. sbit JDQ=P3^5; //信號輸出-控制繼電器

  14. sbit KEY=P3^2; //按鍵



  15. //指示燈

  16. sbit L1=P0^0; //    設(shè)置  秒閃

  17. sbit L2=P0^1; //     增加

  18. sbit L3=P0^2; //     減少



  19. sbit A=P1^1;

  20. sbit E=P1^2;

  21. sbit C=P1^3;

  22. sbit D=P1^4;



  23. uchar sm_d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

  24.                                                         0xbf,0x96,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,

  25.                                                         0x77,0x7c,0x39,0x5e,0x79,0x71};



  26. uint xs[4];  //保持分鐘,保持小時,剩余啟動分鐘/已啟動分鐘、剩余啟動小時/已啟動小時



  27. //延時函數(shù)

  28. void delay(uint z)

  29. {               

  30.         uint x,y;

  31.         for(x=z;x>0;x--)

  32.                 for(y=110;y>0;y--);

  33. }



  34. //發(fā)送數(shù)據(jù)函數(shù)

  35. void sendbyte(uchar byte)   

  36. {      

  37.     uchar num,c;   

  38.     num=sm_d[byte];   

  39.     for(c=0;c<8;c++)   

  40.     {   

  41.         CLK=0;   

  42.         DAT=num&0x01;   

  43.         CLK=1;   

  44.         num>>=1;   

  45.     }        

  46. }               



  47. void js()

  48. {

  49.         int a,b,c;

  50.         a=sec+min*60+hour*60*60;   //實時

  51.         b=smin*60+shour*60*60;     //變動時間

  52.         c=xmin*60+xhour*60*60;     //保持時間

  53.         

  54.                

  55.         if(a<b)  //啟動倒計時

  56.         {

  57.                 xs[0]=xmin;             //下分鐘

  58.                 xs[1]=xhour;            //下小時

  59.                 xs[2]=((b-a)%3600)/60;    //上分鐘

  60.                 xs[3]=(b-a)/3600;              //上小時

  61.                 JDQ=1;

  62.                 if(key_press==1)

  63.                         L2=0;  

  64.                 else

  65.                         L2=1;

  66.         }

  67.         else if((b<a)&&(a<b+c))   //啟動中

  68.         {

  69.                 xs[0]=xmin;

  70.                 xs[1]=xhour;

  71.                 xs[2]=(a-b)%3600/60;

  72.                 xs[3]=(a-b)/3600;        

  73.                 JDQ=0;

  74.                 if(key_press==1)

  75.                         L3=0;  

  76.                 else

  77.                         L3=1;   

  78.         }

  79.         else if(a>b+c)

  80.         {

  81.                 xs[0]=0;

  82.                 xs[1]=0;

  83.                 xs[2]=(a-b-c)%3600/60;

  84.                 xs[3]=(a-b-c)/3600;        

  85.                 JDQ=1;

  86.                 L2=1;

  87.                 L3=1;

  88.         }        

  89. }



  90. //正常顯示函數(shù)

  91. void zcxs(uint wei)

  92. {

  93.         uint i,j;

  94.         uint zcsmg_num[6];

  95.         js();

  96.         

  97.         zcsmg_num[0]= xs[0]%10;

  98.         zcsmg_num[1]= xs[0]/10;

  99.         zcsmg_num[2]= xs[1];

  100.         zcsmg_num[3]= xs[2]%10;

  101.         zcsmg_num[4]= xs[2]/10;

  102.         zcsmg_num[5]= xs[3];

  103.         

  104.         for(i=0;i<6;i++)

  105.         {               

  106.                 switch(wei)

  107.                 {

  108.                         case 2:if((i==0)||(i==1)){j++;if(j<30)continue;else if(j>60)j=0;};break;

  109.                         case 3:if(i==2){j++;if(j<30)continue;else if(j>60)j=0;};break;

  110.                         case 4:if((i==3)||(i==4)){j++;if(j<30)continue;else if(j>60)j=0;};break;

  111.                         case 5:if(i==5){j++;if(j<30)continue;else if(j>60)j=0;};break;

  112.                 }

  113.                

  114.                 switch(i)

  115.                 {

  116.                         case 0: A=0;E=0;C=0;D=0;sendbyte(zcsmg_num[0]);delay(2);break;  //下右

  117.                         case 1: A=1;E=0;C=0;D=0;sendbyte(zcsmg_num[1]);delay(2);break;

  118.                         case 2: A=0;E=1;C=0;D=0;sendbyte(zcsmg_num[2]);delay(2);break;                        

  119.                         case 3: A=0;E=0;C=1;D=0;sendbyte(zcsmg_num[3]);delay(2);break;  //上右

  120.                         case 4: A=1;E=0;C=1;D=0;sendbyte(zcsmg_num[4]);delay(2);break;

  121.                         case 5: A=0;E=1;C=1;D=0;sendbyte(zcsmg_num[5]);delay(2);break;

  122.                 }

  123.         }

  124. }



  125. void Time0 (void) interrupt 1 using 1   //定時0中斷函數(shù)

  126. {  

  127.         TH0=(65536-20000)/256;   //0XEC

  128.         TL0=(65536-20000)%256;   //0X78

  129.         count++;

  130.         if(count<25)

  131.                 L1=0;        //設(shè)置燈秒閃

  132.         else

  133.                 L1=1;

  134.         if(count==50)  

  135.         {  

  136.                 sec++;        

  137.                 count=0;

  138.                 if(sec==60)   

  139.                 {

  140.                         min++;        

  141.                         sec=0;

  142.       if(min==60)     

  143.                         {

  144.                                 hour++;      

  145.                                 min=0;

  146.                                 if(hour==39)    //  

  147.                                 {

  148.                                         hour=0;   

  149.                                         min=0;

  150.                                         sec=0;

  151.                                 }

  152.                         }

  153.                 }

  154.         }

  155. }



  156. void init()

  157. {

  158.         JDQ=1;                   //繼電器高電平;

  159.         L1=1;

  160.         L2=1;

  161.         L3=1;

  162.         KEY=1;

  163.         

  164.         TMOD=0x01;               //定時器T0工作于方式1,采用12M晶振,定時20ms

  165.         TH0=(65536-20000)/256;   //0XEC

  166.         TL0=(65536-20000)%256;   //0X78

  167.         

  168.         TR0 = 1;          //定時器0開始計時               

  169.         ET0=1;            //開定時器0中斷

  170.         

  171.         EA=1;             //開總中斷

  172.         

  173. }



  174. void key_scan()

  175. {

  176.         uint i;

  177.         for(i=6;i<9;i++)

  178.         {

  179.                 switch(i)

  180.                 {

  181.                         case 6: A=1;E=1;C=1;D=0;delay(5);break;  //按鍵

  182.                         case 7: A=0;E=0;C=0;D=1;delay(5);break;

  183.                         case 8: A=1;E=0;C=0;D=1;delay(5);break;

  184.                 }

  185.                

  186.                 if(KEY==0)

  187.                 {

  188.                         delay(150);

  189.                         if((KEY==0)&&(i==6))

  190.                         {

  191.                                 key_press++;                                

  192.                                 if(key_press>5)

  193.                                         key_press=1;

  194.                         }

  195.                         if(key_press!=1)

  196.                         {

  197.                                 TR0=0;

  198.                                 sec=0;

  199.                                 min=0;

  200.                                 hour=0;

  201.                                 L1=0;

  202.                         }

  203.                         else

  204.                         {

  205.                                 TR0=1;

  206.                         }

  207.                         if((KEY==0)&&(i==7)&&(key_press!=1))

  208.                         {

  209.                                 L2=0;

  210.                                 delay(100);

  211.                                 switch(key_press%6)

  212.                                         {

  213.                                                 case 2:xmin++;if(xmin>59)xmin=0;break;

  214.                                                 case 3:xhour++;if((xhour>19)&&(xmin==0)){xhour=0;xmin=5;}else if(xhour>19)xhour=0;break;

  215.                                                 case 4:smin++;if(smin>59)smin=0;break;

  216.                                                 case 5:shour++;if((shour>19)&&(smin==0)){shour=0;smin=5;}else if(shour>19)shour=0;break;

  217.                                                         

  218.                                         }

  219.                                 L2=1;

  220.                         }

  221.                         else if((KEY==0)&&(i==8)&&(key_press!=1))

  222.                         {

  223.                                 L3=0;

  224.                                 delay(100);

  225.                                 switch(key_press%6)

  226.                                         {

  227.                                                 case 2:xmin--;if(xmin<0)xmin=59;break;

  228.                                                 case 3:xhour--;if((xhour==0)&&(xmin==0)){xhour=0;xmin=10;}else if(xhour<0)xhour=19;break;

  229.                                                 case 4:smin--;if(smin<0)smin=59;break;

  230.                                                 case 5:shour--;if((shour==0)&&(smin==0)){shour=0;smin=5;}else if(shour<0)shour=19;break;        

  231.                                         }        

  232.                                 L3=1;

  233.                         }

  234.                 }

  235.                 else

  236.                 {

  237.                         zcxs(key_press);

  238.                 }

  239.         }

  240. }



  241. void main()

  242. {

  243.         init();

  244.         while(1)

  245.         {

  246.                 key_scan();

  247.         }



  248. }
復(fù)制代碼



Proteus仿真文件下載: 定時開關(guān)仿真.rar (88.64 KB, 下載次數(shù): 15)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品一区二区www | 精品毛片在线观看 | 国产精品久久久久久久久久久久 | 午夜爱爱毛片xxxx视频免费看 | 久久一区二区三区电影 | 免费视频一区二区 | 欧美精品一二三 | 国产精品精品视频 | 日韩免费毛片视频 | 久久久国产一区 | 欧美日韩专区 | 日本一区二区三区在线观看 | 久久综合国产 | 精品在线一区二区三区 | 国产黄色av电影 | 亚洲视频一区二区三区四区 | 亚洲综合在线视频 | 中文字幕日韩在线 | 日韩免费一区 | 久久精品国产一区老色匹 | 日韩久久久久久久久久久 | 日本午夜视频 | 免费国产一区 | 欧美 日韩 亚洲91麻豆精品 | 亚洲乱码国产乱码精品精的特点 | 国产精品一区二区久久 | 精品国产99 | 99久久免费精品视频 | 日韩1区 | 国产高清在线精品一区二区三区 | 精品国产一区二区三区性色 | 狠狠爱一区二区三区 | 国产激情一区二区三区 | 精产国产伦理一二三区 | 毛片网在线观看 | 在线观看特色大片免费网站 | 91大神在线资源观看无广告 | 欧美日韩在线一区二区 | 亚洲人成一区二区三区性色 | 999精品在线观看 | 久久精品一区二区三区四区 |