标题目录
💫51单片机全自动洗衣机proteus仿真设计
(程序+仿真+设计报告+讲解视频)
仿真原版本:proteus 7.8
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:S0025
💫设计介绍
1、按键功能:
(1)通过"K1"键步进改变"标准、经济、单独、排水"四种方式,执行相应的程序。对应指示灯亮。
(2)通过"K2"键步进改变"强洗、弱洗"两种方式,执行相应的程序,对应指示灯亮。
(3)通过"K3"键控制洗衣机运行、暂停和解除报警功能。
2、方式功能选择:
一般洗衣机的步骤为:洗涤,漂洗,脱水,当处于某种状态时,对应的指示灯以0.7S周期闪烁,当洗衣机在洗涤过程中,洗涤指示灯闪烁。
可以通过方式选择设定具体的运行过程。
(1)标准方式:进水---> 洗涤 ---> 排水 ---> 进水 ---> 漂洗 ---> 排水 --->进水 ---> 漂洗---> 排水 ---> 脱水。
(2)经济方式:进水 ---> 洗涤 ---> 排水 ---> 进水 ---> 漂洗 ---> 排水 ---> 脱水。
(3)单独方式:进水 ---> 洗涤。
(4)排水方式:排水 ---> 脱水。
(5)强洗即电动机转速快,弱洗即电动机转速慢。
3、整机功能:
(1)开机默认状态为标准方式、强洗。
(2)在洗涤和漂洗过程中,电动机正转一次,反转一次,连续运行。
(3)在进水和脱水过程中,相应的指示灯亮,继电器吸合。
(4)当执行某个步骤时,只有"K3"键有效,按下暂停,再按恢复运行。
💫仿真图
电动机驱动模块电路设计
电动机驱动采用LD298电动机驱动芯片,单片机P25、P24与L298的IN1、IN2分别对应相连,ENA直接接VCC,后面所加4个二极管VD3到VD6起连续作用。电动机驱动电路原理图如图二所示。
电源模块电路设计
电动机驱动芯片的电源VCC和VS之间通过0欧的电阻R20进行隔离后,对LD298进行供电。
控制按键
如图二所示,K3键接到单片机的外部中断0,通过中断实现运行、暂停、继续运行的控制功能,当K3键第一次按下时(num2=1)正常运行,当K3键第二次按下时(num2=2)暂停运行。
进水阀和排水阀控制继电器
如图二所示,单片机的P23用来控制排水阀继电器,P22用来控制进水阀继电器,P22和P23对应输出为0时对应的阀打开,输出为1时对应的阀关闭。
💫程序设计
main函数
c
void main()
{
init();
while(1)
{
key(); //键扫描
if((num1==0&&num==0)&&circle==1) //标准 强洗
{
ledruoxi=1; //关闭弱洗LED
ledpaishui=1; //关闭排水LED
ledbiaozhun=0;//强标准LED亮
ledqiangxi=0; //强洗LED亮
if(num2==1)
{
qbiaozhun(); //强标准洗
}
if(num2>1) //K3键按下次数为2,暂停洗涤
{
;
}
circle=0;
}
if(num1==0&&num==1) //经济 强洗
{
ledruoxi=1;
ledbiaozhun=1;
ledqiangxi=0;
ledjingji=0;
if(num2==1)
{
qjingji(); //强经济洗
ledjingji=1;
}
circle=0;
}
if(num1==0&&num==2) //单独 强洗
{
ledruoxi=1;
ledjingji=1;
ledqiangxi=0;
leddandu=0;
if(num2==1)
{
qdandu(); //强单独洗
leddandu=1;
}
circle=0;
}
if(num1==0&&num==3)
{
ledruoxi=1; //排水 强洗
leddandu=1;
ledqiangxi=0;
ledpaishui=0;
if(num2==1)
{
dpaishui(); //单排水
ledpaishui=1;
}
circle=0;
}
if(num1==1&&num==0) //弱 标准
{
ledqiangxi=1;
ledpaishui=1;
ledruoxi=0;
ledbiaozhun=0;
if(num2==1)
{
rbiaozhun(); //弱标准洗
ledruoxi=1;
}
circle=0;
}
if(num1==1&&num==1) //弱经济
{
ledqiangxi=1;
ledbiaozhun=1;
ledruoxi=0;
ledjingji=0;
if(num2==1)
{
rjingji(); //弱经济洗
ledruoxi=1;
ledjingji=1;
}
circle=0;
}
if(num1==1&&num==2)
{
ledqiangxi=1;
ledjingji=1;
ledruoxi=0;
leddandu=0;
if(num2==1)
{
rdandu(); //弱单独洗
ledruoxi=1;
leddandu=1;
}
circle=0;
}
if(num1==1&&num==3)
{
ledqiangxi=1;
leddandu=1;
ledruoxi=0;
ledpaishui=0;
if(num2==1) //K3键
{
dpaishui(); //单排水
ledpaishui=1;
}
circle=0;
}
num2=0;
}
}