标题:
单片机LED灯出现不灭或一直闪烁怎么解决?
[打印本页]
作者:
strong_g
时间:
2019-3-4 14:18
标题:
单片机LED灯出现不灭或一直闪烁怎么解决?
1.jpg
(85.85 KB, 下载次数: 37)
下载附件
2019-3-4 14:17 上传
#include<reg52.h> //52系列单片机头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit led1=P2^0;sbit led2=P2^1;
sbit led3=P2^2;sbit led4=P2^3;
sbit led5=P2^4;sbit led6=P2^5;
sbit led7=P2^6;sbit led8=P2^7;
sbit led9=P3^0;
sbit key1=P3^1;sbit key2=P3^2;
sbit key3=P3^3;sbit key4=P3^4;
/*************************延时函数*****************************/
void delay1ms(uint y)
{
uint j;
while(y--)for(j=0;j<120;j++);
}
/*************************子函数******************************/
uchar flag;
uchar flag2;
void keyplus(void)
{
if(key1==0) //确认按键是否被按下
{
delay1ms(5); //延时消抖动
if(key1==0) //消抖后在判断按键是否按下
{
while(!key1); //等待按键释放
flag++;
if(flag==10)flag=1;
}
}
switch(flag)
{
case 1:
led1=0;
break;
case 2:
led2=0;
break;
case 3:
led3=0;
break;
case 4:
led4=0;
break;
case 5:
led5=0;
break;
case 6:
led6=0;
break;
case 7:
led7=0;
break;
case 8:
led8=0;
break;
case 9:
led9=0;
break;
}
}
void keyreduce(void)
{
if(key2==0) //确认按键是否被按下
{
delay1ms(5); //延时消抖动
if(key2==0) //消抖后在判断按键是否按下
{
while(!key2); //等待按键释放
flag2++;
if(flag2==10)flag2=1;
}
}
switch(flag2)
{
case 1:
led9=1;
break;
case 2:
led8=1;
break;
case 3:
led7=1;
break;
case 4:
led6=1;
break;
case 5:
led5=1;
break;
case 6:
led4=1;
break;
case 7:
led3=1;
break;
case 8:
led2=1;
break;
case 9:
led1=1;
break;
}
}
/*************************主函数******************************/
void main()
{
while(1)
{
keyjia();
keyjian();
}
}
复制代码
作者:
wulin
时间:
2019-3-4 18:05
这样写就没有问题了
#include<reg52.h> //52系列单片机头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;
sbit led5=P2^4;
sbit led6=P2^5;
sbit led7=P2^6;
sbit led8=P2^7;
sbit led9=P3^0;
sbit key1=P3^1;
sbit key2=P3^2;
sbit key3=P3^3;
sbit key4=P3^4;
uchar flag;
//uchar flag2;
/*************************延时函数*****************************/
void delay1ms(uint y)
{
uint j;
while(y--)
for(j=0;j<120;j++);
}
/*************************子函数******************************/
void keyscan()
{
if(key1==0) //确认按键是否被按下
{
delay1ms(5); //延时消抖动
if(key1==0) //消抖后在判断按键是否按下
{
if(flag<9)
flag++;
switch(flag)
{
case 1:led1=0;break;
case 2:led2=0;break;
case 3:led3=0;break;
case 4:led4=0;break;
case 5:led5=0;break;
case 6:led6=0;break;
case 7:led7=0;break;
case 8:led8=0;break;
case 9:led9=0;break;
}
while(!key1); //等待按键释放
}
}
if(key2==0) //确认按键是否被按下
{
delay1ms(5); //延时消抖动
if(key2==0) //消抖后在判断按键是否按下
{
if(flag>0)
flag--;
switch(flag)
{
case 0:led1=1;break;
case 1:led2=1;break;
case 2:led3=1;break;
case 3:led4=1;break;
case 4:led5=1;break;
case 5:led6=1;break;
case 6:led7=1;break;
case 7:led8=1;break;
case 8:led9=1;break;
}
while(!key2); //等待按键释放
}
}
}
/*************************主函数******************************/
void main()
{
while(1)
{
keyscan();
}
}
复制代码
作者:
lfc315
时间:
2019-3-4 18:48
每个分支里,亮灯1秒后灭灯
作者:
狂飙的小叶吗
时间:
2019-3-4 19:59
是不是 延时太短了
作者:
kakaokok
时间:
2019-3-5 09:28
写的很详细,感谢分享!
作者:
strong_g
时间:
2019-3-5 16:45
wulin 发表于 2019-3-4 18:05
这样写就没有问题了
C:\Users\Administrator\Desktop\12.jpg想加多个按键依次点亮LED循环怎么写
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1