LED灯在单片机中使用几率很高,作为大学生,学习单片机这门课程的第一课,就对LED灯有所了解,在我们的开发板上面也需要我们进行系统性的操作才能点亮LED灯。
下图为我们所用的单片机开发板:
结合例题,在开发板上面进行实际操作时,需要了解74HC138译码器(三八译码器)、74HC573锁存器、74HC02(或非门)。
题目要求:首先让八路LED指示灯闪烁三遍后熄灭,接着依次点亮LED灯,随后依次熄灭LED灯。程序循环实现上述功能。
首先了解74HC138译码器(三八译码器):4HC138译码器可接受3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。
上图中的A B C 为三个输入端,根据三个输入端可以确定八个输出端输出的高低电平。
为了方便,我们可以这样来确定哪个输出端为低电平经过与非门进行选择高低电平,如下表格所示:
C | B | A | 输出低电平的输出端 |
0 | 0 | 0 | Y0 |
0 | 0 | 1 | Y1 |
0 | 1 | 0 | Y2 |
0 | 1 | 1 | Y3 |
1 | 0 | 0 | Y4 |
1 | 0 | 1 | Y5 |
1 | 1 | 0 | Y6 |
1 | 1 | 1 | Y7 |
我们要让Y4C得到低电平,WR为低电平,经过与非门,得到高电平1。
74HC02(与非门)中的逻辑很简单,在此不做介绍。
最后是74HC573锁存器:
74HC573是拥有八路输出的透明锁存器,输出为三态门,是一种高性能硅栅CMOS器件。
SL74HC573跟LS/AL573的管脚一样。器件的输入是和标准CMOS输出兼容的,加上拉电阻他们能和LS/ALSTTL输出兼容。
OE非为片选引脚,为高电平,因此74HC573是开启的,LE为选择引脚,得到刚得到的Y4C的高电平,寄存器开始工作,进行数据传输,当LE为低电平时,八个输入端无论如何变动,八个输出端不会受到任何影响,开始寄存数据的功能。
以上的介绍就是写代码的整体思路。
代码如下:
#include <REG52.H>
sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;
unsigned char i;
void delay(unsigned int t) //延时函数
{
while(t--);
while(t--);
}
void LEDrunning() //LED进行闪烁操作函数
{
HC138_C = 1; //令Y4为低电平进而使Y4C为高电平,则选择引脚LE为高电平
HC138_B = 0;
HC138_A = 0;
for( i = 0; i < 3; i++) //八个LED全亮并闪烁三次
{
P0 = 0x00;
delay(60000);
delay(60000);
P0 = 0xff;
delay(60000);
delay(60000);
}
for( i =1; i<=8; i++) //依次点亮
{
P0 = 0xff << i;
delay(60000);
delay(60000);
}
for( i =1; i<=8; i++) //依次熄灭
{
P0 = ~(0xff << i);
delay(60000);
delay(60000);
}
}
void main() //主函数
{
while(1)
{
LEDrunning();
}
}