单片机实训智能洗衣机
第一部分 内容介绍
- 此实训内容使用软件Proteus7.8和Keil4设计完成,设计使用的语言是C语言,使用的单片机型号是AT89C51单片机,可以实现洗衣机的定时洗涤、定时甩干、转速和洗涤时间的设置。
第二部分 实训代码
#include<reg51.h>
#include<stdio.h>
void delay(unsigned int t);
#define uchar unsigned char
#define uint unsigned int
sbit F1 = P0^0;
sbit F2 = P0^1;
sbit F3 = P0^2;
sbit F4 = P0^3;
sbit K1 = P3^0;//慢速
sbit K2 = P3^1;//快速
sbit K3 = P3^7;//甩干
sbit K4 = P3^3;//设定模式
sbit K5 = P3^4;//增加时间
sbit K6 = P3^5;//减少时间
sbit K7 = P3^6;//启动
sbit K8 = P3^2;//紧急停止
sbit lcdrs = P0^5;
sbit lcdrw = P0^6;
sbit lcden = P0^7;
sbit Sound = P1^7;
unsigned char code FFW[8]={0xfc,0xf9,0xf3,0xf6,0xfc,0xf9,0xf3,0xf6};//步进电机正转
unsigned char code FFZ[8]={0xf6,0xf3,0xf9,0xfc,0xf6,0xf3,0xf9,0xfc};//步进电机反转
unsigned int key,K,rate;//声明模式键,步进电机模式、速度
unsigned int rest,LedNumVal=1;//声明模式选择标志,Led显示时间并设定初值为1
//函数功能:控制步进电机采取正转还是反转模式
void motor_ffw()
{
unsigned int i;
for(i = 0;i<8;i++)
{
if(K==1&&LedNumVal != 0)
P0 = FFW[i];
if(K==2&&LedNumVal != 0)
P0 = FFZ[i];
delay(rate*10);//通过选择的速度控制步进电机转速
}
}
//函数功能:延时函数
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=100;y>0;y--)
;
}
}
//函数功能:获得模式按键的选择结果
void getkey()
{
key = 1;
rest = 0;
do
{
P3 = 0xff;
if((K1 || K2 || K3 ||K4)!= 0)
{
delay(2);
if((K1||K2||K3||K4)!=0)
{
if(K1==0)
key=1;
if(K2==0)
key=2;
if(K3==0)
key=3;
if(K4==0)
{
rest=rest%2+1;
}
}
}
}while(rest==0);
}
//函数功能:设置洗衣或者甩干的时间
void timedesign()
{
unsigned int j = 0;
void time(void);
do
{
P3 = 0xff;
if((K5&&K6&&K7)!= 1)
{
delay(2);
if((K5&&K6&&K7)!= 1)
{
if(K5==0)
LedNumVal++;
if(K6==0)
LedNumVal--;
if(K7==0)
j=1;
delay(150);
}
}
if(LedNumVal>=6)
{
LedNumVal=6;
}
if(LedNumVal==0)
{
LedNumVal++;
}
time();
}while(j==0);
}
//函数功能:写命令
void write_com(uchar com)
{
lcdrs=0;
lcdrw=0;
lcden=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//函数功能:写数据
void write_date(uchar dat)
{
lcdrs=1;
lcdrw=0;
lcden=0;
P2 = dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//函数功能:写字符串,将想显式地内容输出
void write_str(uchar *str)
{
uchar idata i;
for(i=0;str[i]!='\0';i++)
write_date(str[i]);
}
//函数功能:液晶显视屏初始化
void init(void)
{
delay(75);
write_com(0x38);//模式:8位总线,双行,5*7字体
delay(25);
write_com(0x38);
delay(25);
write_com(0x38);
write_com(0x38);
write_com(0x08);//屏幕关闭
write_com(0x01);//清除DDRAM的所有单元,光标被移动到屏幕左上角
write_com(0x06);//写入DDRAM后,地址指针加一
write_com(0x0c);//打开显示屏,不显示光标,光标所在位置的字符不闪烁
}
//函数功能:将获得的时间在显示屏输出
void time(void)
{
unsigned int i,time;
unsigned char num[3];
time = LedNumVal*10;
sprintf(num,"%3d",time);
write_com(0x80+0x40);
for(i=0;i<3;i++)
{
write_date(num[i]);
}
write_str("min");
}
//函数功能:外部中断子函数,用于中断危险情况
void int0() interrupt 0
{
LedNumVal=0;
time();
}
//主函数
void main(void)
{
unsigned int t;
unsigned int n;
int m;
init();//初始化液晶显示屏
EA=1;//开启总中断
EX0=1;
IT0 = 0;//开启外部中断
while(1)
{
write_com(0x80);
write_str("enter key");
time();
getkey();
if(key==1)
{
rate=20;//步进电机速度
write_com(0x80);
write_str("deng ji:1");//模式1,轻柔模式
}
if(key==2)
{
rate=15;//步进电机速度
write_com(0x80);
write_str("deng ji:2");//模式2,强洗模式
}
if(key==3)
{
rate=10;//步进电机速度
write_com(0x80);
write_str("shuai gan...");//模式3,甩干模式
}
timedesign();//设置洗衣时间
time();//显示设定的时间
t = rate/5;//用于时间减少标志
n=0;//控制时间减少次数
do
{
if(key==1 ||key==2)
{
K=1;//开启步进电机正转模式
motor_ffw();//步进电机正转
K=2; //开启步进电机反转模式
motor_ffw();//步进电机反转
n++;
if((t==4)&&(n%3)==0)
{
LedNumVal--;//时间标志数减少
time();//显示此时剩余时间
}
if((t==3)&&(n%4)==0)
{
LedNumVal--;
time();
}
}
else//甩干功能
{
K=1;
motor_ffw();
n++;
if(n%5==0)
{
LedNumVal--;
time();
}
}
}while(LedNumVal!=0);//当时间标志数为0时结束,开始下一次循环
time();
for(m=0;m<20;m++)//蜂鸣器
{
Sound = 1;
delay(305);
Sound = 0;
delay(305);
}
}
}
第三部分 硬件仿真电路
- 原件列表
第四部分 设计过程
1、安装软件
- 安装路径必须是全英文路径包括电脑的用户名,也不能是中文。否则无法正常安装使用。
- 安装Proteus7.8,我已经将软件打包按需下载即可,破解和安装方法都包含在其中。
- 安装Keil4,我也将Keil4软件打包按需下载即可。
- 需要注意的是,Keil4安装后需要输入用户名和密码,随心填就好,已经破解好了。
2、仿真图绘制
- 按照第三部分在Proteus中画出来,连接出来后,开启仿真查看是否漏掉端口没有连接,这点很重要。
3、编写代码
- 首先在Project中选择新建项目。
- 最好将所有实训文件命名为同一个名字并放在相同名字的文件夹下,例如
- 选择Atmel公司的89C51单片机,然后选择OK
- 然后选择 是
- 然后将左侧工作组展开,并新建一个空白文档
- 然后将此文件保存,并命名为.C为扩展名的文件,名字与项目名相同
- 将保存好的文件添加到资源组里,在Source Group 1上右键即可选择
- 选择与项目名称相同的C语言文件,并选择Add
- 添加成功后,即可将代码复制到其中
- 依次选择编译和创建
- 观察编译和创建的结果,创建可能会产生警告,但是不影响运行,但是错误会影响运行
- 最后生成hex文件
- 选择output选项卡,勾选Creat HEX File,最后选择OK
- 查看项目文件夹下是否有hex为扩展名的文件,如果没有可以多做几次生成hex文件操作即可解决
4、装载hex文件
- 双击仿真图上的单片机即可打开装载hex文件的窗口,选择文件夹后,选择hex文件的所在位置,如果都在同一文件夹下的话可以很快找到
- 装载完成后进行仿真
- 仿真启动后的样子
第五部分 使用方法
- 首先选择洗衣模式,有轻柔洗、强力洗、甩干三种模式,然后按下模式选择(起到确定选择的作用),然后设置时间最少十分钟,可增加,也可减少,最后按下启动按键,即可启动洗衣机等到时间结束,蜂鸣器会发出报警声,危险中断可以在任意时间紧急停止洗衣机运行,但是下一次启动需要将仿真终止然后重新开启,洗衣机才能再次正常使用。
第六部分 软件链接
链接:https://pan.baidu.com/s/1ad0LEtuvFAzZseQG-iKAgg
提取码:8096