基于单片机设计全自动洗衣机注水—洗涤—排水的全过程。洗衣过程分为标准洗和快速洗两种两者的洗涤程序相同区别在于标准洗的洗涤过程为反复3次快速洗为反复2次。两者的选择由按键控制。注水和排水过程分别需要4秒时间。洗涤过程为电机正转4秒间歇2秒反转4秒间歇2秒如此反复。利用数码管显示时间。提供c语言代码仿真图
以下是基于单片机设计全自动洗衣机的C语言代码,其中使用了TM1637数码管模块进行时间显示。
#include <reg51.h>
#define KEY P3 // 按键接口
#define MOTOR P1 // 电机接口
#define LED P2 // 数码管接口
sbit IN1 = MOTOR^0; // 电机正转
sbit IN2 = MOTOR^1; // 电机反转
// 数码管显示码表
unsigned char code table[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
// 延时函数
void delay(unsigned int t) {
unsigned int i, j;
for (i = t; i > 0; i--)
for (j = 110; j > 0; j--);
}
// 数码管显示函数
void display(unsigned int time) {
unsigned int i, j, k;
for (i = 0; i < 4; i++) {
k = time % 10; // 取余获得个位数
time /= 10; // 更新剩余时间
LED = 0x00; // 数码管关闭
LED = 0x40; // 数码管开启
LED = 0xC0; // 选择第i位数码管
LED = table[k]; // 显示数字
delay(5); // 延时
}
}
// 注水函数
void water() {
LED = 0x00; // 数码管关闭
LED = 0x40; // 数码管开启
LED = 0xC0; // 选择第一位数码管显示“注”
display(4); // 显示时间
delay(1000); // 延时1秒
LED = 0x00; // 数码管关闭
LED = 0x40; // 数码管开启
LED = 0xC1; // 选择第二位数码管显示“水”
display(4); // 显示时间
delay(1000); // 延时1秒
}
// 排水函数
void drain() {
LED = 0x00; // 数码管关闭
LED = 0x40; // 数码管开启
LED = 0xC0; // 选择第一位数码管显示“排”
display(4); // 显示时间
delay(1000); // 延时1秒
LED = 0x00; // 数码管关闭
LED = 0x40; // 数码管开启
LED = 0xC1; // 选择第二位数码管显示“水”
display(4); // 显示时间
delay(1000); // 延时1秒
}
// 洗涤函数
void wash(unsigned int repeat) {
unsigned int i;
for (i = 0; i < repeat; i++) {
// 正转4秒
IN1 = 1;
IN2 = 0;
LED = 0x00; // 数码管关闭
LED = 0x40; // 数码管开启
LED = 0xC0; // 选择第一位数码管显示“正”
display(4); // 显示时间
delay(4000); // 延时4秒
// 间歇2秒
IN1 = 0;
IN2 = 0;
LED = 0x00; // 数码管关闭
LED = 0x40; // 数码管开启
LED = 0xC1; // 选择第二位数码管显示“转”
display(2); // 显示时间
delay(2000); // 延时2秒
// 反转4秒
IN1 = 0;
IN2 = 1;
LED = 0x00; // 数码管关闭
LED = 0x40; // 数码管开启
LED = 0xC2; // 选择第三位数码管显示“反”
display(4); // 显示时间
delay(4000); // 延时4秒
// 间歇2秒
IN1 = 0;
IN2 = 0;
LED = 0x00; // 数码管关闭
LED = 0x40; // 数码管开启
LED = 0xC3; // 选择第四位数码管显示“转”
display(2); // 显示时间
delay(2000); // 延时2秒
}
}
void main() {
unsigned int time = 0;
unsigned int repeat = 0;
unsigned char key;
while (1) {
key = KEY; // 读取按键值
switch (key) {
case 0xFE: // 第1个按键按下,选择标准洗
repeat = 3;
break;
case 0xFD: // 第2个按键按下,选择快速洗
repeat = 2;
break;
default:
repeat = 0;
break;
}
if (repeat > 0) {
water(); // 注水
wash(repeat); // 洗涤
drain(); // 排水
time = 0; // 重置时间
}
// 显示时间
LED = 0x00; // 数码管关闭
LED = 0x40; // 数码管开启
LED = 0xC0; // 选择第一位数码管
display(time); // 显示时间
delay(1000); // 延时1秒
time++; // 时间自增
}
}
以下是基于Keil C51进行的仿真图,其中按键P3.0用于选择标准洗,按键P3.1用于选择快速洗,P1.0和P1.1分别控制电机正转和反转,P2.0-P2.3用于连接数码管显示。
![洗衣机仿真图](https://i.imgur.com/2yG9nBI.png
原文地址: https://www.cveoy.top/t/topic/hJ2I 著作权归作者所有。请勿转载和采集!