感悟网 导航

单片机应用,一个键多次按下,能够依次控制红黄蓝绿四个灯控制第一次按下亮红灯然后绿灯依次四下 单片机D1-D8led灯依1次为红黄蓝绿4色交替再重复,循环...

作者&投稿:訾枝 (若有异议请与网页底部的电邮联系)
设置单片机的一个按键,按一下,红灯亮,再按一下,黄灯亮,再按一下,蓝灯亮。再按一下。绿灯亮。~

你应该提供一下 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() 内部的参数会更方便

#include<reg52.h>
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灭...》
答:简单的流程图如图,按键判断写一个单独的子程序,而且在低电平的头和尾加上个去抖动的等待时间。

《89C2051单片机按键控制一只led,按键按下闪5次灭30秒一直循环,松开就灭...》
答:程序在执行延时的时候根本就没有检测按键,所以你可以加以个中断或者是在程序执行中检测按键,如果检测到了按键松开就用break跳出。include <reg51.h> sbit L1=P1^1;sbit K1=P1^2;unsigned char i,j;void delay(int k);void delay10s(void);void scan();void scan(){ while(1){ while(K1...

《一个按键怎么实现两个Led灯切换,就是按下第一个灯亮松手灯灭,再按一...》
答:/ 按键位置:P0.1;功能:1,当第一次按键按下,第一个灯亮,按键放开灯灭 2,当第二次按键按下,第二个灯亮,按键放开灯灭 3,重复执行前面两个步骤 灯的位置:P2口;/ include <reg51.h> define uint unsigned int define uchar unsigned char sbit BUTTON=P0^1;//按键的位置 vo...

《单片机在扫描是否有键按下时,为什么要做这么多次的判断?有什么作用...》
答:是为了防止键盘抖动,键盘抖动的时间是很短的,通过延时一段时间后,如果再判断键盘是按下的,这是才真正能说明键盘按下了,相反,则是抖动,不能说明键盘按下!所以,软件中一般都需要两次判断键盘按下!第一次之后,加段延时,之后再判断

《单片机 一个键如何区分连续两次及三次按下》
答:这个就得看你要设计的连击频率了,如果想频率高就把判断第二次的时间提前,第三次同样情况。

《单片机 按键(采用独立式按键)按下一次,让液晶第一位显示的数码加1,显 ...》
答:程序清单如下:include < reg51.h >// 51单片机头文件 define uchar unsigned char // 宏定义,用uchar替代无符号字符型 define uint unsigned int // 宏定义,用uint 替代无符号整数型 sbit Key = P2 ^ 7;uchar Count = 0;uchar code DataChar[10] = // 定义数码管的段码 '0'~'9'、...

《设计一个单片机C语言程序,有两个按键,一个按键摁下,开始计时,另一个按...》
答:注意这两个io口要上拉)接下来你要确定这两个io口没有按键按下去的时候口的状态啊!这样才能扫描出你的那个按键按下去!接下来就是c语言的处理了 if(key1){ flag=1;} if(key2){ flag=0;} 你在你的计时里面处理啊!当flag=0时不计时反之计时。。。

《51单片机怎么用c语言写一个按钮控制一个led的闪烁,按一下开始闪烁,再按...》
答:if(P02)//再次确定按键按下 { while(P02){flash=flash}//按住按键的动作 flash=~flash;//按键按下后执行动作 } } } void ledflash(){ if(flash){ led=1;//点亮 delay(100);//延时100MS led=0;//熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参...

《51单片机中怎样用一个按键控制三种模式的流水灯,如控制流水灯流水速率...》
答:include <reg51.h> typedef unsigned char uint8;typedef unsigned int uint16;sbit anjian = P1^0; //按键位 void delay(uint16 h) //延时程序 { while(h--);} main(){uint8 k = 0 , i = 0;P0 = 0xff;anjian = 1;while(1){ P0 = ~(1<<k++);if(anjian == 0){...

《C52单片机按下一个键进入中断,再按这个键退出中断可以实现吗?_百度...》
答:可以的。在中断程序中,检测按键,没有按,就反复检测。再次按下后,再退出中断程序。

   

返回顶部
本页内容来自于网友发表,若有相关事宜请照下面的电邮联系
感悟网