Ⅰ 51单片机使灯闪烁,我写的程序按一下开始闪烁,在按一下为什么不能熄灭呢
void main()
{
L1=0;
if(K1==0) //1 按键按下后
{
Delay10ms(); //2 延时去抖动
if(K1==0) //3 确认按下
{
L1=0; //4 以下4句闪烁一次
Delay(1000);
L1=1;
Delay(1000);
}
while(1) //5 这里死循环,不能再执行上面的语句了。
{
while(!K1) //6 判断按键是否按下,如果按下,则延时10ms,再判断是否按下,一致循环,知道你松开手。
{
Delay10ms();
}
while(!K1); //7 按键按下话,一致死等,直到你松开手
{ //8 下面闪烁一次。
L1=0;
Delay(1000);
L1=1; // 9
Delay(1000);
}
}
}
}
你的程序来看,工作流程是这样的,开机后,按下按键不放,只闪烁一次。如果你放开你的手,释放按键,则LED一致闪烁。
你说再按一下为什么不熄灭,因为 标示9句那里置1了,你的硬件应该是L1置1亮吧?
因为L1=1,是你灯闪烁的最后一个状态,而后又会从5再次执行,如果你按下了按键,程序停在了6那里死循环,
则后面7,8都不会执行了。灯则保留了上一个循环最后的状态,也就是9的状态,所以就一致亮了。
你如果又松开按键,灯又会闪烁,你再按下按键,灯又一直亮了。如此循环。
你的程序的就是一个字概括,乱,你的思路很混乱,条理不清晰,建议先在纸上写下流程,再来写代码。想清楚了再下手。
你会学的很快的。
你的main函数有个性,呵呵,没有人会这么写main函数的,去看看单片机C语言的书吧!
Ⅱ 单片机c51,9个灯同时闪烁
从第一个灯开始随着时间变化,二进制数的递减,所有的灯都会依次的点亮,当全部的灯都被点亮后再重新开始这个过程,一直循环下去。
红绿蓝四个LED灯循环闪烁,单片机课程试验,连上板子可以直接显示,非常基础。单片机使用codewarrior编。
资源中是采用51单片机的GPIO引脚对多路LED灯进行控制的代码,包含两个工程,分别采用两种不同的方法对多路LED灯进行控制。
Ⅲ 单片机编程 彩灯闪烁
你可以将灯连接到p1口来实现( 假设有八个彩灯,且为共阳的);
1.轮流点亮 逐个点亮
MOV A,#11111110B
;先点亮连p1.0的灯,然后是p1.1的,一直到p1.7的,然后又点亮p1.0的
LOOP:
MOV P1,A
ACALL DELAY;你建一个延时子程序使灯亮一段时间
RL A
SJMP LOOP
2.间隔点亮
MOV A,#10101010B
;先点亮连p1.0,p1.2,p1.4,p1.6的灯,然后是p1.1,p1.3,p1.5,p1.7的
LOOP:
MOV P1,A
ACALL DELAY;你建一个延时子程序使灯亮保持一段时间
RL A
SJMP LOOP
3.全灭全亮
MOV A,#00000000B
;先全部点亮,然后再全灭
LOOP:
MOV P1,A
ACALL DELAY;你建一个延时子程序使灯亮保持一段时间
CPL A
SJMP LOOP
Ⅳ 单片机用595控制led灯刚开始为什么一直闪
1、由于单片机总是自动复位造成的单片机有程序控制led闪烁。
2、单片机电源不稳,其他硬件毛病等,闪烁也会发生。