标题:
这个程序编译没有错误 但是烧到单片机里面LED灯全亮,实现不了按键左右移动!求助
[打印本页]
作者:
fyk
时间:
2016-1-23 12:09
标题:
这个程序编译没有错误 但是烧到单片机里面LED灯全亮,实现不了按键左右移动!求助
#include<reg51.h>
#include<intrins.h>
//定义全局变量
sbit K1=P1^0;
sbit K2=P1^1;
#define GPIO_LED P0
//定义声明函数
void Delay10ms(unsigned int c);
unsigned char Key_Scan();
//主函数
void main(void)
{
unsigned char ledvalue,keyNum;
ledvalue=0x01;
while(1)
{
keyNum=Key_Scan();
if(keyNum==1)
{
ledvalue=_crol_(ledvalue,1);
}
else if(keyNum==2);
{
ledvalue=_cror_(ledvalue,1);
}
GPIO_LED=ledvalue;
}
}
//按键扫描函数
unsigned char Key_Scan()
{
unsigned char keyValue=0,i;
if(K1==0)
{
Delay10ms(1);
if(K1==0)
{
keyValue=1;
i=0;
while((i<50)&&(K1==0))
{
Delay10ms(1);
i++;
}
}
}
if(K2==0)
{
Delay10ms(1);
if(K2==0)
{
keyValue=2;
i=0;
while((i<50)&&(K2==0))
{
Delay10ms(1);
i++;
}
}
}
return keyValue;
}
//延时函数
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
作者:
寒门痴子
时间:
2016-1-23 12:45
不大明白您键值扫描程序中的&&相关内容的作用是什么,是为消抖吗?请教。
作者:
wc86110
时间:
2016-1-23 13:43
没有错误并不代表就没有问题,还是得再调试调试才行,多多练习没错的。
作者:
wc86110
时间:
2016-1-24 23:57
把主函数到按键扫描函数以上这段移动到最下面就行,适当修改一下LED
作者:
wc86110
时间:
2016-1-25 00:07
把主函数到按键扫描函数以上这段移动到最下面就没问题了,如果再减慢一下 LED 的刷新率就更好。
作者:
smilefff
时间:
2016-1-26 20:51
要加延时才能看清
作者:
51hei852
时间:
2016-1-27 11:50
ledvalue=_crol_(ledvalue,1);
这是循环移动 不是每次只移动一位 单片机运行速度快 人眼分辨不出来 你可以加延时 或者 变成每按键一次右移 或者左移 一位
作者:
四师哥
时间:
2016-1-27 20:31
if(keyNum==1)
{
ledvalue=_crol_(ledvalue,1);
Delay10ms(50);
}
else if(keyNum==2);
{
ledvalue=_cror_(ledvalue,1);
Delay10ms(50);
}
在那个移位循环后面加个延时就好,就是这样。其实就是因为你没加延时,所以闪的很快,我们的眼睛分辨不出来,就感觉是全亮。
作者:
ganlinglan
时间:
2016-1-31 09:33
会不会是延时太短呀
作者:
liuzhaoxin1020
时间:
2017-1-1 12:50
延时太短
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1