8. 独立按键控制LED亮灭
-
根据原理图找到独立按键到单片机核心的接口

独立按键模块

单片机核心
-
注意原理图中P30控制K2接10号口。P31控制K1接11号口
-
P2是直接控制8位寄存,P2_X(X取0~7)只控制一位。
-
整体代码(当按下K1时D1亮,松开时D1灭)
#include <REGX52.H>
void main()
{
while(1)
{
if(P3_1==0) //K1开
{
P2_0=0;
}
else
{
P2_0=1;
}
}
}
-
跟着老师做时觉得if与else都只有一个语句所以没有加花括号,结果发现程序运行以后没有实现相应的效果,所以花括号很可能在单片机编程里不能够省略。
9. 独立按键控制LED状态
-
按下K1后D1亮,再按一次K1后D1灭
-
重点在于“延时、取反”(参照第7节stc的软件延时器)

-
消除抖动是为了防止电平不稳定
-
需过滤(5-10)ms处的抖动——Delay(20)到达稳定状态
-
上一步按键消抖 & 下一步检测松手
-
while循环检测再一次按下开关时是否松手,一直按下就一直循环,一旦松手跳出循环
-
整体代码
#include <REGX52.H>
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
while(1)
{
if(P3_1==0) //K1开
{
Delay(20); //过滤延时抖动直接到达稳定阶段
while(P3_1==0);
//当K1再次按下时一直进行循环“延时20ms”保持灯亮
//直到K1松手跳出while循环
Delay(20);//过滤掉松手抖动
P2_0=~P2_0; //~取反即赋与当前情况相反的值
}
}
}
-
注意
-
第7节中500ms指的是LED是以每个亮500ms为循环的
-
第9节中20ms指的是独立按键的抖动过滤的延时
本文介绍了如何使用单片机通过独立按键控制LED灯的亮灭,重点讨论了消除按键抖动的方法。在代码实现中,通过延时函数过滤抖动,实现按键按一次LED亮,再按一次LED灭的功能。此外,还强调了在单片机编程中花括号的重要性。
2912

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



