51 单片机学习成果汇总,包括B 站江科大教程的代码和自己实现的代码。
- 单片机型号:
STC89C51RC
- 时钟频率:
11.0592 MHz
Flash
大小:4 K
SRAM
大小:512 B
- 程序编写软件:
Keil v5.14.1
👉 官网 - 程序烧录软件:
STC-ISP v6.90E
👉 官网
LED
流水灯,通过 P2
口直接控制
通过按键控制 LED
显示。
- 包括使
LED
以二进制递增形式显示和用按键控制LED
左右偏移。 - 由于按键内部簧片为机械结构,程序编写的要点在于按键的消抖,即按下消抖和松手消抖。
模块化编程方法以及数码管的控制。
- 数码管通过
P2
口的3个管脚控制138译码器
输出位码,选择要点亮的数码管。 - 再通过
P0
口输出段码,选择要显示的数字。 - 由于段码和位码的连续扫描,会出现下一次位码输入时,上次的段码仍然存在,从而继续输出上次的数字,因此需要在段码输出后进行消影,即将段码清零。
液晶屏显示模块驱动编写,待完善。
矩阵键盘模块以及结合 LCD
液晶屏实现简易4位密码锁。
- 矩阵键盘采用先列后行的扫描模式,检测时同样需要进行消抖
- 简易密码锁配置,按键序号按从左到右、从上到下排序
1-10
号键:数字0-9
11
号键:确认12
号键:取消13
号键:退格
定时器模块以及结合 LCD
液晶屏实现简易时钟。
- 定时器内部计数器溢出便会产生中断,然后
MCU
处理中断函数- 配置中断寄存器,包括:
- 总中断
- 定时器自身的中断
- 配置定时器的工作模式,包括:
- 计数/计时
- 分频模式,
12T/6T
等
- 配置定时器计数器的初始值以控制中断周期
- 配置中断寄存器,包括:
- 简易时钟即每隔
1s
产生中断,从而进行计时
通过按键和定时器控制 LED
流水灯方向
- 按键用于控制流水灯的方向
- 定时器则根据按下的按键控制
LED
灯左移或者右移
串口通讯模块,与定时器 1 相关
- 配置串口相关的寄存器,包括:
- 串口的工作模式
- 通讯的波特率等
- 定时器 1 为波特率发生器,也要进行配置
- 根据设定的波特率设置定时器计数器的初始值
点阵屏模块,通过 74HC595
芯片进行控制
74HC595
芯片的特点为串行输入、并行输出- 通过
P0
口选择要操作的列,再通过74HC595
芯片并行输入该列要点亮的LED
- 循环进行列扫描,实现点阵屏的动态显示
- 当代码量较大时,可将不需更改的全局变量用
code
关键保存在flash
中
DS1302
实时时钟模块,结合 LCD
液晶屏实现显示和设置实时时钟
DS1302
芯片内部采用BCD
格式存储数据,需要注意转换- 写入时先向
DS1302
芯片输入写入命令,再输入写入数据 - 读取时直接向
DS1302
芯片输入读取命令即可 - 向
DS1302
芯片写入/读取数据时需要注意两种操作时序的差别 - 实时时钟实现时,设置时间对应位闪烁,数据合法性检测逻辑等需要仔细考虑
蜂鸣器模块,借助延时函数使输入蜂鸣器的信号按一定频率翻转,进而发声
通过蜂鸣器实现音乐播放
- 通过定时器来翻转输入蜂鸣器的信号,从而确定声音的音高
- 根据音高确定对应音符的频率,确定定时器计数器的初值
- 音符时值和延音问题通过附加数组解决
- 连音问题可通过开关定时器解决