1.构思;
八个流水灯,每个灯的亮灭刚好对应八位二进制数的0、1,也就是两位十六进制数
灯亮,表示1,灯灭,表示0
2.原理图:
由于单片机共四个IO口,每个IO口八个引脚,默认为高电平,直接给IO口整体赋值,刚好对应八位二进制数,即两位十六进制数
如果要满足亮灯表示1,灭灯表示0,就需要对初值进行取反操作
用八个LED能显示出他的状态
3.代码实现:
#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char
//延时函数
void delay(uint xms)
{
uint x,y;
for(x=xms;x>0;x--)
{
for(y=0;y<110;y++);
}
}
void main()
{
uchar num=0x00;//也可以为num=0,或者不进行赋值,num默认为0
while(1)
{
if(P3_1==0)
{
delay(10);//按键按下消抖
while(P3_1==0);
delay(10);//按键松手消抖
num++;
P2=~num;
//对初值进行取反,满足1亮0灭
//如果在计数前取反,因为num初始值为0,所以第一下按钮没有反应
}
}
}