![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
蓝桥杯单片机备战笔记
文章平均质量分 55
蓝桥杯备战笔记,主控STC15F2K61S2,各个外设封装教学,互不干扰代码精简,如果能看懂我的代码分析,拿省一不成问题。
@NachoNEKO
要猫猫更努力一点嘛?
展开
-
蓝桥杯单片机备战——关于573问题的填坑
假设我们要先操作LED,再操作继电器,那么按照我之前的写法会是这样:先写001解锁LED,再写000锁存。好,问题就出在最后一步,当P25=0时,P26还等于0,P27还等于1,这个短暂的瞬间组成了001刚好就会解锁LED。所以这就是为什么我当时用110去锁存继电器就不会解锁LED了。还记得我前面在封装继电器外设的时候遇到的这个问题嘛,当时我怀疑的是138译码器在切换通道的时候会出现其他暂态导致已经锁定的573解锁。其实不然,之所以会这样还是因为代码问题,也可以说是573反应时间太快了。原创 2024-03-22 13:19:40 · 275 阅读 · 0 评论 -
蓝桥杯单片机备战——第十一届省赛真题解析
烧录代码试试效果,我们发现在设置的时候根本看不到上下限的变化,原因是我们在设置参数时,还是显示的Tmax,Tmin而不是Tmax_New,Tmin_New。先了解了大体要求,是不是感觉也不是很难嘛,我们现在需要做的就是先实现大体框架,在逐一每个具体分支功能。同上面一样的,定义一个bit标志位,然后翻转就行,一个状态对应一个参数。简单·,直接定义一个bit标志位,初始状态为0,按键按下翻转此标志位,此标志位为0则显示参数界面,为1则显示设置参数界面!首先我们要确保按键已经切换到了独立按键模式,不然美分哦!原创 2024-03-02 10:21:30 · 1956 阅读 · 3 评论 -
蓝桥杯备战——3.定时器前后台
由于比赛时时间紧,我们也不要去自己查寄存器计算时间,直接使用STC-ISP生成代码就行。另外需要注意IAP15F2K61S2只有定时器0/1/2,没有定时器3/4。由上图可以看到我们可以通过AUXR寄存器直接设置定时器的1T/12T模式了。在定时器0/1模式上也可以设置为16位自动重装载。我就用上节的矩阵键盘20ms扫描一次的要求示例吧。原创 2024-01-25 12:51:20 · 866 阅读 · 0 评论 -
蓝桥杯备战——8.DS1302时钟芯片
由上图可以看到,芯片的时钟引脚SCK接到了P17,数据输出输入引脚IO接到P23,复位引脚RST接到P13。具体细节还需自行翻阅手册,我只截出重点部分。请自行阅读芯片手册,理解记忆即可。原创 2024-01-28 09:11:17 · 589 阅读 · 0 评论 -
蓝桥杯备战——7.DS18B20温度传感器
可以修改)数据格式,最高位为符号位,其实就是温度数据以补码形式存放在了两个暂存器里。实际上高位暂存器的高5位全用来放符号位了,只有低3位是数据位。比赛的时候是会提供DS18B20单总线通讯协议的代码,但是没有提供读取温度数据的代码,所以还是需要我们去查看手册,我只把重要部分截下来了。通过上图我们可以看到DS18B20通过单总线接到了单片机的P14上。解释一下上图,DS18B20使用12位(请理解记忆,注意阅读注释。原创 2024-01-26 21:34:26 · 920 阅读 · 0 评论 -
蓝桥杯备战——13.PCF8591芯片的使用
截取自NXP的PCF8591芯片数据手册,我把重点关注部分划出来了,请务必自行阅读一遍数据手册!原创 2024-02-03 16:54:36 · 1061 阅读 · 0 评论 -
蓝桥杯备战——2.矩阵键盘
双击功能则是在松手状态下去判断长按功能的计时变量,小于一定值则可认为按键短按一次,此时再创建一个计时变量,当此计时变量大于一定值而小于一定值时按键再次按下则可判定为双击。**扩展长按功能:**由于按键持续按下状态Cont=键值,且Trg=0;由上图可以看到若J5跳线帽接地,就S4~S7就可以当做四路独立按键,若接到P44,则就是4*4的矩阵键盘。2.按键刚按下,且Key_Scan只运行一遍时:Trg=键值,Cont=键值。然后我们就能根据这三个状态来判断长按,短按,未按下,以及后续扩展双击等功能。原创 2024-01-25 12:01:34 · 1262 阅读 · 2 评论 -
蓝桥杯备战——14.总结及后续
到目前为止,整个蓝桥杯单片机板子上面的外设我都差不多封装完成了,而我的初衷也是把板子上的硬件都封装一遍且互不干扰。经过我的初步测试也是达到了这个效果,如果把我做的笔记都弄懂了,拿个省一应该问题不大。后续我会对往届的真题进行分析,并且分享我的个人见解!如果需要完整的工程,可在评论区留言!原创 2024-02-03 17:07:12 · 277 阅读 · 4 评论 -
蓝桥杯备战——9.读写AT24C02
请先务必阅读一遍IIC通讯协议以及AT24C02的用户手册!在此基础上对代码进行理解记忆,方可达到事半功倍的效果。由上图我们可以看到AT24C02通过IIC与单片机进行通讯,由于A0,A1,A2都接地,所以器件地址为0XA0。当按下按键S7时向24C02写入数据,当按下S8时,读出对应地址的数据并发送到串口。原创 2024-01-30 14:40:18 · 389 阅读 · 0 评论 -
蓝桥杯备战——1.点亮LED灯
如果ULN2003输入为0,则输出为1。所以解决办法就是我们上电先控制138选中Y5输出低电平,则Y5C为高电平,然后单片机P0输出低电平,则ULN2003输出高电平,蜂鸣器继电器关闭,然后再让Y5C为低电平锁存一下573即可。由上图可以看到Y4C接到了或非门74HC02的输出端,而输入端为WR和138输出端Y4。由上图可以看到8个共阳LED灯接到了573输出口,而573输入接到单片机P0口上。由上图我们可以看到蜂鸣器以及继电器都是低电平有效,接到了ULN2003输出端,原创 2024-01-24 17:50:54 · 860 阅读 · 0 评论 -
蓝桥杯备战——11.NE555测频
这里真的不得不佩服STC芯片的设计者们,使用一个PCA计数阵列就能实现脉冲捕获,PWM输出,软16位定时器,外部中断,D/A功能。不过现在我也不打算就用定时器0来对外部输入脉冲计数,因为我的初衷是把板子上面的各个外设都封装一遍且互不干扰,现在定时器0已经被我用做前后台功能了,所以我得另寻他法。但是呢,槽点来了,CCP功能切换不到P34引脚,只能把PCA计数脉冲源切换到P34引脚,很无语,就不能好好阅读一下STC15F的用户手册嘛?我们可以看到,上图就是一个NE555构建的方波发生电路,原创 2024-02-01 17:58:17 · 1633 阅读 · 0 评论 -
蓝桥杯备战——5.动态数码管扫描
经查阅说明书得知数码管为共阳极,共阳端口接到了U8,而段码接到了U7。如果需要选中U8,我们只需要将P25=0;如果需要选中U7,我们只需要将P25=1;原创 2024-01-25 21:57:31 · 584 阅读 · 0 评论 -
蓝桥杯备战——10.超声波模块
可以看到,J2跳线帽如果P10接N_A1,P11接N_B1就是用作超声波功能。N_A1用作发生超声波功能,而N_B1用作接收超声波反馈信号,通过R6上拉到VCC,所以分析接收到超声波信号后由高电平变低电平。我们首先需要通过P10引脚输出一定频率的方波信号来驱动JS2发出超声波,然后打开定时器计数,直到P11引脚变为低电平,此时关闭定时器,获取计数值后就能计算得到距离。蓝桥杯单片机板子的原理图做的简直是依托答辩,乱糟糟的不说还弄成黑白的,明明很简单的东西,弄成一大堆。原创 2024-01-30 16:55:05 · 899 阅读 · 0 评论 -
蓝桥杯备战——4.继电器/蜂鸣器
于是573(U9)处于输出跟随输入P0状态,此时若P06=1,则573输出Q7=1,ULN2003输入IN7=1,但是由于ULN2003输入后芯片内部先经过非门在输入到达林顿管,所以输出OUT7=0,蜂鸣器响。这里我也发现一个小问题,如果上次的P0口状态已经改变了0XFF,假如现在运行Set_Beep(),那在解锁后,输出会立即跟随输入,那继电器的状态就会改变了,所以我觉得这里需要用全局变量来暂存旧的状态,后面再改吧。最好自己先去查查138以及ULN2003的使用方法,我这里直接讲思路。原创 2024-01-25 17:52:28 · 699 阅读 · 0 评论 -
蓝桥杯备战——12.超声波与测频代码优化
至于我为什么要这么改呢,看一下我原来封装的超声波代码就知道了,下图高亮部分,如果一直没有接收到反馈信号,程序就会一直等待65ms,严重吃MCU资源,而且会导致数码管闪动。如果换成PCA模块捕获功能来做的话,我们只需初始化一下,然后在每个下降沿捕获中断里面获取距离就行,这大大提高了代码效率!昨天我在看原理图的发现超声波模块的反馈引脚P11刚好可以使用PCA模块0的捕获功能,我就想着把PCA功能留给超声波,然后测频功能还是改成定时器0来完成,然后前后台功能改成定时器1。原创 2024-02-04 11:58:11 · 650 阅读 · 1 评论 -
蓝桥杯备战——6.串口通讯
由于比赛时间紧,我们最好不要去现场查寄存器手册,去计算波特率。例如我这是使用定时器2用作串口1的波特率发生器,波特率9600。串口收发函数其实也不需要我们自己现场去写,在STC-ISP烧录软件里面有示例,复制出来稍作修改就行。由上图我们可以看到串口1通过CH340接到了USB口上,通过串口1我们就能跟电脑进行数据交互。然后就能直接使用printf()函数了,示例:按键按下后将获取到的温度数据通过串口发送到电脑。另外需要注意的是STC15F是有两组高速串口的,而且可以切换端口。下面是我修改过后的代码。原创 2024-01-26 21:09:43 · 3603 阅读 · 0 评论