STC89C52单片机+LCD1602:手把手教你做一个低成本电机转速表(附完整代码)

张开发
2026/4/17 6:15:24 15 分钟阅读

分享文章

STC89C52单片机+LCD1602:手把手教你做一个低成本电机转速表(附完整代码)
STC89C52单片机LCD1602手把手教你做一个低成本电机转速表附完整代码在电子制作和创客项目中电机转速测量是一个常见需求。无论是调试机器人关节、优化风扇性能还是验证自制发电机的输出一个可靠的转速表都能提供关键数据。本文将带你用最基础的STC89C52单片机和LCD1602显示屏配合槽型光耦传感器打造一个成本不足50元的实用转速测量工具。1. 硬件选型与成本控制1.1 核心器件清单这个项目的核心在于用最经济的方案实现可靠测速。以下是经过多次验证的优选器件组合器件名称型号/参数单价(元)采购渠道单片机STC89C52RC4.5主流电商平台LCD显示屏1602字符型6.8电子元器件商城槽型光耦CXGO红外对管2.3传感器专营店直流电机N20减速电机8.9机器人配件供应商洞洞板5×7cm1.2本地电子市场注价格参考2023年12月市场行情批量采购可再降30%成本1.2 替代方案建议如果预算极其有限可以考虑以下替代方案用STC89C52RC的DIP40封装替代PLCC封装节省1元使用二手的1602液晶屏价格可降至3元左右自制光耦支架用黑色热缩管包裹红外对管成本降至0.5元2. 硬件搭建实战2.1 电路连接详解整个系统只需要4个主要连接部分光耦传感器接口VCC → 5V电源 GND → 电路地 DO → P3.2(INT0) // 使用外部中断0检测脉冲LCD1602接线方案RS → P2.0 RW → P2.1 EN → P2.2 D4-D7 → P2.4-P2.7电机驱动电路建议增加一个TIP122三极管驱动电机电位器中间引脚接电机正极2.2 焊接技巧在洞洞板上布局时注意这三个关键点光耦传感器与转盘距离保持3-5mm电机电源线路要加粗走线LCD1602最好使用排针插座方便调试提示先用万用表测试所有连接再通电特别是5V和GND之间不能短路3. 软件设计精要3.1 核心算法实现转速计算采用脉冲计数定时采样的方法// 全局变量定义 unsigned long PluNum 0; // 脉冲计数 float RPM 0; // 转速值(r/min) // 外部中断0服务函数 void EX0_ISR() interrupt 0 { PluNum; // 每个缺口触发一次中断 } // 定时器1中断服务函数 void T1_ISR() interrupt 3 { static unsigned int count 0; TH1 0x3C; // 50ms定时 TL1 0xB0; if(count 20) { // 1秒计算一次 RPM (PluNum * 60.0) / 20.0; // 20个缺口/转 PluNum 0; count 0; } }3.2 LCD显示优化在1602上显示转速时采用以下技巧提升可读性自定义字符创建转速单位符号unsigned char customChar[] { 0x00,0x0A,0x15,0x11,0x0A,0x04,0x00,0x00 // r/m图案 }; LCD_CreateChar(0, customChar);防闪烁刷新策略void UpdateDisplay() { char buf[16]; sprintf(buf, Speed:%4.0f , RPM); LCD_SetCursor(0,1); LCD_WriteString(buf); LCD_WriteChar(0); // 显示自定义单位符号 }4. 调试与优化4.1 常见问题排查根据实际项目经验这些问题最常出现转速显示为0检查光耦传感器LED是否亮起用示波器查看DO引脚输出波形确认中断触发方式设置正确(IT01)数值跳动剧烈在光耦输出端添加0.1uF电容滤波调整转盘与光耦的间隙修改软件中的采样周期4.2 精度提升技巧要使测量误差小于1%需要关注转盘加工缺口数量建议20个太多会增加处理负担缺口宽度与光耦光束直径相当软件校准// 在计算RPM时加入校准系数 #define CALIB_FACTOR 0.98 // 通过标准转速源测得 RPM (PluNum * 60.0 * CALIB_FACTOR) / 20.0;硬件改进给单片机单独供电避免电机干扰在传感器VCC引脚加磁珠滤波5. 项目扩展方向这个基础框架可以衍生出多种实用变种5.1 无线传输版本增加HC-12无线模块成本15元修改代码添加串口传输功能void SendData() { printf(RPM%.1f\n, RPM); }5.2 多电机监控系统使用STC8H系列多串口单片机扩展多个光耦输入通道在LCD上分页显示各电机转速5.3 工业级改进方案虽然本文聚焦低成本实现但若需要更高可靠性改用欧姆龙EE-SX670光耦抗干扰更强增加光电隔离电路使用金属编码盘替代塑料转盘6. 完整代码实现以下是经过实际验证的完整代码包含所有必要功能#include reg52.h #include stdio.h #include LCD1602.h #define SLOTS 20 // 转盘缺口数量 unsigned long pulseCount 0; float rpm 0; bit updateFlag 0; void Timer1_Init() { TMOD 0x0F; TMOD | 0x10; TH1 0x3C; TL1 0xB0; ET1 1; TR1 1; } void EX0_Init() { IT0 1; EX0 1; } void main() { EA 1; Timer1_Init(); EX0_Init(); LCD_Init(); LCD_ShowString(0,0,Motor RPM Meter); while(1) { if(updateFlag) { updateFlag 0; LCD_ShowFloat(0,1,rpm,1); LCD_ShowString(10,1,r/min); } } } void EX0_ISR() interrupt 0 { pulseCount; } void T1_ISR() interrupt 3 { static unsigned int ticks 0; TH1 0x3C; TL1 0xB0; if(ticks 20) { rpm (pulseCount * 60.0) / SLOTS; pulseCount 0; ticks 0; updateFlag 1; } }配套的LCD1602驱动代码需要实现以下关键函数LCD_Init()- 显示屏初始化LCD_ShowString()- 字符串显示LCD_ShowFloat()- 浮点数显示7. 实际应用案例在某高校电子竞赛培训中学生使用本方案制作了微型风力发电机测试平台。他们做了以下创新改进在转盘上等距粘贴反光条配合反射式光电传感器增加SD卡模块记录转速变化曲线通过PWM输出转速模拟信号测试数据显示该系统在100-5000rpm范围内线性度误差小于2%完全满足教学实验需求。整个项目从元器件采购到功能实现仅用时6小时材料成本控制在35元以内。

更多文章