基于51单片机的全自动洗衣机设计
// 函数声明
void delay();// 延时函数 void in(); // 进水子程序 void out(); // 出水子程序 void over(); // 结束子程序 void xi(); // 洗衣子程序 void pao(); // 泡衣子程序 void xx(); // 脱水子程序
void on(); // 工作on处理子程序 void sel(); // 显示菜单选择
void SEG_display(); //显示时间子程序 void key_scan(); // 按键扫描子程序 // 延时函数 void delay(uint i) { uint x,y; for(x=i;x>0;x--) for(y=120;y>0;y--); }
// 工作on处理子程序
void on()//增加功能,比如:快速洗、慢速洗之类的 { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1;ET0=1;TR0=1;P0 = 0xff; if(flag0 == 0) in(); if(flag0 == 1) xi(); if(flag0 == 2) pao(); if(flag0 == 3) xx(); if(flag0 == 4) out(); }
// 结束子程序 void over() { P0 = 0xff; mo_r=0;mo_l=0;
- 31 -
基于51单片机的全自动洗衣机设计
led_over = 0;buzzer=0; EA=0; }
// 进水子程序 void in()
{ // 洗衣电源控制开关 P0 = 0xff;led_in = 0; flag1++; // 进水次数标志 mo_r = 0;mo_l = 0; min = 0;sec = 8; }
// 洗衣子程序 void xi() {
P0 = 0xff; led_xi = 0;led_work = 0; mo_r = 1;mo_l = 0; min = 0;sec = 20; quan = 0; }
// 泡衣子程序 void pao() { P0 = 0xff; led_pao = 0;led_work = 0; flag3++;//泡衣次数标志 mo_r = 1;mo_l = 0; min = 0;sec = 20; quan = 0; }
// 脱水子程序 void xx() { P0 = 0xff;led_xx = 0; mo_r = 0;mo_l = 1; min = 0;sec = 16; }
// 电机工作指示灯 - 32 -
基于51单片机的全自动洗衣机设计
// 出水子程序 void out() { P0 = 0xff;led_out = 0; flag2++;//出水次数标志 mo_r = 0;mo_l = 0; min = 0;sec = 5; }
// 显示菜单选择 void sel() { P0 = 0xff; if(flag0 >= 5)flag0 = 0; if(flag0 == 0) {led_in = 0;} if(flag0 == 1) { led_xi=0; } 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; SEG_display(); while(1) { if(key_on == 0) { delay(5); if(key_on == 0) { while(!key_on); on();break; } } if(key_off == 0)
- 33 -
基于51单片机的全自动洗衣机设计
{ delay(5); if(key_off == 0) { while(!key_off); over();break; } } if(key_sel == 0) { delay(5); if(key_sel == 0) { while(!key_sel); flag0++; sel(); } } } }
// 按键扫描子程序 void key_scan() { if(key_menu == 0) { delay(5); if(key_menu == 0) { while(!key_menu); menu(); } } if(key_on == 0) { delay(5); if(key_on == 0)
- 34 -
基于51单片机的全自动洗衣机设计
{ while(!key_on); on(); } } if(key_off == 0) { delay(5); if(key_off == 0) { while(!key_off); over(); } } }
// 显示子程序 void SEG_display() { P1 = 0x01;P2 = num[min/10];delay(10); P1 = 0x02;P2 = num[min];delay(10); P1 = 0x04;P2 = num[sec/10];delay(10); P1 = 0x08;P2 = num[sec];delay(10); }
// 主函数 void main() { led_in=0; while(1) { SEG_display(); key_scan(); } }
// 定时器0中断处理程序 void timer0() interrupt 1 {
- 35 -