找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2597|回复: 0
收起左侧

单片机车型空调控制系统程序+万年历Proteus仿真

[复制链接]
ID:511094 发表于 2019-11-20 20:35 | 显示全部楼层 |阅读模式
7U$EPZDK~[EKBC5355@PM]J.png

单片机源程序如下:
  1. #include <at89x51.h>                                //头文件
  2. #include "18b20.h"
  3. #include "1302.h"
  4. #include "12864.h"
  5. #include "zifu.h"
  6. #include "Time.h"
  7. #include "Delay.h"

  8. sbit People_KEY_ADD        = P1^0;                   //人数加按键
  9. sbit People_KEY_DEC        = P1^1;                   //人数减按键

  10. int People = 0;                   //人数值,默认为0





  11. uchar k,direction;
  12. bit flag;
  13. bit flag5=0;                           //flag5是外部中断1的标志位 flag1是步进标志
  14. uchar p,dengji;               //定时次数
  15. bit flag1=0;
  16. systemtime realtime;
  17. bit first=1;                                   //中断次数控制

  18. void Display_People(void);
  19. void KEY_People(void);

  20. /*=========================================
  21. //定时器中断,
  22. =========================================*/
  23. void dingshi() interrupt 1  using 1  //定时程序.产生步进时间
  24. {
  25.    if(p--)
  26.    {
  27.     TL0=0;
  28.         TH0=0xa0;
  29.         flag1=0;
  30.    }
  31.    else
  32.    {
  33.      flag1=1;
  34.          TL0=0;
  35.          TH0=0x00;
  36.          p=20-(dengji>>1);
  37.    }
  38. }

  39. /*=========================================
  40. //中断函数 ,用于检测时间调节按键
  41. =========================================*/
  42. void zhongduan() interrupt 0 using 0
  43.   {
  44.     uchar i=0;
  45.         if(first)               //FIRST=1;打开方向按键判断标志
  46.         {
  47.         first=0;            
  48.         k=(P2>>6);           
  49.         k=k&0x03;                                
  50.         if(flag)
  51.           {
  52.             if(k==1)     direction=3;//左
  53.             if(k==2)         direction=1;//右
  54.              }
  55.           else
  56.            {
  57.             if(k==0)         direction=4;//上
  58.             if(k==3)         direction=2;//下
  59.              }
  60.         }
  61.   }
  62.                                  


  63. /*万年历子程序*/                                          
  64. void wannianli(void)
  65. {
  66.   uchar i;
  67.   uchar count1=0;
  68.   k=0;
  69.   choose12864(2);
  70.   init12864();
  71.   clear12864();
  72.   play8(0,0,0,shu2);                 //屏,列,页,地址
  73.   play8(0,1,0,shu0);
  74.   play16(0,4,0,nian);
  75.   play16(1,0,0,yue);
  76.   play16(1,4,0,ri);
  77.   play16(0,2,1,shi);
  78.   play16(0,6,1,fen);
  79.   play16(1,2,1,miao);

  80.   play16(1,0,2,xing);
  81.   play16(1,2,2,qi);
  82.   vertical(3,63,127);
  83.   vertical(3,63,126);
  84.   vertical(3,63,122);
  85.   vertical(3,63,121);
  86.    for(i=0;i<7;i++)
  87.   {
  88.     dot(121+i,3);
  89.         dot(121+i,63);
  90.   }
  91.   for(i=0;i<12;i++)
  92.   {
  93.     dot(123,8+5*i);
  94.   }
  95.         play16(0,0,3,che);
  96.         play16(0,2,3,xiang);
  97.         play16(0,4,3,ren);
  98.         play16(0,6,3,shu);
  99. //  for(i=0;i<7;i++)
  100. //  {
  101. //    if(i<4)
  102. //        {
  103. //          play16(0,i<<1,3,yanyu+(i<<5));
  104. //        }
  105. //        if(i>=4)
  106. //        {
  107. //          play16(1,(i-4)<<1,3,yanyu+(i<<5));
  108. //        }
  109. //  }
  110.   init_ds1302();
  111.   init_time();
  112.   flag5=0;
  113.   do
  114.   {
  115.            KEY_People();
  116.           Display_People();
  117.      if(P3&0x04)
  118.      first=1;
  119.      init_ds1302();
  120.      gettime(&realtime);
  121.          play8(0,2,0,(shu0+(datastring[0]<<4)));
  122.          play8(0,3,0,(shu0+(datastring[1]<<4)));
  123.          play8(0,6,0,(shu0+(datastring[2]<<4)));
  124.          play8(0,7,0,(shu0+(datastring[3]<<4)));
  125.          play8(1,2,0,(shu0+(datastring[4]<<4)));
  126.          play8(1,3,0,(shu0+(datastring[5]<<4)));
  127.          play8(0,0,1,(shu0+(datastring[6]<<4)));
  128.          play8(0,1,1,(shu0+(datastring[7]<<4)));
  129.          play8(0,4,1,(shu0+(datastring[8]<<4)));
  130.          play8(0,5,1,(shu0+(datastring[9]<<4)));
  131.          play8(1,0,1,(shu0+(datastring[10]<<4)));
  132.          play8(1,1,1,(shu0+(datastring[11]<<4)));
  133.          play16(1,4,2,(yi+((datastring[12]-2)<<5)));
  134.          gettemperature();
  135.          if(flagg)
  136.          {
  137.            play8(0,0,2,fu);
  138.            play8(1,6,3,fu);
  139.          }
  140.          else
  141.           {
  142.             clear8(6,4,0);
  143.                 play8(1,6,3,zheng);
  144.           }
  145.          play8(0,4+flagg,2,dian);
  146.      play8(0,5+flagg,2,C);
  147.          play8(0,0+flagg,2,(shu0+(temp[0]<<4)));
  148.          play8(0,1+flagg,2,(shu0+(temp[1]<<4)));
  149.          play8(0,2+flagg,2,xiao);
  150.          play8(0,3+flagg,2,(shu0+(temp[2]<<4)));
  151.          play();
  152.          dot(124,3);
  153.          if((k==0x02)&&((P3&0x04)==0x04))
  154.          {
  155.            count1++;
  156.            if(count1==7)
  157.            count1=0;
  158.            switch (count1)
  159.            {
  160.              case 0:
  161.                         {
  162.                   play16(1,0,2,xing);
  163.                   play16(1,2,2,qi);
  164.                                   k=0;break;
  165.                                 }
  166.          
  167.              case 1:
  168.                         {
  169.                                   play16_fb(0,4,0);                        
  170.                                   k=0; break;
  171.                                 }
  172.                 case 2:
  173.                         {
  174.                   play16(0,4,0,nian);
  175.                   play16_fb(1,0,0);
  176.                                   k=0;break;                                 
  177.                                 }
  178.             case 3:
  179.                         {
  180.                                   play16(1,0,0,yue);
  181.                   play16_fb(1,4,0);
  182.                                   k=0;break;
  183.                                 }  
  184.                 case 4:
  185.                         {
  186.                                   play16(1,4,0,ri);
  187.                   play16_fb(0,2,1);
  188.                                   k=0;break;
  189.                                 }
  190.                 case 5:
  191.                         {
  192.                                   play16(0,2,1,shi);
  193.                   play16_fb(0,6,1);
  194.                                   k=0;break;
  195.                                 }
  196.                 case 6:
  197.                         {
  198.                                    play16(0,6,1,fen);
  199.                                    play16_fb(1,0,2);
  200.                    play16_fb(1,2,2);
  201.                                    k=0;break;
  202.                                 }
  203.                 default:k=0;break;
  204.            }
  205.          }
  206.          if((k==0x03)&&((P3&0x04)==0x04))
  207.          {
  208.            switch(count1)
  209.            {
  210.              case 1:
  211.                          {
  212.                                    setjia(ds1302_year);k=0;break;
  213.                                  }
  214.                  case 2:
  215.                                  {
  216.                                    setjia(ds1302_month);k=0;break;
  217.                                  }
  218.                  case 3:
  219.                                  {
  220.                                    setjia(ds1302_day);k=0;break;
  221.                                  }
  222.                     case 4:
  223.                                  {
  224.                                    setjia(ds1302_hour);k=0;break;
  225.                                  }
  226.                  case 5:
  227.                                  {
  228.                                    setjia(ds1302_minute);k=0;break;
  229.                                  }
  230.                  case 6:
  231.                                  {
  232.                                   setjia(ds1302_week);k=0;break;
  233.                                  }
  234.            }
  235.          }
  236.          if((k==0x01)&&((P3&0x04)==0x04))
  237.          {
  238.            switch(count1)
  239.            {
  240.              case 1:
  241.                          {
  242.                                    setjian(ds1302_year);k=0;break;
  243.                                  }
  244.                  case 2:
  245.                                  {
  246.                                    setjian(ds1302_month);k=0;break;
  247.                                  }
  248.                  case 3:
  249.                                  {
  250.                                    setjian(ds1302_day);k=0;break;
  251.                                  }
  252.                     case 4:
  253.                                  {
  254.                                    setjian(ds1302_hour);k=0;break;
  255.                                  }
  256.                  case 5:
  257.                                  {
  258.                                    setjian(ds1302_minute);k=0;break;
  259.                                  }
  260.                  case 6:
  261.                                  {
  262.                                    setjian(ds1302_week);k=0;break;
  263.                                  }
  264.            }
  265.         }
  266.   }        while(!flag5);
  267. }

  268. /*=========================================
  269. //人数调节按键函数
  270. =========================================*/
  271. void KEY_People( void )
  272. {
  273.         //人数加
  274.         if( People_KEY_ADD == 0 )                                //按键按下
  275.         {
  276.                 Delay_ms( 2 );                         //延时消抖
  277.                 if( People_KEY_ADD == 0 )                          //再次检测
  278.                 {
  279.                         Delay_ms( 2 );                         //延时消抖
  280.                         while( !People_KEY_ADD );                        //松手检测        
  281.                         People++;
  282.                         if( People >= 9999 )
  283.                         {
  284.                                 People = 9999;
  285.                         }
  286.                 }
  287.         }
  288.         //人数减
  289.         if( People_KEY_DEC == 0 )                                //按键按下
  290.         {
  291.                 Delay_ms( 2 );                         //延时消抖
  292.                 if( People_KEY_DEC == 0 )                          //再次检测
  293.                 {
  294.                         Delay_ms( 2 );                         //延时消抖
  295.                         while( !People_KEY_DEC );                        //松手检测        
  296.                         People--;
  297.                         if( People <= 0 )
  298.                         {
  299.                                 People = 0;
  300.                         }
  301.                 }
  302.         }
  303. }

  304. /*=========================================
  305. //人数调节按键函数
  306. =========================================*/
  307. void Display_People( void )
  308. {
  309.         //显示千位
  310.         play8(1,0,3,maohao);
  311.         if( People/1000 == 0 )
  312.         {
  313.                 play8(1,1,3,shu0);        
  314.         }
  315.         if( People/1000 == 1 )
  316.         {
  317.                 play8(1,1,3,shu1);        
  318.         }
  319.         if( People/1000 == 2 )
  320.         {
  321.                 play8(1,1,3,shu2);        
  322.         }
  323.         if( People/1000 == 3 )
  324.         {
  325.                 play8(1,1,3,shu3);        
  326.         }
  327.         if( People/1000 == 4 )
  328.         {
  329.                 play8(1,1,3,shu4);        
  330.         }
  331.         if( People/1000 == 5 )
  332.         {
  333.                 play8(1,1,3,shu5);        
  334.         }
  335.         if( People/1000 == 6 )
  336.         {
  337.                 play8(1,1,3,shu6);        
  338.         }
  339.         if( People/1000 == 7 )
  340.         {
  341.                 play8(1,1,3,shu7);        
  342.         }
  343.         if( People/1000 == 8 )
  344.         {
  345.                 play8(1,1,3,shu8);        
  346.         }
  347.         if( People/1000 == 9 )
  348.         {
  349.                 play8(1,1,3,shu9);        
  350.         }

  351.         //显示摆位
  352.         if( People%1000/100 == 0 )
  353.         {
  354.                 play8(1,2,3,shu0);        
  355.         }
  356.         if( People%1000/100 == 1 )
  357.         {
  358.                 play8(1,2,3,shu1);        
  359.         }
  360.         if( People%1000/100 == 2 )
  361.         {
  362.                 play8(1,2,3,shu2);        
  363.         }
  364.         if( People%1000/100 == 3 )
  365.         {
  366.                 play8(1,2,3,shu3);        
  367.         }
  368.         if( People%1000/100 == 4 )
  369.         {
  370.                 play8(1,2,3,shu4);        
  371.         }
  372.         if( People%1000/100 == 5 )
  373.         {
  374.                 play8(1,2,3,shu5);        
  375.         }
  376.         if( People%1000/100 == 6 )
  377.         {
  378.                 play8(1,2,3,shu6);        
  379.         }
  380.         if( People%1000/100 == 7 )
  381.         {
  382.                 play8(1,2,3,shu7);        
  383.         }
  384.         if( People%1000/100 == 8 )
  385.         {
  386.                 play8(1,2,3,shu8);        
  387.         }
  388.         if( People%1000/100 == 9 )
  389.         {
  390.                 play8(1,2,3,shu9);        
  391.         }

  392.         //显示十位
  393.         if( People%100/10 == 0 )
  394.         {
  395.                 play8(1,3,3,shu0);        
  396.         }
  397.         if( People%100/10 == 1 )
  398.         {
  399.                 play8(1,3,3,shu1);        
  400.         }
  401.         if( People%100/10 == 2 )
  402.         {
  403.                 play8(1,3,3,shu2);        
  404.         }
  405.         if( People%100/10 == 3 )
  406.         {
  407.                 play8(1,3,3,shu3);        
  408.         }
  409.         if( People%100/10 == 4 )
  410.         {
  411.                 play8(1,3,3,shu4);        
  412.         }
  413.         if( People%100/10 == 5 )
  414.         {
  415.                 play8(1,3,3,shu5);        
  416.         }
  417.         if( People%100/10 == 6 )
  418.         {
  419.                 play8(1,3,3,shu6);        
  420.         }
  421.         if( People%100/10 == 7 )
  422.         {
  423.                 play8(1,3,3,shu7);        
  424.         }
  425.         if( People%100/10 == 8 )
  426.         {
  427.                 play8(1,3,3,shu8);        
  428.         }
  429.         if( People%100/10 == 9 )
  430.         {
  431.                 play8(1,3,3,shu9);        
  432.         }

  433.                 //显示个位
  434.         if( People%10 == 0 )
  435.         {
  436.                 play8(1,4,3,shu0);        
  437.         }
  438.         if( People%10 == 1 )
  439.         {
  440.                 play8(1,4,3,shu1);        
  441.         }
  442.         if( People%10 == 2 )
  443.         {
  444.                 play8(1,4,3,shu2);        
  445.         }
  446.         if( People%10 == 3 )
  447.         {
  448.                 play8(1,4,3,shu3);        
  449.         }
  450.         if( People%100 == 4 )
  451.         {
  452.                 play8(1,4,3,shu4);        
  453.         }
  454.         if( People%10 == 5 )
  455.         {
  456.                 play8(1,4,3,shu5);        
  457.         }
  458.         if( People%10 == 6 )
  459.         {
  460.                 play8(1,4,3,shu6);        
  461.         }
  462.         if( People%10 == 7 )
  463.         {
  464.                 play8(1,4,3,shu7);        
  465.         }
  466.         if( People%10 == 8 )
  467.         {
  468.                 play8(1,4,3,shu8);        
  469.         }
  470.         if( People%10 == 9 )
  471.         {
  472.                 play8(1,4,3,shu9);        
  473.         }

  474. }

  475. /*=========================================
  476. //主函数
  477. =========================================*/
  478. void main(void)
  479. {
  480.         P2=0xff;
  481.         TIME_Init();
  482.         choose12864(2);
  483.         init12864();
  484.         clear12864();
  485.         
  486.         
  487.         play16(0,4,2,wnl);
  488.         play16(0,6,2,wnl+32);
  489.         play16(1,0,2,wnl+64);

  490.         while(1)
  491.         {
  492.                 play16(0,4,2,wnl);
  493.                 play16(0,6,2,wnl+32);
  494.                 play16(1,0,2,wnl+64);
  495.                 play16_fb(0,4,0);
  496.                 play16_fb(0,6,0);
  497.                 play16_fb(1,0,0);
  498.                
  499.                
  500.                 wannianli();
  501.                
  502.                  choose12864(2);
  503.                  init12864();
  504.                  clear12864();
  505.                
  506.                  play16(0,4,2,wnl);
  507.                  play16(0,6,2,wnl+32);
  508.                  play16(1,0,2,wnl+64);
  509.         }
  510. }


复制代码
全部资料51hei下载地址:
DSP_万年历.zip (64.18 KB, 下载次数: 41)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表