一、原理图
二、代码实现
代码如下:
#include<reg52.h>
sbit ADDR0=P2^0;
sbit ADDR1=P2^1;
sbit ADDR2=P2^2;
sbit ADDR3=P2^3;
sbit ENLED=P2^4;
void main()
{
unsigned int cnt=0;
unsigned int i=0;
ADDR0=0;
ADDR1=1;
ADDR2=1;
ADDR3=1;
ENLED=0;
while(1)
{
P0=~(0x01<<cnt);
for(i=0;i<50000;i--)
cnt++;
if(cnt==7)
{
cnt=0;
}
}
}
代码分析
程序中 cnt 是 count 的缩写,计数的意思。当 cnt 等于 0 的时候,1 左移 0 位还是 1,那么写成二进制后就0b00000001,对这个数字按位取反就是0b11111110,亮的是最右边的小灯。当 cnt 等于 7 的时候,1 左移 7 位就是 0b10000000,按位取反后是 0b01111111,亮的是最左边的小灯。其余74HC138译码器已经在上篇文章中讲过。