单片机应用,一个键多次按下,能够依次控制红黄蓝绿四个灯控制第一次按下亮红灯然后绿灯依次四下 单片机D1-D8led灯依1次为红黄蓝绿4色交替再重复,循环...
作者&投稿:訾枝 (若有异议请与网页底部的电邮联系)
设置单片机的一个按键,按一下,红灯亮,再按一下,黄灯亮,再按一下,蓝灯亮。再按一下。绿灯亮。~
typedef unsigned char uint8_t; //定义数据类型
sbit key0 = P3^2;//按键对应的引脚,根据实际情况修改。
sbit led0 = P1^0;//LED 对应的引脚,根据实际情况修改。
sbit led1 = P1^1;
sbit led2 = P1^2;
sbit led3 = P1^3;
#define LED_ON 0 //低电平亮灯,根据实际情况修改。
#define LED_OFF (!LED_ON)
bit changeByKey; //换灯标志位
uint8_t cnt;//亮灯状态寄存器
void delay()//短延时函数
{
uint8_t i = 200;
while(-- i);
}
main()
{
key0 = 1;
changeByKey = 0;
led0 = LED_ON;
led1 = LED_OFF;
led2 = LED_OFF;
led3 = LED_OFF;
while(1)
{
delay();
if(key0)//如果按键松开
{
changeByKey = 1;//按键控制换灯
led0 = LED_OFF; //全部熄灭
led1 = LED_OFF;
led2 = LED_OFF;
led3 = LED_OFF;
}
else//按下
{
if(changeByKey)//松开下次按下才能再次生效
{
changeByKey = 0;
cnt ++;
switch(cnt & 3)
{
case 0:
led0 = LED_ON; //亮灯
break;
case 1:
led1 = LED_ON;
break;
case 2:
led2 = LED_ON;
break;
case 3:
led3 = LED_ON;
break;
}
}
}
}
}
一个键多次按下,能够依次控制红黄蓝绿四个灯控制。
第一次按下亮红灯
然后绿灯
依次四下
再第五次按下交替闪烁,松开够都熄灭。
你应该提供一下 shining();这个函数
也许是卡在函数里死循环了出不来。
还有一点就是
下面这一段,最好不要放在keyscan函数里面
键盘程序只负责键盘就好
把下面这段单独做个显示函数
switch(num)
{
case 1: P0=0xf0;
break;
case 2: P0=0x0f;
break;
case 3: P2=0xf0;
break;
case 4: P2=0x0f;
break;
case 5: P0=0x00;P2=0x00;
break;
}
是要实现流水灯吗?
while (1) {
led_on(D1);
delay_ms(50);
led_off(D1);
//后面D2~D8类似写法
}
//感觉写一个for循环,改变led_on() 内部的参数会更方便
typedef unsigned char uint8_t; //定义数据类型
sbit key0 = P3^2;//按键对应的引脚,根据实际情况修改。
sbit led0 = P1^0;//LED 对应的引脚,根据实际情况修改。
sbit led1 = P1^1;
sbit led2 = P1^2;
sbit led3 = P1^3;
#define LED_ON 0 //低电平亮灯,根据实际情况修改。
#define LED_OFF (!LED_ON)
bit changeByKey; //换灯标志位
uint8_t cnt;//亮灯状态寄存器
void delay()//短延时函数
{
uint8_t i = 200;
while(-- i);
}
main()
{
key0 = 1;
changeByKey = 0;
led0 = LED_ON;
led1 = LED_OFF;
led2 = LED_OFF;
led3 = LED_OFF;
while(1)
{
delay();
if(key0)//如果按键松开
{
changeByKey = 1;//按键控制换灯
led0 = LED_OFF; //全部熄灭
led1 = LED_OFF;
led2 = LED_OFF;
led3 = LED_OFF;
}
else//按下
{
if(changeByKey)//松开下次按下才能再次生效
{
changeByKey = 0;
cnt ++;
switch(cnt & 3)
{
case 0:
led0 = LED_ON; //亮灯
break;
case 1:
led1 = LED_ON;
break;
case 2:
led2 = LED_ON;
break;
case 3:
led3 = LED_ON;
break;
}
}
}
}
}
一个键多次按下,能够依次控制红黄蓝绿四个灯控制。
第一次按下亮红灯
然后绿灯
依次四下
再第五次按下交替闪烁,松开够都熄灭。
《...1、如果用一个按键控制两个灯。 按下K1一次;LED1亮,再按一次K1灭...》
答:简单的流程图如图,按键判断写一个单独的子程序,而且在低电平的头和尾加上个去抖动的等待时间。
《单片机 一个键如何区分连续两次及三次按下》
答:这个就得看你要设计的连击频率了,如果想频率高就把判断第二次的时间提前,第三次同样情况。
《C52单片机按下一个键进入中断,再按这个键退出中断可以实现吗?_百度...》
答:可以的。在中断程序中,检测按键,没有按,就反复检测。再次按下后,再退出中断程序。