首先我们在写程序之前要看懂原理图,要操作的模块是受哪部分的IO口控制的,然后在根据原理图控制的IO口来写程序。
原理图
在看原理图时我们要观察需要操作的模块受哪些信号线控制,在这个过程中我们就要了解一些芯片的作用。
74HC138译码器:简单来说它的功能就是通过3个IO口的高低电平来控制8个IO口,这样大大节省了单片机的IO口资源。例如:P25==1、P26==1、P27==0表示的二进制数是011 转化为 十进制数就是3,控制的也就是Y3口,以此类推,就可以实现控制八个IO口。
74LS02 或非门:当A、B均为低电平时,Y为高电平“1”;A、B中有一个为高电平或二者均为高电平时,Y为低电平“0”。
M74HC573M1R锁存器:锁存器也是为了节省IO口资源,观察原理图我们不难发现八个LED灯是连接在573锁存器上的,锁存器的另一端是连接在单片机的八个P0口上的,既然这样为什么不直接将LED灯连接在单片机IO口上呢?
其实这时我们操作P0口是不可以控制LED灯的,因为连接LED灯573锁存器没有启用。只有将Y4C口置高,但是Y4C又受Y4控制,Y4又受P25、P26、P27控制,这样我们才打开了控制LED灯的573锁存器,这时才可以通过P0口操作LED灯。
下面我们就可以通过以上的电路逻辑来书写程序。
#include <STC15F2K60S2.H>
void Delayms(unsigned int ms); //函数声明
void main(void)
{
//初始化
P2=0X80; //100 00000 100二进制转换十进制为4,也就是将Y4置高,打开LED灯573锁存器
P0=0X00; //关闭所有LED灯
while(1)
{
P00=0;
P01=1;
P02=0;
P03=1;
P04=0;
P05=1;
P06=0;
P07=1; //在操作P0口是也可以进行整体的赋值 例如:P0=0X01 就是打开第一个LED灯
}
}
//添加延时函数就可以实现流水灯了
void Delayms(unsigned int ms) //延时函数
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
以上就是我对LED灯模块的全部理解,如有不对之处,还希望大家留言指正。