单片机仿真实例:基于51单片机的智能坐姿调整桌椅设计,Proteus仿真(附件有源代码)

44 0
EDGE 发表于 2026-8-18 17:00:09 | 查看全部 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
引言:久坐场景里,真正影响使用体验的往往不是某一个复杂算法,而是几个很直接的问题:座椅高度能不能顺手调节,温度变化后能不能及时处理,按摩电机的方向和节奏能不能控制,当前状态能不能一眼看清。围绕这些需求,本设计采用AT89C52兼容51内核作为控制核心,在Proteus中完成了温度采集、座椅升降、按摩调节、加热/降温联动和LCD状态显示。
这里的智能主要体现在环境感知、阈值判断和执行联动上,设计重点是做出一套可以运行、可以观察、也便于复现的控制系统。
一、整体设计思路
仿真系统按照输入判断执行显示四个环节展开。输入端由DS18B20数字温度传感器和五个独立按键组成;控制端由AT89C52完成按键扫描、温度换算、阈值比较和步进节拍管理;执行端包括两路ULN2003A驱动、两台步进电机以及加热、降温继电器支路;LCD1602负责显示温度、方向、挡位和温控上下限。
这种划分有一个好处:每项功能都能在Proteus里单独观察。温度改变后,可以直接看继电器和指示灯是否动作;按下升降键,可以看座椅电机的相序变化;切换按摩方向和挡位,也能从液晶与电机状态中得到反馈。
本设计把重点放在坐姿调整相关的执行控制上,没有加入摄像头、姿态分类模型或复杂的压力阵列。这样处理并不是简单省略功能,而是先把控制链路做完整:传感器能稳定读取,按键不会一次触发多次,电机能够按方向和节拍运行,温控上下限可以修改,执行结果还能在液晶和指示支路上直接看到。
从学习和复现的角度看,仿真需要达到四个目标:第一,输入状态可修改;第二,控制条件可解释;第三,输出动作可观察;第四,源码、HEXProteus工程能够对应起来。围绕这四点,系统中的主要模块分工如下。
· AT89C52:完成温度读取、按键状态判断、阈值比较、液晶刷新和两路步进时序控制。
· DS18B20:提供可调的数字温度输入,便于在仿真中快速切换低温、正常和高温场景。
· LCD1602:集中显示实时温度、按摩方向、运行挡位以及TH/TL参数。
· ULN2003A与步进电机:分别模拟座椅升降机构和按摩执行机构。
· 继电器与LED支路:把加热、降温控制结果转化为容易辨认的仿真现象。

01

01
1  Proteus仿真总体电路
二、主要功能
1. 座椅升降调节
系统处于正常显示界面时,“+/“-/两个按键用于控制座椅步进电机。程序通过四相步进序列改变电机转动方向,并设置了约400步的内部行程边界,避免控制量无限累加。升降控制没有叠加复杂姿态识别,而是保留了清晰、直观、容易验证的手动调节逻辑。
2. 温度采集与冷热联动
DS18B20接在P1.0口,程序读取温度寄存器后换算为0.1℃单位。默认温控上限为20℃、下限为15℃:温度低于下限时启动加热支路;温度高于上限时启动降温支路;温度位于设定区间内时,两路执行端保持关闭。上、下限都可以通过按键修改。
  1. if (Temp < Temp_L * 10)
  2. {
  3.     Heat = 0;
  4.     Cold = 1;
  5. }
  6. else if (Temp > Temp_H * 10)
  7. {
  8.     Heat = 1;
  9.     Cold = 0;
  10. }
  11. else
  12. {
  13.     Heat = 1;
  14.     Cold = 1;
  15. }
复制代码
仿真中的继电器控制采用低电平有效,因此代码里的0表示对应支路吸合。这个细节在复现时很重要,如果只看变量名称而忽略有效电平,很容易把加热与降温状态判断反。
3. 按摩方向与挡位调节
第二路步进电机用于模拟按摩执行机构。正反转按键切换电机相序方向,加减速按键在OFF1LV2LV3LV之间循环。程序通过Timer1改变步进调用间隔,从而形成不同节拍。液晶第一行同步显示Z/F方向标志和当前挡位,不需要额外打开调试窗口。
  1. if (Key4 == 1)
  2.     DireFlag = 1 - DireFlag;
  3. if (Key5 == 1)
  4.     Gear = (Gear + 1) % 4;
复制代码
4. 参数设置与液晶显示
设置按键在正常界面、上限设置和下限设置三个状态之间循环。进入参数设置后,“+/“-/改为调整温度阈值;回到正常界面后,这两个按键继续承担座椅升降功能。LCD1602第一行显示实时温度、转向和挡位,第二行显示THTL,正在修改的数值通过闪烁提示。同一组按键在不同界面承担不同任务,减少了仿真元件数量,也让操作流程更接近常见嵌入式面板。

02

02
2  按键输入、温度采集与冷热执行模块
三、接口分配与信号组织
这套仿真对51单片机的四组I/O口进行了比较紧凑的分配。P0作为LCD16028位数据总线;P1.0连接DS18B20P1.1P1.5依次连接五个按键,P1.6P1.7控制加热、降温支路;P2低四位输出座椅电机相序,P2.5P2.7负责LCDRSRWEP3低四位输出按摩电机相序。
P2口同时承担座椅电机和液晶控制,但程序每次只改写低四位,并用掩码保留高四位状态,因此不会破坏LCD控制线。这个端口组织方式很适合51单片机端口数量有限的场景,也能看出源码与Proteus连线之间的对应关系。
  1. #define LCD1602_dat P0
  2. sbit DS1820_DIO = P1^0;
  3. sbit Key1 = P1^1;
  4. sbit Key2 = P1^2;
  5. sbit Key3 = P1^3;
  6. sbit Key4 = P1^4;
  7. sbit Key5 = P1^5;
  8. sbit Heat = P1^6;
  9. sbit Cold = P1^7;
  10. #define STEPPINGMOTOR_IO1 P2
  11. #define STEPPINGMOTOR_IO2 P3
复制代码
按键和继电器均采用低电平有效。仿真图中按键一端接地,按下后对应端口由高电平变为低电平;加热、降温输出同样以0作为有效状态。理解这一点以后,程序里的!Key2Heat=0Cold=0就比较容易对应到实际仿真现象。
四、程序实现要点
1. 温度数据换算与稳定处理
DS18B20原始数据的最低位对应0.0625℃。程序将读数放大为0.1℃保存,既避免在51单片机上频繁使用浮点运算,又便于LCD显示一位小数。读取部分还加入了简单的变化幅度判断,用来减小异常跳变对控制结果的影响。
  1. Temp = (int)((temp_h * 256) + temp_l) * 0.625
复制代码
2. 定时器分工
Timer050ms为基础节拍,负责按键扫描、界面闪烁和周期性温度更新;Timer1专门负责两路步进电机。把显示、检测和电机节拍拆开后,主循环只需完成数据处理与LCD刷新,程序结构更清楚,后续增加功能也比较方便。
Timer0累计20次后读取一次DS18B20,也就是大约每1秒更新一次温度;每累计5次翻转一次闪烁标志,正在设置的THTL以约0.5秒的完整明暗周期提示。Timer1按约1ms节拍进入中断,按摩挡位分别采用1次、3次和6次中断调用一步,座椅电机则每6次中断检查一次升降键。这里的1LV2LV3LV表示三种步进节拍,挡位编号本身不宜直接理解为速度值。
3. 两路步进电机驱动
座椅电机使用P2口低四位,按摩电机使用P3口低四位,两路输出分别经过ULN2003A驱动。正转和反转由两套相反的半步序列完成;座椅电机根据升降键即时动作,按摩电机则根据挡位选择不同的调用间隔。
  1. unsigned char code Foreward[] =
  2. {0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};

  3. unsigned char code Reversal[] =
  4. {0x09,0x08,0x0C,0x04,0x06,0x02,0x03,0x01};
复制代码
每执行一步,程序先用&=0xF0清除端口低四位,再写入当前相序值,高四位保持不变。座椅电机还维护STEPPINGMOTOR_Angle1计数:上升时不能超过400,下降时不能低于0,用软件边界模拟桌椅的有限调整行程。

03

03
3  座椅与按摩双步进电机驱动模块
4. 按键消抖与状态复用
按键扫描并不是检测到低电平就连续执行,而是借助KeyFlag记录释放状态。一次按下只生成一次KeyValue,必须松开后才能触发下一次,因此修改温度阈值、切换方向或切换挡位时不会因为按住时间稍长而连续跳变。座椅升降属于需要持续动作的功能,所以在Timer1中直接检查按键电平,与菜单按键的一次触发逻辑分开处理。
温度设置还加入了边界约束:TH最高为99℃TL最低为0℃,并始终保证TH至少比TL1℃。这样可以避免上下限反置,减少仿真时出现加热、降温判断互相冲突的情况。
5. LCD信息组织
LCD第一行按照“T:温度方向挡位排列,例如T:23.0° Z OFF;第二行显示TH:20°TL:15°。温度使用一位小数,方向用Z/F压缩显示,挡位用OFF1LV3LV表示。显示内容不追求花哨,而是让调试时需要看的变量尽量都出现在同一屏上。
五、Proteus仿真过程
仿真工程中已经放置AT89C52LCD1602DS18B20、两片ULN2003A、两台步进电机、五个按键以及两路继电器指示支路。编译生成c51.hex后,将其加载到单片机的Program File,启动仿真即可进入运行界面。附件中已经提供预编译HEX,直接打开工程也可以复现。
实际测试可以按下面的顺序进行:
1. 启动仿真,确认LCD显示实时温度、方向、挡位以及TH/TL参数。
2. 保持正常界面,分别点击“+/“-/,观察座椅电机的相序与转动变化。
3. 点击正反转加减速,观察按摩电机方向及不同挡位下的步进节拍。
4. 调节DS18B20温度:低于TL时检查加热支路,高于TH时检查降温支路,位于区间内时检查两路是否关闭。
5. 设置进入阈值界面,修改THTL,确认闪烁位置及控制边界随设定值变化。
复现时容易忽略的几个细节
1.Proteus工程通过相对路径读取HEX,应保持仿真文件仿真程序为同级文件夹。
2.座椅升降只在正常显示状态下有效;如果正在设置THTL,升降键会用于修改参数。
3.按摩电机初始挡位为OFF,必须先点击加减速切换到任一运行挡位。
4.继电器为低电平有效,判断动作状态时应同时观察线圈、触点和LED,不能只看变量值。
5.如果LCD没有显示,优先检查HEX加载路径、晶振参数和复位状态,再检查数据线与RS/RW/E连接。
六、仿真结果
1.高温场景:设置T=23.0℃TH=20℃TL=15℃,降温继电器与D2动作,加热支路关闭。
2.正常温区:把温度调到1520℃之间,加热和降温均关闭,LCD继续刷新实时温度。
3.低温场景:把温度调到15℃以下,加热继电器与D1动作,降温支路关闭。
4.升降场景:返回正常界面,按住“+/“-/,座椅电机按相反序列运行,到达软件边界后不再继续累加。
5.按摩场景:依次切换方向和三个运行挡位,电机相序方向改变,步进调用间隔随挡位变化。
6.参数场景:进入THTL设置界面,当前字段闪烁,修改后的阈值立即参与温控判断。
在默认参数下,DS18B20温度设为23.0℃,高于20℃上限,程序进入降温分支,降温继电器和D2指示灯动作;当温度回到1520℃区间时,加热和降温支路均关闭。座椅电机能够响应升降按键,按摩电机能够完成方向切换和多挡节拍调节,LCD同步给出当前状态。
从仿真结果看,温度采集阈值比较继电器动作形成了完整闭环,两路步进电机的控制也可以独立运行。整个方案没有依赖难以复现的外部模块,适合作为51单片机、Proteus联合仿真以及多任务定时控制的综合练习。
七、设计结论
本设计完成了一个以51单片机为核心的智能坐姿调整桌椅仿真模型,重点实现座椅升降、温度上下限设置、冷热自动联动、按摩方向与挡位调节以及LCD状态显示。程序采用按键状态机、温度阈值判断和双定时器分工,功能之间相互独立,仿真现象也比较直观。
当前版本也有明确边界:它没有直接检测人体脊柱角度或坐姿类别,温度阈值掉电后不会保存,座椅行程依靠软件计数而不是独立限位开关。把这些边界写清楚后,项目定位会更准确——它是一套以Proteus为载体的桌椅辅助调节与环境联动控制方案,而不是已经完成实物验证的姿态识别产品。
如果后续继续扩展,可以增加压力传感器或距离传感器,用来判断落座状态和坐姿变化;也可以加入定时提醒、蜂鸣提示或串口记录。不过就当前版本而言,现有工程已经能够完整复现基础的桌椅调节与环境联动过程。
结束语
这套设计的特点不是元件堆得多,而是几个常用控制功能都能在同一个Proteus工程里跑起来。温度、按键、电机、继电器和液晶之间的关系清楚,代码量也适中,适合拿来学习51单片机综合控制、完善课程设计,或者在此基础上继续增加新的传感器和执行机构。
资料包说明
1.Proteus仿真工程:C51_Time.pdsprj
2.Keil C51工程:c51.uvprojc51.uvopt
3.完整程序源码:main.cDS18B20.hLCD1602.Hkey.hSTEPPINGMOTOR.H
4.预编译程序:c51.hex,可直接加载到仿真单片机。
5.仿真配图与复现说明。

关键词:51单片机;AT89C52Proteus仿真;智能桌椅;DS18B20;步进电机;LCD1602;温度控制

智能坐姿调整桌椅_Proteus仿真附件.zip

566.52 KB

回复 转播

使用道具 举报

回复

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

学研领航向全体高校师生打造的一站式综合交流与资源服务平台,集知识学习、经验分享、资源下载、互动问答、职场成长、兼职实践于一体,覆盖校园生活、专业学习、求职就业、兴趣发展等全场景需求。

快捷导航

小黑屋
Copyright © 2026 学研领航 版权所有 陕ICP备2025077879号-1
关灯 在本版发帖 返回顶部
快速回复 返回顶部 返回列表