找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3752|回复: 4
收起左侧

关于单片机24秒倒计时添加按键控制程序的问题

[复制链接]
ID:421426 发表于 2019-1-23 10:05 | 显示全部楼层 |阅读模式
我写了一个24秒倒计时的程序    想添加按键去控制暂停  继续    等功能    我应该把按键程序添加在什么位置    该怎么去写
这是我的程序:

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. sbit key1=P3^4;
  7. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  8.                                         0x7f,0x6f,0x40};
  9. uchar code tablefen[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  10.                                         0x7f,0x6f};
  11. uchar code tablemiao[]={0x3f,0x7d,0x6f,0x4f,0x7d,0x6f,0x4f,0x7d,0x6f};
  12. uchar num,num1,num2,num3,ge,shi,fen,miao;
  13. void delayms(uint);
  14. void display(uchar,uchar);
  15. void display1(uchar,uchar);
  16. void main()
  17. {
  18.         dula=1;
  19.         P0=table[2];
  20.         dula=0;

  21.         P0=0xff;

  22.         wela=1;
  23.         P0=0xfe;
  24.         wela=0;

  25.         delayms(1);

  26.         dula=1;
  27.         P0=table[4];
  28.         dula=0;

  29.         P0=0xff;

  30.         wela=1;
  31.         P0=0xfd;
  32.         wela=0;

  33.         delayms(1);

  34.         dula=1;
  35.         P0=table[10];
  36.         dula=0;

  37.         P0=0xff;

  38.         wela=1;
  39.         P0=0xfb;
  40.         wela=0;

  41.         delayms(1);

  42.         dula=1;
  43.         P0=table[10];
  44.         dula=0;

  45.         P0=0xff;

  46.         wela=1;
  47.         P0=0xf7;
  48.         wela=0;

  49.         delayms(1);        

  50.         dula=1;
  51.         P0=table[0];
  52.         dula=0;

  53.         P0=0xff;

  54.         wela=1;
  55.         P0=0xef;
  56.         wela=0;

  57.         delayms(1);

  58.         dula=1;
  59.         P0=table[0];
  60.         dula=0;

  61.         P0=0xff;

  62.         wela=1;
  63.         P0=0xdf;
  64.         wela=0;

  65.         delayms(1);        

  66.         num1=24;
  67.         shi=2;
  68.         ge=3;
  69.         fen=0;
  70.         miao=0;
  71.         TMOD=0x11;
  72.         TH0=(65536-45872)/256;
  73.         TL0=(65536-45872)%256;
  74.         TH1=(65536-45872)/256;
  75.         TL1=(65536-45872)%256;
  76.         EA=1;
  77.         ET0=1;
  78.         ET1=1;
  79.         TR0=1;
  80.         TR1=1;
  81.         while(1)
  82.         {
  83.                                                 display1(fen,miao);
  84.                                                 display(shi,ge);                                       
  85.         }
  86. }

  87. void display(uchar shi, uchar ge)
  88. {
  89.         dula=1;
  90.         P0=table[shi];
  91.         dula=0;

  92.         P0=0xff;

  93.         wela=1;
  94.         P0=0xfe;
  95.         wela=0;

  96.         delayms(1);

  97.         dula=1;
  98.         P0=table[ge];
  99.         dula=0;

  100.         P0=0xff;

  101.         wela=1;
  102.         P0=0xfd;
  103.         wela=0;
  104.         delayms(1);

  105.         dula=1;
  106.         P0=table[10];
  107.         dula=0;

  108.         P0=0xff;

  109.         wela=1;
  110.         P0=0xfb;
  111.         wela=0;

  112.         delayms(1);

  113.         dula=1;
  114.         P0=table[10];
  115.         dula=0;

  116.         P0=0xff;

  117.         wela=1;
  118.         P0=0xf7;
  119.         wela=0;

  120.         delayms(1);

  121. }
  122. void display1(uchar fen,uchar miao)
  123. {
  124.         
  125.         dula=1;
  126.         P0=tablefen[fen];
  127.         dula=0;

  128.         P0=0xff;

  129.         wela=1;
  130.         P0=0xef;
  131.         wela=0;

  132.         delayms(1);

  133.         dula=1;
  134.         P0=tablemiao[miao];
  135.         dula=0;

  136.         P0=0xff;

  137.         wela=1;
  138.         P0=0xdf;
  139.         wela=0;

  140.         delayms(1);        
  141. }
  142. void delayms(uint xms)
  143. {
  144.         uint i,j;
  145.         for(i=xms;i>0;i--)
  146.                 for(j=110;j>0;j--);
  147. }
  148. void exter1() interrupt 3
  149. {
  150.         TH1=(65536-45872)/256;
  151.         TL1=(65536-45872)%256;        
  152.         num2++;
  153.         if(num2==2)
  154.                 {
  155.                         num2=0;
  156.                         if(fen==0)
  157.                         fen=9;
  158.                         if(miao==0)
  159.                         miao=9;
  160.                         fen--;
  161.                         miao--;
  162.                 }
  163. }
  164. void exter0() interrupt 1
  165. {
  166.         TH0=(65536-45872)/256;
  167.         TL0=(65536-45872)%256;
  168.         num++;        
  169.         if(num==20)
  170.         {
  171.                 num=0;
  172.                 num1--;
  173.                 if(num1==0)
  174.                         {
  175.                                 P1=0xfe;
  176.                                 delayms(50);
  177.                                 P1=0xff;
  178.                         }
  179.                 if(num1==0)
  180.                 num1=23;
  181.                 shi=num1/10;
  182.                 ge=num1%10;
  183.         }
  184. }
复制代码


回复

使用道具 举报

ID:84765 发表于 2019-1-23 15:22 | 显示全部楼层
在定制器那里添加判断就可以实现暂停继续,这么说应该明白了吧,就是把定制器里的num和num2的计时停了就达到了你想要的效果了!

评分

参与人数 1黑币 +5 收起 理由
坐在分头调戏鬼 + 5

查看全部评分

回复

使用道具 举报

ID:213173 发表于 2019-1-23 22:16 | 显示全部楼层
给你改成单键控制开始、暂停、继续的24秒倒计时。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
                                                        0x7d,0x07,0x7f,0x6f,0x40};
uchar num=0,miao=0;
bit zantin=0;
void delayms(uint);
void keyscan();       
void display();

void main()
{
        TMOD=0x01;
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        EA=1;
        ET0=1;
        TR0=1;

        while(1)
        {
                keyscan();
                display();
        }
}
/***********按键扫描程序****************/
void keyscan()       
{
        static uint count1=0;        //计数变量                       
        static bit key_sign=0;                                        //按键状态标志
        if(key1==0)                                //检测输入如果为0
        {
                count1++;                                        //计数延时消抖
                if((count1>=50)&&(key_sign==0))//检测按键如果为0
                {                       
                        key_sign=1;                //按键状态标志置1,防止重复响应
                        if(miao==0)//开始倒计时
                        {
                                num=0;
                                miao=24;
                                zantin=1;
                        }
                        else zantin=~zantin;        //暂停/继续
                }
        }
        else
        {
                count1=0;                                //计数变量清0
                key_sign=0;                                //按键状态标志清0
        }
}
void display()
{
        P0=0x00;
        dula=1;
        dula=0;

        P0=0xfe;
        wela=1;
        wela=0;
       
        P0=table[miao/10];
        dula=1;
        dula=0;
        delayms(1);
       
        P0=0x00;
        dula=1;
        dula=0;

        P0=0xfd;
        wela=1;
        wela=0;

        P0=table[miao%10];
        dula=1;
        dula=0;
        delayms(1);        
}
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}

void exter0() interrupt 1
{
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        if(zantin==1)      
        {
                num++;
                if(num==20)
                {
                        num=0;
                        if(miao>0)
                                miao--;
                }
        }
}

评分

参与人数 1黑币 +10 收起 理由
坐在分头调戏鬼 + 10 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:421426 发表于 2019-1-24 15:00 | 显示全部楼层
wulin 发表于 2019-1-23 22:16
给你改成单键控制开始、暂停、继续的24秒倒计时。
#include
#define uchar unsigned char

谢谢你的帮助
回复

使用道具 举报

ID:666627 发表于 2019-12-17 20:28 | 显示全部楼层
楼主在吗,这程序我也想用,能把原理图发给我一下吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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