一、项目结构
main.c
二、main.c代码:
#include <REGX52.H>
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned char LEDNum=0;
while(1)
{
if(P3_1==0) //如果K1按键按下
{
Delay(20); //延时消抖
while(P3_1==0); //松手检测
Delay(20); //延时消抖
LEDNum++; //变量自增
P2=~LEDNum; //变量取反输出给LED
}
}
}
三、逐步推演:
详细的说一下要求:通过摁下独立的按键,让8个LED显示我摁下的次数。
动作 | LED灯状态 | P2 |
摁下次数/ LEDNum |
摁一次 | 暗暗暗暗 暗暗暗亮 | 1111 1110 | 0000 0001 |
摁两次 | 暗暗暗暗 暗暗亮暗 | 1111 1101 | 0000 0010 |
... |
P2 IO口开机时默认的是高电平,逻辑上认为P2口开始初始化是设置为1111 11111 的
P2_0 指的P2口8根线的第一根也就是1111 1111 的第一个1
在IF循环外设置一个变量,在if循环内实现累加,取反后赋值给P2口。
四、总结
程序中数字1、2、3、4、5、6其实是转化成二进制储存的