/51MCU

51 单片机学习汇总

Primary LanguageC

51 MCU


基本信息

51 单片机学习成果汇总,包括B 站江科大教程的代码和自己实现的代码。

  • 单片机型号:STC89C51RC
  • 时钟频率:11.0592 MHz
  • Flash 大小:4 K
  • SRAM 大小:512 B
  • 程序编写软件:Keil v5.14.1 👉 官网
  • 程序烧录软件:STC-ISP v6.90E 👉 官网

项目信息

1-LED 🚨🔂

LED 流水灯,通过 P2 口直接控制

2-BtnControl ⬅️🚨➡️

通过按键控制 LED 显示。

  • 包括使 LED 以二进制递增形式显示和用按键控制 LED 左右偏移。
  • 由于按键内部簧片为机械结构,程序编写的要点在于按键的消抖,即按下消抖和松手消抖。

3-LEDControl 🚨🚨🚨🚨

模块化编程方法以及数码管的控制。

  • 数码管通过 P2 口的3个管脚控制 138译码器 输出位码,选择要点亮的数码管。
  • 再通过 P0 口输出段码,选择要显示的数字。
  • 由于段码和位码的连续扫描,会出现下一次位码输入时,上次的段码仍然存在,从而继续输出上次的数字,因此需要在段码输出后进行消影,即将段码清零。

4-LCDTools 🪟🪟

液晶屏显示模块驱动编写,待完善。

5-MatrixKey 0️⃣-9️⃣

矩阵键盘模块以及结合 LCD 液晶屏实现简易4位密码锁。

  • 矩阵键盘采用先列后行的扫描模式,检测时同样需要进行消抖
  • 简易密码锁配置,按键序号按从左到右、从上到下排序
    • 1-10 号键:数字 0-9
    • 11 号键:确认
    • 12 号键:取消
    • 13 号键:退格

6-Timer ⏰

定时器模块以及结合 LCD 液晶屏实现简易时钟。

  • 定时器内部计数器溢出便会产生中断,然后 MCU 处理中断函数
    • 配置中断寄存器,包括:
      • 总中断
      • 定时器自身的中断
    • 配置定时器的工作模式,包括:
      • 计数/计时
      • 分频模式,12T/6T
    • 配置定时器计数器的初始值以控制中断周期
  • 简易时钟即每隔 1s 产生中断,从而进行计时

7-Timer - LEDLoop ⏰🚨🔂

通过按键和定时器控制 LED 流水灯方向

  • 按键用于控制流水灯的方向
  • 定时器则根据按下的按键控制 LED 灯左移或者右移

8-Serial Communication 📩📤

串口通讯模块,与定时器 1 相关

  • 配置串口相关的寄存器,包括:
    • 串口的工作模式
    • 通讯的波特率等
  • 定时器 1 为波特率发生器,也要进行配置
    • 根据设定的波特率设置定时器计数器的初始值

9-MatrixLED 🖼️

点阵屏模块,通过 74HC595 芯片进行控制

  • 74HC595 芯片的特点为串行输入、并行输出
  • 通过 P0 口选择要操作的列,再通过 74HC595 芯片并行输入该列要点亮的 LED
  • 循环进行列扫描,实现点阵屏的动态显示
  • 当代码量较大时,可将不需更改的全局变量用 code 关键保存在 flash

10-DS1302 🕰️

DS1302 实时时钟模块,结合 LCD 液晶屏实现显示和设置实时时钟

  • DS1302 芯片内部采用 BCD 格式存储数据,需要注意转换
  • 写入时先向 DS1302 芯片输入写入命令,再输入写入数据
  • 读取时直接向 DS1302 芯片输入读取命令即可
  • DS1302 芯片写入/读取数据时需要注意两种操作时序的差别
  • 实时时钟实现时,设置时间对应位闪烁,数据合法性检测逻辑等需要仔细考虑

11-Beeper 🔊

蜂鸣器模块,借助延时函数使输入蜂鸣器的信号按一定频率翻转,进而发声

11-Beeper_Audio 📢🎶

通过蜂鸣器实现音乐播放

  • 通过定时器来翻转输入蜂鸣器的信号,从而确定声音的音高
    • 根据音高确定对应音符的频率,确定定时器计数器的初值
  • 音符时值和延音问题通过附加数组解决
  • 连音问题可通过开关定时器解决