上一篇文章学习了如何进行按键消抖,实现灯的点亮。
本章我们学习如何通过按键实现灯的记数还有左右亮灭按键移动功能。
原理图:

图1:MCU原理图

图2:LED原理图

图3:按键原理图
预备知识:延时函数,按键消抖,~的含义,<<用法
代码如下:
二进制记数:
//默认配备延时函数 Delay (int xms)
/*方法一:
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
P2--;
} //初始状态下认为P2==1111 1111,故可通过每一次减少来控制灯的亮灭,实现二进制记数
}
*/
/*方法二:
unsigned char x = 0;//unsigned char范围就是0000 0000-1111 1111符合LED灯的特性
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
x++; //0000 0000→0000 0001
P2=~x; //LED末端为0才亮
}
}
*/
按键控制灯位移:
“<<”的用法:
P=1111 1010 则P<<2后P变为1111 0100
//默认配备延时函数 Delay(int xms)
int LEDNum=-1;
while(1)
{
if(P3_1==0)//左移部分
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
if(LEDNum>=8) //限制移位的位数,防止意外
{ LEDNum=0;}
P2=~(0x01<<LEDNum);//0000 0001移位后取反赋值
} //左移完成
if (P3_0==0)//右移部分,右移可以认为是原来左移减1
{
Delay(20);
while(P3_1==0);
Delay(20);
if(LEDNum<=0)
{ LEDNum=8;}
LEDNum--;
P2=~(0x01<<LEDNum);//0000 0001移位后取反赋值
} //右移完成
}
1793

被折叠的 条评论
为什么被折叠?



