点亮板子第一个LED
前言
使用CT107D实验板子的时候可以看到为了IO口对多个外设的复用,所以板子使用了几个锁存器来对LED、数码管、蜂鸣器等外设进行了一个选择,最后再使用38译码器来使用三个IO口选择8个译码器,从而使得一组IO能够控制多个外设。
单片机IO控制
根据原理图可以看到,LED是低电平驱动,所以Q1~Q8为0时对应的LED亮起
M74HC573M1R-数据锁存器
LED由数据锁存器控制,查阅锁存器芯片的数据手册可以看到
所以可以看到我们如果要使能锁存器达到一个transparent mode 透明的模式(透传),即输入什么输出什么的时候LE需要输入高电平。
74HC138-38译码器
由于Y4C需要高电平,所以Y4|WR应该为低电平才行,正好38译码器输出时需要让Y4为0,即输入的是100
38译码器真值表:左边的输入由二进制码组成,右边对二进制码译成十进制码,将十进制对应标号的引脚拉低其他为高。(B - >D)
A2(P27) | A1(P26) | A0(P25) | Y0 | Y1 | Y2 | Y3 | Y4 | Y5 | Y6 | Y7 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
WR和Y4引脚通过或门进行运算,输出再加入个非,所以为了Y4C要是高电平1
,则或门输出的要是0
,则Y4要是0
,所以三八译码器要译码4的二进制;
- 由此可见我们在选择LED的时候只需要
P2=0X80
即可
代码
void main(void)
{
P2 = (P2&0x1f)|0x80);//P2 & (0001 1111) | (1000 0000)
while (1)
{
P00 = 0; //LED熄灭
Delay500ms();
P00 = 1; //LED熄灭
Delay500ms();
}
}
- P2&0x1f是为了把P2口原来的P27,P26,P25的状态清零而其他位保持不动