单片机通过按键切换程序

2020-02-04 09:19发布

我想编写一个按键控制流水灯花样的程序,不是单键的,而是按某一个键出现一种花样,按另一个键又出现另外一种花样。我编写的老是出不来效果。请知道的朋友帮下忙,谢了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
badboy007
1楼-- · 2020-02-06 23:51
上面这个是一个比较简洁的实现方式。可以参考一下。
yao1
2楼-- · 2020-02-07 03:19
初学者不用这么麻烦吧 没理解会打击积极性的 你还是先理解怎么切换状态 理解了再把按键里面的delay换成状态机看看
1个键都能循环切换 何况多个键
/*上电LED处于灭状态,按1次开关,快闪1秒4次;按2次慢闪1秒2次;按3次常亮;按4次灭;功能循环 */
#include<reg51.h>
sbit LED1=P1^2;
sbit LED2=P1^6;
sbit KEY=P3^7;
unsigned int time;
unsigned char program;
void Delayms(unsigned int ms)
{
  unsigned int i=1000;
  for(;ms>0;ms--)
    for(i=500;i>0;i--);

}
void t0()interrupt 1 using 1
{
     if(program==0)//mie
     {
          LED1=LED2=1;   
     }
     else if(program==1)//KUAI
     {
          time++; //10ms加1
          if(time>25) //250ms
          {
               time=0;
               LED1=LED2=!LED1;
          }   
     }
     else if(program==2)//man
     {
          time++;
          if(time>50)
          {
               time=0;
               LED1=LED2=!LED1;
          }
   
     }
     else if(program==3)//liang
     {
          LED1=LED2=0;
     }

     TH0=216;//TH0=(65536-10240)/256 10ms中断1次
}
void main()
{
     bit keyflag=0;
     TMOD=0X01;
     TR0=1;
     ET0=1;
     EA=1;
     while(1)
     {
          if((KEY==0)&&(keyflag)==0)
          {
               Delayms(10);
               if(program<3)program++;
               else program=0;
               keyflag=1;      
          }
          else if(KEY)
          {
               keyflag=0;
               Delayms(10);
          }  
     }
}
xiaobendan
3楼-- · 2020-02-07 05:44
 精彩回答 2  元偷偷看……
52171314
4楼-- · 2020-02-07 08:06
呵呵~~ 二楼的方法很好
zengdz
5楼-- · 2020-02-07 13:16
回复【17楼】kolinking
-----------------------------------------------------------------------

谢了,不太会处理全局关系,各位多包涵呀,呵呵
zengdz
6楼-- · 2020-02-07 13:51
回复【22楼】52171314 一世孤云
-----------------------------------------------------------------------

我也是南昌的耶

一周热门 更多>