《2022年的单片机全自动洗衣机设计方案》由会员分享,可在线阅读,更多相关《2022年的单片机全自动洗衣机设计方案(24页珍藏版)》请在金锄头文库上搜索。
1、1 / 24 全自动洗衣机课程设计基于51单片机,C语言实现。基本要求模拟全自动洗衣机工作过程。以电机替代洗衣机电机。显示洗衣机工作的状态 进水、浸泡、洗衣、脱水、结束)。显示工作剩余时间洗衣程序可自定义,时间精度:秒)。洗衣时交替正、反转。扩展要求洗衣和脱水时电机转速不同。增加水位传感器输入。故障报警。增加声音提示。其它自定义功能。设计用 Preteus 仿真:仿真图如下:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 24 页2 / 24 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第
2、2 页,共 24 页3 / 24 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 24 页4 / 24 C文件函数代码:#include /*/ #define uchar unsigned char #define uint unsigned int /*/ /*/ sbit mo_r = P32 。 / 电机右控制线sbit mo_l = P33 。/ 电机左控制线/*/ sbit key_menu = P34 。 / 菜单按键sbit key_on = P35 。 / 开始按键sbit key_off = P36 。 / 结束按键
3、sbit key_se = P37 。 / 菜单选择按键/*/ sbit led_in = P00 。/ 进水指示灯sbit led_xi = P01 。 / 洗衣指示灯sbit led_pao = P02 。/ 泡洗指示灯sbit led_xx = P03 。 / 脱水指示灯精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 24 页5 / 24 sbit led_out = P04 。 / 出水指示灯sbit led_over = P05 。 / 洗衣结束指示灯sbit led_work = P06 。 / 电机工作指示灯sbit le
4、d_wring = P07 。 / 报警指示灯sbit other = P31 。 / 脱水电源控制开关sbit anther = P30 。 / 洗衣电源控制开关/*/ uchar code num10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90。 / /*/ char sec = 0 。 / 时间秒char min = 0 。 / 时间分uchar count=0 。 / 中断计数uchar flag0=0 。 / 洗衣机工作状态标志uchar flag1=0 。 / 进水次数标志uchar flag2=0 。 / 出水次数标志uch
5、ar flag3=0 。 / 泡洗次数标志uchar err =0 。 / 报警标志uchar quan = 0 。/ 正反转计数精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 24 页6 / 24 /*/ / 函数声明/*/ void delay( 。/ 延时函数void in( 。 / 进水子程序void out( 。 / 出水子程序void over( 。 / 结束子程序void xi( 。 / 洗衣子程序void pao( 。/ 泡衣子程序void xx( 。 / 脱水子程序void on( 。 / 工作 on 处理子程序voi
6、d se( 。 / 显示菜单选择void SEG_display(。 / 显示时间子程序void key_scan( 。 / 按键扫描子程序/*/ / 延时函数/*/ void delay(uint i uint x,y 。for(x=i 。x0。x- 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 24 页7 / 24 for(y=120 。y0。y-。 /*/ / 工作 on 处理子程序/*/ void on( TMOD=0x01 。TH0=(65536-50000/ 256。TL0=(65536-50000%256 。EA=1 。
7、ET0=1 。TR0=1 。P0 = 0xff 。if(flag0 = 0 in( 。if(flag0 = 1 xi( 。if(flag0 = 2 pao( 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 24 页8 / 24 if(flag0 = 3 xx( 。if(flag0 = 4 out( 。 /*/ / 结束子程序/*/ void over( other=0。anther=0。P0 = 0xff 。mo_r=0。mo_l=0。led_over = 0 。EA=0 。 /*/ 精选学习资料 - - - - - - - - -
8、名师归纳总结 - - - - - - -第 8 页,共 24 页9 / 24 / 进水子程序/*/ void in( anther=0。other=0。P0 = 0xff 。led_in = 0 。flag1+ 。mo_r = 0 。mo_l = 0 。min = 0。sec = 8 。 /*/ / 洗衣子程序/*/ void xi( anther=1 。 other=0。 P0 = 0xff 。 led_work = 0 。 led_xi = 0 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 24 页10 / 24 mo_r =
9、1 。 mo_l = 0 。 min = 1 。 sec = 36 。 quan = 0 。 /*/ / 泡衣子程序/*/ void pao( anther=1 。other=0。P0 = 0xff 。led_pao = 0 。led_work = 0 。flag3+ 。mo_r = 1 。mo_l = 0 。min = 1。sec = 35 。quan = 0 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 24 页11 / 24 /*/ / 脱水子程序/*/ void xx( other=1。anther=0。P0 = 0xff
10、 。led_xx = 0 。mo_r = 0 。mo_l = 1 。min = 0。sec = 50 。 /*/ / 出水子程序/*/ void out( anther=0。other=0。P0 = 0xff 。led_out = 0 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 24 页12 / 24 flag2+ 。mo_r = 0 。mo_l = 0 。min = 0。sec = 5 。 /*/ / 显示菜单选择/*/ void se( P0 = 0xff 。if(flag0 = 5 flag0 = 0 。if(flag0
11、= 0 led_in = 0 。 if(flag0 = 1 led_xi=0 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 24 页13 / 24 if(flag0 = 2 led_pao=0 。 if(flag0 = 3 led_xx=0 。 if(flag0 = 4 led_out=0。 /*/ / 菜单处理子程序/*/ void menu( min = 0 。sec = 0 。mo_r=0。mo_l=0。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 24 页14
12、 / 24 SEG_display( 。while(1 if(key_on = 0 delay(5 。if(key_on = 0 while(!key_on 。on(。break。 /*/ if(key_off = 0 delay(5 。if(key_off = 0 while(!key_off 。over(。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 24 页15 / 24 break。 /*/ if(key_se = 0 delay(5 。if(key_se = 0 while(!key_se 。flag0+ 。se(。 /*
13、/ / 按键扫描子程序/*/ void key_scan( if(key_menu = 0 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 24 页16 / 24 delay(5 。if(key_menu = 0 while(!key_menu 。menu(。 /*/ if(key_on = 0 delay(5 。if(key_on = 0 while(!key_on 。on(。 /*/ if(key_off = 0 delay(5 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16
14、页,共 24 页17 / 24 if(key_off = 0 while(!key_off 。over(。 /*/ / 显示子程序/*/ void SEG_display( P1=0x01 。P2 = nummin/10 。delay(10 。P1 = 0x02 。P2 = nummin%10 。delay(10 。P1 = 0x04 。P2 = numsec/10 。delay(10 。P1 = 0x08 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 24 页18 / 24 P2 = numsec%10 。delay(10 。
15、/*/ / 主函数/*/ void main( led_in=0 。anther=0。other=0。while(1 SEG_display( 。key_scan( 。 /*/ / 定时器 0 中断处理程序/*/ void timer0( interrupt 1 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 24 页19 / 24 TH0=(65536-50000/ 256。TL0=(65536-50000%256 。count+ 。 if(count=20 count = 0 。sec- 。if(flag0=1|(flag0=2
16、quan+ 。switch(quan case 1:mo_r=1 。mo_l=0。break。case 10:mo_r=0 。mo_l=0。break。case 15:mo_r=0 。mo_l=1。break。case 25:mo_r=0 。mo_l=0。break。default:。 if(quan=30 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 24 页20 / 24 quan=0 。 /*/ if(sec = 0&(min != 0 min-。 sec = 59 。 /*/ if(sec&(min=0&(flag0=0 /
17、 进水结束 switch(flag1 case 1:flag0=1 。xi(。break。case 2:flag0=2 。pao( 。break。case 3:flag0=2 。pao( 。break。case 4:flag0=2 。pao( 。break。default: err=1 。led_wring = 0 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 24 页21 / 24 /*/ if(sec&(min=0&(flag0=1 / 洗衣结束 flag0 = 4 。 out(。 /*/ if(sec&(min=0&(fl
18、ag0=2 / 泡衣结束 switch(flag3 case 1:flag0=4 。out(。break。case 2:flag0=4 。out(。break。case 3:flag0=4 。out(。break。default: err=1 。led_wring = 0 。 /*/ if(sec&(min=0&(flag0=4 / 出水结束 switch(flag2 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 21 页,共 24 页22 / 24 case 1:flag0=0 。in(。break。case 2:flag0=0 。in(。br
19、eak。case 3:flag0=0 。in(。break。case 4:flag0=3 。xx( 。break。default: err= 1 。led_wring = 0 。 /*/ if(sec&(min=0&(flag0=3 sec = 0 。 over( 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 22 页,共 24 页23 / 24 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 23 页,共 24 页24 / 24 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 24 页,共 24 页