找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2775|回复: 1
收起左侧

单片机100分钟定时继电器程序

[复制链接]
ID:102668 发表于 2016-1-16 05:51 | 显示全部楼层 |阅读模式
  1. #include<reg51.h>
  2. sbit Key_UP=P1^0;
  3. sbit Key_DOWN=P1^1;
  4. unsigned char KeyV,TempKeyV;         
  5. sbit P25=P2^0;//数码管第1位
  6. sbit P26=P2^1;//数码管第2位
  7. sbit gang=P2^2;//分钟与秒的间隔符
  8. sbit P27=P2^3;//数码管第4位
  9. sbit P28=P2^4;
  10. sbit qian=P1^4;
  11. sbit bai=P1^5;
  12. sbit JDQ=P3^7;//继电器
  13. unsigned int js;
  14. unsigned int ds,x,y;//倒计时初始时间,加时,减时
  15. unsigned char jsflag;
  16. static unsigned int i;
  17. unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};
  18. void Delay(unsigned int ii) //1MS
  19. {
  20. unsigned int jj;
  21. for(;ii>0;ii--)
  22. for(jj=0;jj<125;jj++)
  23. {;}
  24. }
  25. void main()
  26. {
  27.     EA = 1;     //允许CPU中断
  28. ET0 = 1;     //定时器0中断打开
  29. ET1=1;     //定时器1中断打开
  30. TMOD = 0x11;   //设定时器0 1为模式1,16位模式
  31. TH0=0xB8;
  32. TL0=0x00;    //设定时值为(20ms)
  33. TH1=0xdc;     //设定时值为(10ms)
  34. TL1=0x00;
  35. TR0 = 1;
  36. TR1=1;
  37. ds=9999;
  38. KeyV = 0;
  39. TempKeyV = 0;
  40. jsflag=0;
  41. while(1);
  42. }
  43. //定时器0中断外理中键扫描和显示
  44. void Key_Time0(void) interrupt 1 using 2
  45. {
  46.   TH0=0xB8;
  47. TL0=0x00;    //设定时值为20000us(20ms)
  48.   if (!Key_UP)
  49.     KeyV = 1;
  50.   if (!Key_DOWN)
  51.     KeyV = 2;
  52.    if (KeyV!= 0)      //有键按下
  53.     {
  54.       Delay(10);   //延时防抖  按下10ms再测
  55.       if (!Key_UP)
  56.         TempKeyV = 1;
  57.       if (!Key_DOWN)
  58.         TempKeyV = 2;
  59.    if (KeyV == TempKeyV)   //两次值相等为确定接下了键
  60.     {
  61.         if (KeyV == 1)
  62.      {
  63.                      jsflag=0;
  64.             if(ds==0)
  65.          {
  66.          ds=6000;
  67.          }
  68.         js=js+1;
  69.        JDQ=0;   //继电器吸合
  70.       
  71.                         if(js==50)
  72.                             {
  73.                           js=0;
  74.                           ds=ds-1;

  75.                              }
  76.            }
  77. if(KeyV==2)
  78. {
  79.    jsflag=1;
  80. }
  81. }
  82. }
  83.    if(jsflag==1)
  84.    {
  85.    JDQ=1;
  86.    }
  87.    if(ds==0)
  88.    {
  89.    JDQ=1;
  90.    jsflag=1;
  91.    KeyV=0;
  92.    }

  93. }
  94. void disp_Time1(void) interrupt 3 using 3
  95. {
  96. TH1=0xdc;
  97. TL1=0x00;
  98. x=ds/1000;
  99.     P0=LEDDis[x];
  100. P25=0;
  101.   Delay(2);
  102.    P25=1;
  103.    y=(ds%1000)/100;
  104.       P0=LEDDis[y];
  105.       P26=0;
  106.       Delay(2);
  107.       P26=1;
  108. P0=0xbf;
  109. gang=0;
  110. Delay(2);
  111. gang=1;
  112.   P0=LEDDis[((ds%1000)%100)/10];
  113.   if(((ds%1000)%100)/10>=6)   //满60,百位减一
  114.   {
  115.   ds=ds-10;
  116.   P0=LEDDis[6];
  117.   }
  118.   P27=0;
  119.   Delay(2);
  120.   P27=1;
  121.   P0=LEDDis[((ds%1000)%100)%10];
  122.   P28=0;
  123.   Delay(2);
  124.   P28=1;
  125. }
复制代码


回复

使用道具 举报

ID:95809 发表于 2016-1-19 20:12 | 显示全部楼层
好像是我写的那个,连IO口都没改。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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