历史上的今天
今天是:2024年12月23日(星期一)
2019年12月23日 | 全自动洗衣机控制器设计的单片机代码
2019-12-23 来源:51hei
基于单片机的洗衣机控制器
采用两位数码管显示洗衣时间,采用驱动芯片控制电机转动
全自动洗衣机课程设计
基于51单片机,C语言实现。
基本要求
模拟全自动洗衣机工作过程。以电机替代洗衣机电机。显示洗衣机工作的状态(进水、浸泡、洗衣、脱水、结束)。显示工作剩余时间(洗衣程序可自定义,时间精度:秒)。
洗衣时交替正、反转。
扩展要求
洗衣和脱水时电机转速不同。增加水位传感器输入。故障报警。增加声音提示。其它自定义功能。
设计用Preteus仿真:

0.png?imageView2/2/w/550 (203.38 KB, 下载次数: 13)
下载附件 保存到相册
2018-6-25 06:57 上传

仿真图如下:
#include //****************************// #define uchar unsigned char #define uint unsigned int //*******************************// //***************************// sbit mo_r = P3^2; //电机右控制线 sbit mo_l = P3^3; //电机左控制线 //****************************// sbit key_menu = P3^4; // 菜单按键 sbit key_on = P3^5; // 开始按键 sbit key_off = P3^6; // 结束按键 sbit key_se = P3^7; // 菜单选择按键 //***************************// sbit led_in = P0^0; // 进水指示灯 sbit led_xi = P0^1; // 洗衣指示灯 sbit led_pao = P0^2; // 泡洗指示灯 sbit led_xx = P0^3; // 脱水指示灯 sbit led_out = P0^4; // 出水指示灯 sbit led_over = P0^5; // 洗衣结束指示灯 sbit led_work = P0^6; // 电机工作指示灯 sbit led_wring = P0^7; // 报警指示灯 sbit other = P3^1; // 脱水电源控制开关 sbit anther = P3^0; // 洗衣电源控制开关 //******************************// uchar code num[10]={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; // 出水次数标志 uchar flag3=0; // 泡洗次数标志 uchar err =0; // 报警标志 uchar quan = 0;//正反转计数 //**********************************// // 函数声明 //*************************************// void delay();// 延时函数 void in(); // 进水子程序 void out(); // 出水子程序 void over(); // 结束子程序 void xi(); // 洗衣子程序 void pao(); // 泡衣子程序 void xx(); // 脱水子程序 void on(); // 工作on处理子程序 void se(); // 显示菜单选择 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)%256; 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() { other=0; anther=0; P0 = 0xff; mo_r=0; mo_l=0; led_over = 0; EA=0; } //*********************************// // 进水子程序 //*********************************// 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; mo_r = 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; } //*********************************// // 脱水子程序 //*********************************// void xx() { other=1; anther=0; P0 = 0xff; led_xx = 0; mo_r = 0; mo_l = 1; min = 0; sec = 50; } //*********************************// // 出水子程序 //*********************************// void out() { anther=0; other=0; P0 = 0xff; led_out = 0; flag2++; mo_r = 0; mo_l = 0; min = 0; sec = 5; } //*********************************// // 显示菜单选择 //*********************************// void se() { 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; }
史海拾趣
|
请问Nand flash在手机上是存储什么的?相当于外存还是内存,它和RAM有什么区别和联系呢?和SD卡的联系呢? 手机中的程序比如QQ是在那个存储器里运行的呢?Nand flash 和PC机的硬盘是不是一个概念? 谢谢… 查看全部问答> |
|
初学驱动,学到一个函数,希望高手能帮忙解惑,听说标题要长。。。。。。。。。。。。。 Windows 下的驱动编程 有个函数 NTKERNELAPI NTSTATUS IoGetDeviceObjectPointer( __in PUNICODE_STRING ObjectName, __in ACCESS_MASK DesiredAccess, __out PFILE_OBJECT *FileObject, &nbs ...… 查看全部问答> |
|
将模拟信号转换为数字信号,再把数字信号通过串口在终端读出数据! 我是一个单片机菜鸟,还没有入门,用的是ATmega128单片机,用PF2(ADC2)输入模拟信号,要写一个程序把模拟信号转换为数字信号并通过串口在终端显示出来转换后的数字信号信息,那位大侠帮帮忙,多谢!… 查看全部问答> |
|
大虾们好!最近最一个产品,测试一个润滑脂的低液位报警,就是提醒要加料了! 装在直径200mm,高度75mm(这个很小)还有高度250mm的塑料桶里面。桶底有一个直流电机带动的刮板。 润滑脂粘度很大,类似于黄油,稍微稀一点,流动性很小。 用音叉肯 ...… 查看全部问答> |
|
看了一下712的管脚的好象没有外部中断管脚,除了710中的P2.8到P2.10是外部中断管脚。除了712中的capture,还有没有 ...… 查看全部问答> |
|
自由选择一种传感器,设计一款检测仪表,至少包括传感器。单片机。显示及按键四个部分,并完成以下内容。 1.传感器的工作原理 2.该仪表的组成框图 3.(单片机)的开发流程 4.仪表主要构成部分及代码… 查看全部问答> |
|
lab 4为电流环控制(创建一个转矩控制器),lab user guide上说对于穿越零速,当电机转速小于10rpm时,使用Iqref的符号来设定方向。请问为啥可以根据Iqref的符号来设定方向? … 查看全部问答> |




