
用多线程可以解决:
BeginThread "line2" ' 启动另一个线程
Rem start
x=49
While x<57
KeyPress x,1 ' 从1至8循环按
//Delay
x=x+1
EndWhile
Goto start
Sub line2
//Delay
KeyPress 57,1 ' 按9
//Delay
KeyPress 48,1 ' 按0
Delay 610^5
Gosub line2
Return ' 9和0也是循环按的,10分钟一次
键与键之间的延时你大概需要多少我不清楚,你可以自己设置一下;
方法有很多的啊,可利用中断,也可以不用,看你的硬件怎么连接的了,你的按键是自锁式还是那种微动的?你这样的用自锁的更方便,但下程序对按键无要求,我没加防抖动的延时,就是给你讲一下原理,自己应用的时候别忘记加上:
不用中断的:
设你所谓的时钟按键为key_stop,即sbit key_stop=P1^0;并且假设你的按键按下时是接地的(下同)。
时间的显示程序大体如下
void main()
{
while(key_stop==1)
{
display_time();
}
while(key_stop==0);
key_stop=1;
}
display_time();就是你的时间显示的子程序。
这是利用中断的:
假设你用T1作为计时的定时器,将按键连接在单片机的INT0引脚即P3^2上。
sbit key_stop=P3^2;
unsigned char flag_key_stop;
void init_INT0()//外部中断初始化程序
{
IT0=0;//低电平触发
EX0=1;//使能int0中断
EA=1;//使能全局中断
}
void init_T1()//T1初始化程序 就不详细列了 你肯定会的
{
····
}
void main()
{
init_INT0();
init_T1();
while(flag_key_stop==0)
{
display_time();
}
while(flag_key_stop==1);
flag_key_stop=0;
}
void INT0() interrupt 0
{
flag_key_stop=1;
}
我是直接在答案上写的,没有经过KEIL的编译,也不知道哪里会有语法错误,主要就是给你介绍这个思想。
void Key(void)//NXP1778没有用过,我就用51举例了
{
int t;
if(P1 != 0xff)//按键在P0口
{
Delay1ms(10); //消抖,延时程序,
if(P1 != 0xff)//确认按下
{
//这里还可以判断按下的是哪一个按键
while(1)
{
Delay1ms(1);//每次延时1ms
t++;//累积延时时间
if(P1 == 0xff) break;//按键松开,跳出循环
}
if(t > 500) //代表一次短按,
if(t > 5000) //一次长按,时间超过5s,
}
}
}
//不足之处,还望包涵
以上就是关于按键精灵如何设置定时按键全部的内容,包括:按键精灵如何设置定时按键、单片机时钟按键长按时,如何实现时间显示继续运行、求单片机最好是NXP1778其他也可以,我参考一下定时5秒长按按键有效进入执行程序否则执行另一程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)