本文适用于
CT107D竞赛板+
IAP15转接板
控制原理
CT107D竞赛板中共有4块74HC537D锁存器,它们使P0成为控制总线,控制LED灯、四相步进电机、继电器、直流马达、蜂鸣器、LM386及数码管显示(或8x8LED矩阵)。另外,138编码器及02或非门,用来选择锁存器,即P27 P26 P25三个I\O口,用于选择锁存器。
138编码器及02或非门

先是P27 P26 P25组成三位二进制数,先由138编码器将对应管脚拉低其余管脚拉高,再接入或非门。一般情况下,J13短接的是WR和GND脚,即IO模式。其作用是将Y4 Y5 Y6 Y7四个管脚取反,原先被拉低的管脚,变成唯一被拉高的管脚,达到片选的目的。
关于138编码器,其特性如下:
| C | B | A | 被拉低管脚 | 锁存器编号 | 对应可控元件 |
|---|---|---|---|---|---|
| H | L | L | Y4 | U6 | LED灯 |
| H | L | H | Y5 | U9 | 继电器、蜂鸣器等 |
| H | H | L | Y6 | U8 | 数码管位选 |
| H | H | H | Y7 | U7 | 数码管段选 |
而Y0 Y1 Y2管脚是空闲的,所以控制完成后P27 P26 P25全部拉低即可。
控制LED灯

将P27 P26 P25设置成H L L,选择U6锁存器,以控制LED灯。
注意:拉低为点亮,拉高为熄灭。
控制继电器和蜂鸣器

将P27 P26 P25设置成H L H,选择U9锁存器,以控制继电器和蜂鸣器。
实际操作中,将P04拉高,通过ULN2003取反,继电器打开,同时L10点亮;将P07拉高,通过ULN2003取反,蜂鸣器响(无需调制方波信号)。
ULN2003是一个高电压、高电流的驱动器,其逻辑上相当于非门。
数码管显示

将P27 P26 P25设置成H H L,选择U8锁存器,即数码管位选。
将P27 P26 P25设置成H H H,选择U7锁存器,即数码管段选。
注意:竞赛板为共阳数码管
代码模板
#include<reg52.h>
#ifndef u8
#define u8 unsigned char
#endif
sbit L1 = P0^0;
sbit L2 = P0^1;
sbit RELAY = P0^4;
sbit BUZZ = P0^6;
u8 code font[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//"共阳数码管"的字模
u8 code y4=0x80;y5=0xa0;y6=0xc0;y7=0xe0;
//用于锁存器片选
u8 dis[8],val1=123,val2=234;
//用于数码管显示
bit relay=1,buzz=1,l1=0,l2=0;
void display();
void delay100us(); //延时
void delay100us() //@12.000MHz
{
unsigned char i, j;
i = 2;
j = 39;
do
{
while (--j);
} while (--i);
}
void display(){
u8 i;
//将val1,val2的值,调整成想要的格式
dis[0]=0xbf;
dis[1]=font[val1/100];
dis[2]=font[val1/10%10];
dis[3]=font[val1%10];
dis[4]=0xbf;
dis[5]=font[val2/100];
dis[6]=font[val2/10%10];
dis[7]=font[val2%10];
for(i=0;i<8;i++){
//数码管位选
P2&=0x1f;
P0=1<<i;
P2|=y6;
//数码管段选
P2&=0x1f;
P0=dis[i];
P2|=y7;
delay100us();
P0=0xff; //消隐
}
//控制继电器和蜂鸣器
P2&=0x1f;
P0=0x00;RELAY=relay;BUZZ=buzz;
P2|=y5;
//控制LED灯
P2&=0x1f;
P0=0xff;L1=l1;L2=l2;
P2|=y4;
//将P27 P26 P25管脚拉低
P2&=0x1f;
}
int main(){
while(1){
display();
}
}
本文介绍蓝桥杯竞赛板使用573锁存器、138编码器及02或非门控制LED灯、继电器、蜂鸣器和数码管的方法。详细解释了如何通过设置P27P26P25实现不同设备的选择,并提供控制代码模板。
1557





