介绍

整理了一下 MCU 系统综合实验的课程设计,因为老师规定要使用发放的单片机 (STC89C54RC) 和屏幕 (LCM12864F),所以就只能做一些基础的应用。

系统实现了多个菜单选项的选择、RTC 走时、传感器读取以及串口数据解析功能。

Hardware

硬件使用 Altium Designer 绘制,原理图如下:

原理图

供电与通信部分使用 16-pin 的 USB-C 接口。使用 HT7333-3.3 线性稳压芯片降压到 3.3V。使用 CH340K 实现 USB 转 TTL 串口,来给 51 单片机或 ESP32 烧录固件,预留排针来通过跳线帽选择进行串口通信的器件。

使用 DHT11 温湿度传感器来获得环境温度和湿度,该传感器为单线通信。

使用 EC11 旋转编码器实现操作功能,其状态有左右旋转和按下。

PCB 图形:

PCB

PCB 3D 预览:

PCB 3D

Firmware

固件工程目录结构如下:

Firmware
 │  keilkilll.bat
 │  Template.uvproj
 ├─ Driver
 │  ├─ DHT11
 │  │      DHT11.c
 │  │      DHT11.h
 │  ├─ DS1302
 │  │      DS1302.c
 │  │      DS1302.h
 │  ├─ Key
 │  │      Key.c
 │  │      Key.h
 │  └─ ST7920
 │         ST7920.c
 │         ST7920.h
 └─ Src
        Bmp.h
        main.c

其中 keilkilll.bat 文件是清理编译中间文件,可以在打包分享工程之前运行以减小文件体积;Template.uvproj 为 Keil C51 的工程文件;Driver 文件夹中为各模块驱动;Src 文件夹存放源文件,其中 Bmp.h 为各图标的字模。

除了 main.c 外,其他文件均为 utf-8 编码,因为使用的屏幕带有字库,字库存放方式为 gb2312,为了能够直接在代码中写可读的中文来实现对应显示,直接将 main.cgb2312 格式保存,方便程序编写。

单片机使用 11.0592MHz 晶振,工作在 6T 模式下,串口波特率为 19200bps。

程序内较为复杂的函数均写有注释,具体使用方法请参考源文件内的注释以及实现。下面着重介绍一下串口通信的方式。程序实现了通过串口设定时间、天气和空气质量(对应菜单的 1, 3, 4 页),为了完成不同功能独立设置,采用 ~ 作为通信开始标志,其后紧跟设定内容标志,T 表示设定时间,W 表示设定天气,A 表示设定空气质量,后面为定长的参数设置选项。如:~T21080701020306 表示把时间设置为2021年8月7日1时2分3秒星期五;~W101025047 表示天气多云,25℃,湿度47%; ~A096033 表示空气质量 AQI 为96,PM2.5 指数为 33。

使用 Esp32 来联网获取上述需要的各种内容后通过串口发送给 51 单片机。除天气代码外,其他的参数设置区域内容都是对应参数的值,天气代码的对应列表如下(具体见代码实现中的语句,因为没有放太多张天气图标,所以就只写了下面的这部分):

代码天气描述
100
101多云
104
300
999未知

系统通过 Esp32 来进行网络校时和天气、空气质量信息的获取,但是由于二者串口电平不匹配,设计时在中间串了一个电阻,效果并不是很好。建议采用类似设计时改为使用一片具有单向电平转换功能的 74 系列芯片。因为天气和空气质量数据接口需要申请 Api 且每天可调用的次数有限,所以此部分功能存在较多 bug,便不再放上来了。

效果展示

得益于两家 PCB 打样厂商的激烈竞争,现在每个月都有了好几次免费打样的机会。

PCB 空板:

PCB

焊接后用硬纸板和打印的不干胶纸简单做了个面板:

成品

菜单功能演示:

主菜单

旋转编码器可以实现左右切换框选,按下可以确认或退出。

时钟功能:

时钟功能

通过串口设定一次时间后 DS1302 可以掉电走时。

温湿度监测:

温湿度监测

使用 DHT11 测得的数据误差较大。

天气:

天气

因为项目时短时间内完成的课程设计,可以扩展的空间还有很大,如果有感兴趣的可以自己扩展更多功能。需要注意的是:

  1. 使用 11.0592MHz 晶振,若非此频率需要修改定时器中断初值以匹配串口波特率,还要修改 DHT11 通信时序中的 _nop_() 数量。
  2. 烧录固件时需要选择 6T 方式,建议连续烧录两次以免未成功修改运行方式。
  3. PCB 中有预留 51 单片机和 Esp32 的 IO 通信,其中使用了 IO12,因为 IO12 上电的电平影响 Esp32 运行方式,所以此引脚最好不要使用,新设计中注意修改。

源文件

MCU_System.zip

Last modification:August 7, 2021
如果觉得我的文章对你有用,请随意赞赏