项目文件
文件
关于项目的内容知识点可以见专栏单片机原理及应用 的第四章 IO口编写
参考图电路编写程序,要求实现如下功能:
- 开始时LED均为熄灭状态,随后根据按键动作点亮相应LED(在按键释放后能继续保持该亮灯状态,直至新的按键压下时为止)。
分析:电路LED采用的是低电平驱动,按键按下后低电压。
需要从P0按键输入电压,到p2输出。
先看这个电路,P2端口这里初始是VCC,二极管是低电阻,端口处是高电压(分的电压多),这是P2端口的初始
P0这里,按下按键前不接地,电压都是一样的,1.25V大概,按下按键后,接地,必然会分压,其中低4位中某一位变成低0。这里就是看P0后面的低4位变化否来判断是否按下
也就是刚开始要使端口P0.4~P0.7强制为0,而P0.0 ~ P0.3不变。屏蔽P0高4位,即key=P0 & 0x0f
然后要把key值也就是P0值传送给P2:
if(key!=0x0f)P2=key; //有按键动作,P0状态值送P2端口
然后只要按键按下了,就把这个值传输到P2端口
按键按下,低4位变化,这样key值不等于0,有一位电压变低
这样传过去,对应哪个端口,那个端口电压变化,这里是低电平驱动,发光(如下图)
这个问题的参考代码如下:
#include<reg51.h>
void main(){
char key=0; //定义按键变量
while(1){
key =P0&0x0f; //按键P0的高4位清零
if(key!=0x0f)P2=key; //有按键动作,P0状态值送P2端口
}
}
结果:
运行视频如下:
单片机C51-独立按键识别