#include <reg52.h> //包含寄存器的库文件
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
ENLED = 0;
ADDR0 = 0;
ADDR1 = 0;
ADDR2 = 0;
ADDR3 = 0; //74HC138开启三极管
LED = 0; //点亮点阵的一个点
while(1); //程序停止在这里
}
同样的方法,我们可以点亮点阵的任意一行,74HC 138的导通点阵所用的三极管的方法和数码管很类似,那我们现在来点亮第二行整行的LED。
#include <reg52.h> //包含寄存器的库文件
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
ENLED = 0;
ADDR0 = 1;
ADDR1 = 0;
ADDR2 = 0;
ADDR3 = 0; //74HC138开启三极管
P0 = 0x00; //点亮小灯
while(1); //程序停止在这里
}
从这里我们逐步发现了一个问题,其实我们讲一个数码管就是8个LED小灯,一个点阵是64个LED小灯。同样的道理,我们还可以把一个点阵理解成8个数码管。我们前边掌握了6个数码管的同时显示方法,那8个数码管也应该轻轻松松了。我们先把这个点阵全部点亮。
#include <reg52.h> //包含寄存器的库文件
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
ENLED = 0;
ADDR3 = 0;
TMOD = 0x01; //设置定时器0为模式1
TH0 = 0xFC;
TL0 = 0x67; //定时值初值,定时1ms
TR0 = 1; //打开定时器0
EA = 1; //打开中中断
ET0 = 1; //打开定时器0中断
while(1); //程序停止在这里,定时器运行,等待定时器中断
}
void InterruptTimer0() interrupt 1 //中断函数
{
static unsigned char j = 0;
TH0 = 0xFC; //溢出后进入中断重新赋值
TL0 = 0x67;
P0 = 0XFF; //消隐
switch(j)
{
case 0: ADDR0=0; ADDR1=0; ADDR2=0; j++; break;
case 1: ADDR0=1; ADDR1=0; ADDR2=0; j++; break;
case 2: ADDR0=0; ADDR1=1; ADDR2=0; j++; break;
case 3: ADDR0=1; ADDR1=1; ADDR2=0; j++; break;
case 4: ADDR0=0; ADDR1=0; ADDR2=1; j++; break;
case 5: ADDR0=1; ADDR1=0; ADDR2=1; j++; break;
case 6: ADDR0=0; ADDR1=1; ADDR2=1; j++; break;
case 7: ADDR0=1; ADDR1=1; ADDR2=1; j=0; break;
default: break;
} //动态刷新
P0=0x00;
}
LED点阵
最新推荐文章于 2024-02-22 22:39:52 发布