call key
jmp loop
key:
jnb p30,rel
ret
rel:
call delay20MS
jnb p30,rel
第一次这里标志位为0,则执行,第一次按下功能。
是两个子程序。单片机按键切换lcd显示是两个子程序。单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统。
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
void delayms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void main(void)
{
uchar i;
while(1)
{
for(i=0;i<8;i++)
{
P2=0X01<<i;
delay_ms(200);
}
}
}
现在一般不用2051了,呵呵,不过仿真也没事。
这程序可以这样写:设一个变量作为按键的键值,按下为1,再次按下为0;首先写一个流水灯的子程序,然后再主函数里去识别之前设置的键值,=1--->去执行流水灯;=0--->直接把P1口赋值0(也就是全亮)。这样就可以实现了。
#include<reg51h>
#define uchar unsigned char
#define uint unsigned int
uchar time,sec,keyval;
sbit D1=P3^3;
sbit D2=P3^4;
sbit KEY=P3^5;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time>=20)sec++;
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
keyval=0;
while(1)
{
switch(keyval)
{
case 0: TR0=1;sec=0;
if(sec<30){D1=0;D2=1;}
else {D1=1;D2=1;}
break;
case 1: TR0=1;sec=0;
if(sec<30){D1=1;D2=0;}
else {D1=1;D2=1;}
break;
case 2: TR0=1;sec=0;
if(sec<30){D1=0;D2=1;}
if(sec>=30 && sec<60){D1=1;D2=0;}
else {D1=1;D2=1;}
break;
default:break;
}
}
}
长按3秒进入程序可以这样
while(1)
{
if( key==0)//按键按下
{
cnt++;
if( cnt>300)
{
cnt=0;//到3秒,退出本循环进入下一段程序
break;
}
dely(10);//延时10毫秒
}
}
while(1)
{
//此为主程序段
}
参考如下:
假设按键按下为低电平;
if(key1==0)
{
while(key1==0);//d起后执行
{
按键1需要执行的功能;
}
}
if(key2==0)
{
while(key2==0);//d起后执行
{
按键2需要执行的功能;
}
}
以上就是关于怎么让单片机按一下按键执行一个程序,再按一下马上执行另一个程序全部的内容,包括:怎么让单片机按一下按键执行一个程序,再按一下马上执行另一个程序、单片机按键切换lcd显示、C51单片机按键切换流水灯等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)