哈喽哈喽大家好,我是阿飞的小蝴蝶,大家可以叫我阿飞或者小飞,对,没错我又回来了
又是一年一度的蓝桥杯备赛时间,想起去年比赛的悲惨经历,被NE555支配的恐惧呀。。。由于准备的不充分,去年比赛只拿了省三等奖,所以。。今年再来一次,向省一等奖冲刺!接下来的一段时间,我会跟大家一起准备蓝桥杯,在平时学习之余的时间,不定时的更新帖子,分享一下参赛经验与备赛情况,希望大家都能一起学习呀!
好的,话不多说,先来我们的第一节内容,首先我们来看一下原理图(分开模块来看哦)
我们先来看以下几张图片:
图一
图二
图三
图四
图五
图一,是我从原理图中截取的LED灯的模块;图二是数码管模块;图三、图四是控制蜂鸣器、继电器等其他功能的模块;图五是74HC138译码器的模块
好的,我们现在看一下图一到三中红色方框框起来的,我们可以看到这三个模块,不管是LED灯、数码管段选位还是其他的功能,全部都是用P0端口来控制的,那么问题来了,一个端口怎么能同时控制这么多功能呢?答案是:它并不是同时控制的,是通过其他的方式来分配我现在的P0控制哪个模块。
那么,怎么分配呢?重点来了(敲黑板)!!
我们来看图一到三模块前接的芯片(M74HC573M1R),这个芯片怎么用大家可以去问一下百度,这里不做详细介绍了,简单说就是由蓝色框里框起来的(Y4C、Y5C等)来控制,只要把它置高,我们就选中了对应的模块,好的我们现在来看图五,这是138译码器,我们数电里都有学过的,当我们把蓝色框里的引脚设置成不同值的时候,就选中了橙色框里对应的引脚(会置低),举个栗子:
我们把P2^7、P2^6、P2^5分别配置为1、0、0;二进制码为4,这时候我们就选中了Y4引脚,Y4为低电平,其它全为高电平,我们再看图五中间那四个或非门,当左边两个输入全为0时,右边会输出1,橙色框着的引脚我们通过译码器设置的,再看最后那个CON3,对应到我们板子上的J13,默认情况下是使用跳线帽把WR接地的,(如果接到了P36/WR,我们就需要用程序吧P3^6引脚拉低),这时候左边两个输入全都是低电平,右边绿色框起来的引脚就输出了高电平,对应的模块就被选中了,是不是很简单呢?好的,我们现在来用程序写一下试试
void HC138(u8 i)
{
switch(i)
{
case 4: P2 = (P2 & 0x1f) | 0x80; break;
case 5: P2 = (P2 & 0x1f) | 0xa0; break;
case 6: P2 = (P2 & 0x1f) | 0xc0; break;
case 7: P2 = (P2 & 0x1f) | 0xe0; break;
}
}
我们先写一个这样子的函数方便我们来选择对应的模块(我这里直接操作的P2端口,但是我们只需要配置P2^5、P2^6、P2^7三个引脚,为了不干扰P2其它引脚的功能,我们使用了位与和位或的运算符来编写。你品,你细品)
然后我们来点亮一个LED灯:
HC138(4); //选中LED模块
P0 = 0xfe; //点亮一个led灯
数码管也是一样的
HC138(6); //选中数码管位选
P0 = 0x01; //选中第一位数码管
HC138(7); //选中数码管段选
P0 = 0xc0; //数码管显示数字0
我们关掉蜂鸣器和继电器(这里想吐槽一下,板子上默认的蜂鸣器、继电器上电都是打开的,参加比赛的时候总有人不会关,全场都是蜂鸣器的声音,真让人头大。。。)
HC138(5); //选中对应的模块
P0 = 0x00; //关掉对应的功能(包括蜂鸣器和继电器,这里我们可以看一下图三绿色框起来的还有图三图四橙色框起来的电路图就能知道,低电平可以关掉蜂鸣器和继电器)
这个时候我们不妨直接写一个初始化函数,就是上电的时候关掉直接LED灯、数码管、蜂鸣器:
void Init_P0() //开发板初始化
{
HC138(4);
P0 = 0xff;
HC138(5);
P0 = 0x00;
HC138(6);
P0 = 0xff;
HC138(7);
P0 = 0xff;
}
好的,这节就先分享到这里了,这是一些简单模块的基础知识,明天开始我们的实战第一节,各位晚安,祝大家取得好成绩