笔记整理自B站UP主江科大自化协教程《51单片机入门教程-2020版 程序全程纯手打 从零开始入门》
所用单片机为普中51 STC89C52单片机2022新款,文中所提到的调试现象及结果也都基于此款单片机。
存储器介绍
SRAM:Static Random Access Memory 静态RAM
内部存储结构:锁存器、触发器
是所有存储器中速度最快的,定义的变量存储在SRAM中,容量相对较少,成本较高
应用:电脑CPU高速缓存,特殊功能寄存器
DRAM:Dynamic Random Access Memory 动态RAM
电容充放电来存储数据,但电容集成度很高,存在漏电现象,所以要配一个扫描电路,每隔一段时间读取数据并补电,刷新一下,补上因为漏电现象所丢失的电能,相比于SRAM成本更低,容量更大
应用:电脑内存条,手机运行内存
开漏输出
定时器扫描按键
之前的思路:检测到按键按下,延时一段时间,把抖动滤掉,检测松手,再延时一段时间
那这样存在的问题就是检测松手的while循环中可能会卡很长时间,对主循环不利
现在的思路:每隔20ms读取一下按键值,这样得到的数据直上直下,不可能20ms都在抖动之间,跳变只有一下。
如何判断按键是按下还是松开呢?
如果上一个状态是1,当前的状态是0,则按键为从松开到按下;
如果上一个状态是0,当前的状态是1,则按键为从按下到松开。
这样就算按键一直按着不放,也不会影响主函数
定时器扫描数码管
按照之前的思路,如果主循环中有长时间的Delay,那么会影响数码管的显示,如何让数码管不受主循环的影响?定时器扫描数码管
定时器使用时一定要注意:定时器中断所调用的函数或其内部一定不要有Delay,否则就会乱套!!!
单总线注意问题
在应用单总线时,如果还要用定时器,那会出问题,因为单总线它延时几微秒时序是非常严格的,不能被打断,可以考虑在配置单总线的函数中停止总中断(EA = 0),执行完后再打开总中断(EA = 1),但这样对定时器也会有不小的影响,这也是单总线在应用时的一个弊端。
也告诉我们在综合模块时,需要注意各个模块的衔接,有的可能优先级比较高,如果有两个优先级都比较高,可以考虑外挂模块,比如说数码管和DS18B20都想要正常显示,不闪烁,可以独立扫描数码管。
对比I2C:单总线使用绝对的时间,I2C有单独的时钟线,不怕进中断,即使I2C执行到一半被终止了,时钟和数据同时停止,时钟只要不工作,主机和从机都不动。
LED呼吸灯程序分析
如果呼吸灯的程序写在主循环中,那么主循环是无法做其他事的。
通常可以把PWM写在定时器中,更高级一点的单片机STC12系列,STC15系列有硬件的PWM,STM32也有硬件的PWM
不断翻转IO是一种比较简单但也比较占用CPU的操作,通常会用硬件来实现。
定时器产生PWM
用来驱动电机的话频率大概在10K~20KHz
有源蜂鸣器和无源蜂鸣器
蜂鸣器是一种将电信号转换为声音信号的器件,常用来产生设备的按键音、报警音等提示信号
蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器
有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定
无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音
我们这款开发板上是无源蜂鸣器,无源蜂鸣器不能一直通电,内部是一个线圈(电阻较小),必须给交流振荡才能发声,一直通电很容易造成蜂鸣器的烧毁,但我们这款开发板上IO口一上电默认是高电平,ULN2003内部有一个反相器,所以输出低电平,蜂鸣器就接通了,因为接了限流电阻,所以也不会烧(其实不太合理)
正负极判断
新的蜂鸣器引脚没有剪的话长脚是正极
原理图引脚
我们这款开发板引脚和视频教程中不一样,这里接的是P25引脚
感谢抽出宝贵时间阅读的各位小读者们,创作不易,如果感觉有帮助的话,帮忙点个赞再走吧!你的支持是我创作的动力,希望能带给大家更多优质的文章。