前一段时间的文章已经跟各位一起刷了一部分的客观题了
接下来将会跟大家一起从官方提供的原理图和芯片手册出发
练习每个模块的程序编写
因为我学习采用的是模块化编程的思路,函数的定义分散在不同的文件中,所以一般不会放完整代码,只会放对应模块相关的程序并说明其使用方法
学习此部分内容需要有一定的单片机基础,类似软件配置这种不会讲述,不懂的建议先上B站刷一下视频
本人使用的开发板 国信长天CT107D单片机竞赛板(这是今年新版,可能与旧版略有不同,但是程序是通用的)
参考资料:
官网能下载的 赛点资源数据包 里面的资料(比赛时会提供)
以及
《“蓝桥杯”全国软件和信息技术专业人才大赛(电子类)实训指导书》(点这里下载)(比赛时不会提供)
LED模块程序设计
理论部分
首先从原理图入手
可以看到这块板子的LED接到了一个锁存器上
锁存器的作用
- 维持电平状态
- 提高驱动能力
因此需要先通过Y4C
给LE
置高电平使能该锁存器后,才能通过P0
控制LED
继续翻找原理图,可以看到Y4C
由一个或非门和138译码器控制
在J13跳线帽选择IO模式时,
WR
与GND
短接
Y4C
需要为高电平才能使能上面的锁存器,WR
为低电平,这里有一个或非门
因此Y4
需要为低电平
查看74HC138的芯片手册,可以找到这样一张真值表
可以看到当CBA
分别为HLL
时,Y4
为低电平
即P25=0 P26=0 P27=1
时Y4
为低电平
这样就能使能锁存器,用P0控制LED灯
程序部分
先上代码
/********************************************************************************
* 函 数 名: LED_Show
* 函数功能: LED显示
* 输入参数:
@ data:要显示的LED对应的十六进制数据
* 返 回 值:无
* 其 他:L1-L8对应二进制从右到左,逻辑修改为1代表亮 0代表灭
********************************************************************************/
void LED_Show(unsigned char LED)
{
P0=~LED; //数据取反,赋给P0
P2=P2&0x1F|0x80; //高三位清零后置100(选择Y4)
P2=P2&0x1F; //高三位清零
}
代码本身非常简单,使用也很简单,只需要类似这样LED_Show(0xF0);
调用该函数并输入要显示的LED对应的十六进制数据即可
不过要注意几点
- 由原理图可知,这些灯应该是高电平灭 低电平亮,这里为了方便使用,所以对输入的参数做了个取反,使其能够变成1代表亮 0代表灭
- 板子上的
L1-L8
对应P0
口从低位到高位,即二进制从右到左
除此之外
这里面还有几个重要思路需要我们记住的
- 操作外设时,先给
P0
赋值,再控制P2
选择对应的锁存器 - 控制
P2
选择Y4
的思路
控制138译码器只需要控制P25 P26 P27三个IO口
为了确保给P2赋值时不影响P2口上的其他位,采用或与运算
0x1F对应二进制0001 1111 P2或上0x1F 即可将P2的高三位清零
0x80对应二进制1000 0000 P2或上0x80 即可将P2的高三位置100,从而选中Y4
- 每次操作P2后都需要让其与上 0x1F 将高三位清零,确保其他情况下调整P0时不会控制到外设
总结:
LED是所有模块中最简单的了,但是这里面控制IO口的思路需要大家记住,因为后面会经常用,同时熟悉或与这些逻辑运算非常重要,我后面会单独出一篇博客讲解。
还有最最最重要的事,多看芯片手册和原理图
欢迎大家提出问题并指正
觉得有帮助的话,那就点赞、收藏、关注一下吧~~
随缘更新~~