找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2106|回复: 0
打印 上一主题 下一主题
收起左侧

电瓶车充电定时器

[复制链接]
跳转到指定楼层
楼主
ID:71259 发表于 2014-12-29 20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


  1. /////////////////////////////////////////
  2. ///作者:改变                       //
  3. ///名称:电瓶车定时充电器,到时间断开  //
  4. ///日期:2010.11.26                    //
  5. /////////////////////////////////////////

  6. #include <reg52.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. unsigned char rem[6]={0,7,3,0,0,0};
  10. unsigned code bcd[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x7f};
  11. uint m0,j;
  12. bit DD_1,SMXS;
  13. sbit  DD=P0^7;
  14. sbit  DSKG=P3^1;
  15. sbit  SB1=P1^0;                  //分时切换键
  16. sbit  SB2=P1^1;                  //时减减
  17. sbit  SB3=P1^2;                  //分减减
  18. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  19. void yanshi()
  20. {uint kk;
  21. kk=100;
  22. while(kk--);
  23. }
  24. ////////////显示分秒
  25. xianshim()
  26. {unsigned char i;
  27. for (i=2;i<6;i++)
  28.      {
  29.       P2=~(0x01<<(i-2));
  30.       P0=bcd[rem[i]];
  31.       if((i-2)==1)if(DD_1)DD=0;
  32.       yanshi();
  33.       P0=0xff;
  34.       }
  35. }
  36. /////////////////////////////////
  37. ////////////显示时分
  38. xianshis()
  39. {unsigned char i;
  40. for (i=0;i<4;i++)
  41.      {
  42.       P2=~(0x01<<i);
  43.       P0=bcd[rem[i]];
  44.       if(i==1)if(DD_1)DD=0;
  45.       yanshi();
  46.       P0=0xff;
  47.       }
  48. }
  49. /////////////////////////////////
  50. jishi() interrupt 1
  51. {
  52. TH0=(65536-46080)/256;
  53. TL0=(65536-46080)%256;
  54. m0++;
  55. if(m0==9)DD_1=~DD_1;
  56. if(m0==20)/////////////////20次一秒
  57.   {
  58.   DD_1=~DD_1;
  59.   m0=0;
  60.   if(rem[5]==0)
  61.      {
  62.    if(rem[4]==0)
  63.        {
  64.      if(rem[3]==0)
  65.      {
  66.          if(rem[2]==0)
  67.             {
  68.        if(rem[1]==0)
  69.                      {
  70.               if(rem[0]==0)
  71.               {
  72.          DSKG=1;////////////全零零时断电
  73.          TR0=0;
  74.          rem[0]=rem[1]=rem[2]=rem[3]=rem[4]=rem[5]=0;
  75.          }
  76.         else
  77.          {
  78.          rem[0]--;
  79.          rem[1]=rem[3]=rem[5]=9;
  80.          rem[2]=rem[4]=5;
  81.           }
  82.        }
  83.         else
  84.        {
  85.         rem[1]--;
  86.         rem[2]=rem[4]=5;
  87.         rem[3]=rem[5]=9;
  88.         }
  89.        }
  90.      else
  91.       {
  92.       rem[2]--;
  93.       rem[4]=5;
  94.       rem[3]=rem[5]=9;
  95.       }
  96.          }
  97.      else
  98.      {
  99.      rem[3]--;
  100.      rem[4]=5;
  101.      rem[5]=9;
  102.      }
  103.         }
  104.    else
  105.     {
  106.     rem[4]--;
  107.     rem[5]=9;
  108.     }
  109.   }
  110.     else rem[5]--;   
  111.   }   

  112. }
  113. /////////////////////////////////
  114. anjian()
  115. {
  116. P1=0xff;
  117. if(SB1==0)
  118.    {
  119.     yanshi();
  120. if(SB1==0)
  121.     {
  122.      while(SB1==0);
  123.   SMXS=~SMXS;
  124.   }
  125. }
  126. if(SB2==0)
  127.    {
  128.     yanshi();
  129. if(SB2==0)
  130.     {
  131.      while(SB2==0);
  132.   if(rem[1]==0)
  133.      {
  134.       if(rem[0]==0)
  135.       {
  136.       rem[0]=rem[1]=1;
  137.       }
  138.       else
  139.       {
  140.       rem[0]--;
  141.       rem[1]=9;
  142.       }
  143.    }
  144.   else rem[1]--;
  145.        }
  146.   }
  147. if(SB3==0)
  148.    {
  149.     yanshi();
  150. if(SB3==0)
  151.     {
  152.      while(SB3==0);
  153.   if(rem[3]==0)
  154.      {
  155.        if(rem[2]==0)
  156.        {
  157.      rem[2]=5;
  158.      rem[3]=9;
  159.      }
  160.     else
  161.         {
  162.         rem[2]--;
  163.      rem[3]=9;
  164.       }
  165.    }
  166.   else rem[3]--;
  167.      }
  168. }
  169. }
  170. //////////////////////////////////
  171. void main(void)
  172. {
  173. m0=0;
  174. TMOD=0x01;
  175. TH0=(65536-45833)/256;
  176. TL0=(65536-45833)%256;
  177. EA=1;
  178. ET0=1;
  179. TR0=1;
  180. DSKG=0;
  181. j=0;
  182. while(1)
  183.    {
  184.     if(SMXS)xianshis();//时显示
  185. else xianshim();//秒显示
  186. anjian();
  187. j++;
  188. if(j==5000)/////秒时标志定时切换
  189.    {
  190.     j=0;
  191.     SMXS=~SMXS;
  192.     }
  193.    }
  194. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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