一、原理图
大家都知道,蓝桥杯单片机比赛用的板子的原理就是51的原理,但二者唯一的区别就是这个74HC138锁存器,因为比赛用板的LED,数码管,蜂鸣器和继电器都在P0口上,所以为了防止错乱,加了一个锁存器,每次写入p0口后都要关闭锁存器
二、代码分析
#define Y4 P2=(P2&0x1f) | 0x80
#define Y5 P2=(P2&0x1f) | 0xa0
#define Y6 P2=(P2&0x1f) | 0xc0
#define Y7 P2=(P2&0x1f) | 0xe0
#define Y0 P2=(P2&0x1f)
由于我们只用到了P25,6,7
所有要P2=P2&0x1f来取出高三位
根据原理图,可知Y4控制LED,Y5控制蜂鸣器和继电器,Y6控制数码管位选,Y7控制数码管段选
P25 P26 P27
1 | 1 | 1 |
1 | 1 | 0 |
1 | 0 | 1 |
1 | 0 | 0 |
0 | 1 | 1 |
0 | 1 | 0 |
0 | 0 | 1 |
0 | 0 | 0 |
一共八种组合方式,其中只用到了80,a0,c0,e0
再来看一下初始化函数
void ALL_INIT()
{
P0=0xFF;Y4;Y0;
P0=0xAF;Y5;Y0;//蜂鸣器P06,继电器P04
P0=0xFF;Y6;Y7;
P0=0xFF;Y7;Y0;
}
P0=0xFF;Y4;Y0;->关闭所有LED灯
P0 = 0xAF;Y5;Y0;->关闭蜂鸣器P06,继电器P04
P0 = 0xFF;Y6;Y7; ->数码管位选,全部选中
P0 = 0xFF;Y7;Y0;->数码管段选,全部熄灭(共阳极,给0点亮)
该函数在主函数里面调用一次便初始化了LED,数码管,蜂鸣器和继电器了
然后我们若是想点亮LED就需要写入P0口数据之后,打开Y4,再关闭Y4
如P0=0x00;Y4;Y0;就是点亮全部的LED