对于硬件的控制,要结合板子上面的器件,打开原理图,发现LED、数码管、蜂鸣器、继电器、都不是直连的单片机而是通过一些逻辑芯片来控制的,空着上面几个外设发现,一共用到了P0的全部IO口以及P25,P26,P27,其中 P25,P26,P27控制外设的选中,而P0-P7进行写数据,P25 P26 P27 通过74HC138译码器,来完成三个IO口出现八种状态的效果 即000、001、010、011、100、101、110、111.(0-7)。
根据数据手册可知选中哪个哪个输出低电平
接着往下走,发现接的是74HC02,根据数据手册发现这是一个或非门

与非门的构成:


其逻辑如下图:

发现只有两边同时输入低电平才会输出高电平,再看板子上 的接线:

观察板子发现一端接的是刚才的74HC138的输出,一端是WR,而WR用跳线帽和GND相连接,可知如果74HC138选通某一路,则该路通过74HC02输出高电平。
再接着74HC02接的是





这四个外设,但并不是直接连接的,而是接了一个74HC573锁存器,阅读数据手册,查看7.functional description

OE为低电平时工作,LE高电平时 D=Q,
LE为低电平时 D与Q无关;
由此我们可以用8个IO口干16个IO口需要干的活,
对于 上面 四个外设,我们一一介绍。
LED :先看他和单片机的连接 P0-P7 ---74HC573 --LED--VCC
我们可以通过P0-P7输出低电平让LED亮,输出高电平让LED灭,但是仅仅通过P0口还不行,P0口经过了74HC573锁存器,我们需要控制74HC573锁存器来控制IO口与LED的连接,
再看74HC573与单片机的连接(因为我们控制外设都是要通过IO口控制的),P25,P26,P27 --- 74HC138 ---74HC02 --74HC573 ,根据上面的分析可知,我们需要选通74HC573对应的那一路,即Y4

Y4对应的是4,对应P27,P26,P25(从左到右,高位到低位)的100,
如果我们控制P2的话,那就是 1000 0000(x:不干预其它位)对应16进制为0x80,给P2赋值0X80即可选通Y4, Y4通过74HC02输出高电平Y4C,Y4C连接74HC573的LE,LE=1,即开启了IO口和LED的连接,这时可以 通过P0口控制LED了。但是我们发现 了一个问题,就是如果直接给P2口赋值0X080的话,会干扰到其它5bit的,我们想到用|来给某一位赋1的话其它位的值不会改变(例如IE2 |=0X04),用&给某一位赋0的时候其它bit的值不会改变(例如:AUXR&=0XFE).但是我们现在要赋值的是3bit,也就是既有0又有1,单一的用&或者|是不行的,所以我们先进行&保持其它位不变,让P27,P26,P25全部为0(相当于复位,且0选通的
p2data是我们要写的数据;
最后根据上面的分析可知,要控制LED,
先给P0赋值,再通过P2口选通573,打开P0口与LED的大门,
最后关闭大门,防止给其它外设的数据干扰到LED
话不会影响外设,因为没接),再进行|的赋值,即可写成P2=P2&0X1F|p2data;

于是有LED控制代码:
讯享网
为了更好的移植性,我们将它封装成一个函数:
讯享网
我们 在Hardware文件夹下面添加 Device这个文件。


在main函数里面调用:初始化关闭LED,蜂鸣器和继电器。蜂鸣器和继电器后面会讲。
三、LED闪烁使用
注意循环变量的处理:第一种是累加,每进一次函数加一次,判断一次,累加到所定的上限归0,再重新从0开始累加。
第二种是取模运算,不用进行判断,led_shift由取模的值决定,这里是0-8;
讯享网
利用数组控制任意一个bit位:
利用结构体,共用体控制任意一位:
讯享网
LED的控制基本上我常用的就这这么多,后续有的话会再完善。
(如有错误,请各位积极指正!)
后续会进行蜂鸣器和继电器的说明……..
2025蓝桥杯(单片机)备赛–基本框架搭建(一)-CSDN博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/176857.html