蓝桥杯单片机组备赛指南请查看 :本专栏第1篇文章
本文章针对蓝桥杯-单片机组比赛开发板所写,代码可直接在比赛开发板上使用。
型号:国信天长4T开发板(绿板),IAP15F2K61S2(使用4T蓝板也可以完美兼容,与绿板差别不大)
编程目的
通过代码实现功能:开发板流水灯展示。
如图所示最左边S4~S7位四个独立按键,上方L1~L为八位LED灯。
原理图介绍
1.八位LED灯原理图
(截取自SCH_硬件原理图V30.pdf)
其中,最左边P7~P0为单片机引脚,是我们进行编程的直接控制对象。
74HC573为8位锁存器,其OE端与GND端接低电平,LE端输入为Y4C端口并接一个小电容接地。当Y4C为低电平时,锁存器工作在锁存模式,即表示输入端D7~D0输入信号是多少,输出端Q7~Q0就对应输出多少并锁住信号量。在编程时,应当先设置Y4C端口的输入信号量,确定锁存器工作模式。
L8~L1为对应P0^7~P0^0的八位发光二极管(LED),分别通过1k的电阻接到公共端高电平,为共阳极连接。编程时,对P0任意一个端口赋值为0时都可以使得对应LED亮,赋值1时使对应LED灭。
74HC573真值表如下:(OE:Output Enable,LE:Latch Enable)
输入 | 输出 | ||
---|---|---|---|
OE | LE | D | Q |
0 | 1 | 1 | 1 |
0 | 1 | 0 | 0 |
0 | 0 | X | no change |
1 | X | X | Z(高阻态) |
Y4C端口短路原理图
(截取自SCH_硬件原理图V30.pdf,不得不说V30版的原理图画的真丑)
这是一块74HC138译码器,互斥低有效输出(互斥表示只有一位有效,低有效表示有效位为低电平,其余位为高电平),作用为将A2~A0输入的二进制编码解码为一位十进制位,例如输入A2~A0为100,对应十进制为4,则Y4位被激活输出低电平,其余Y7~Y5输出高电平。编程时,需要先通过设置单片机引脚P2^7~P2^5设置Y4输出为低电平,从而设置74HC573为锁存模式,进而通过设置P0^7~P0^0引脚值控制LED亮灭。
74HC573真值表如下:
编程代码
编程时,先设置单片机引脚P2^7~P2^5为100,设置Y4输出为低电平,从而设置74HC573为锁存模式,然后通过设置P0^7~P0^0引脚值控制LED亮灭。
由于51单片机内部资源空间较小,因此循环变量可采用unsigned char类型,该类型占用两个字节,共16为,可实现256次以内的循环。
#include <REGX52.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 ( )
{
//设置138译码器为Y4有效,输出低电平
HC138_A =0;
HC138_B =0;
HC138_C =1;
//通过两个循环实现左右流水灯显示
for ( i=0 ; i<=8 ; i++ )
{
P0=0xff << i; //移位操作采用的是末尾补零,所以要用0xff
Delay( 6000);
}
for ( i=0 ; i<=8 ; i++ )
{
P0=~(0xff << i);
Delay(6000);
}
}
void main ()
{
while ( 1 )
{
LEDrunning();
}
}
由于引脚冲突,烧录后蜂鸣器会一直叫,绿板按几次下载按键后蜂鸣器就会停止。
硬件相关
4T开发板采用的LED封装为:
但其原理与我们常见的发光二极管相同:
当我们把LED的阳极全部连接到一起,就是共阳极连接:
总览概括
难点在于既要设置74HC138译码器,又要设置74HC573锁存器,需要着重记忆二者区别。