洗衣机程序洗衣机程序
单片机课程设计
课程: 单片机设计及应用
题目: 洗衣机程序
院系: 信息工程学院电子信息工程系
班级: 电子03班
学号: 200824103335
姓名: 熊骥一
程序部分:
#include
void delay(unsigned int z); //延时z毫秒子函数
void init(); //初始化子函数
void write_com(unsigned char x); //写LCD指令子函数
void write_dat(unsigned char y); //写LCD数据子...
洗衣机程序
单片机课程
课程: 单片机设计及应用
题目: 洗衣机程序
院系: 信息工程学院电子信息工程系
班级: 电子03班
学号: 200824103335
姓名: 熊骥一
程序部分:
#include
void delay(unsigned int z); //延时z毫秒子函数
void init(); //初始化子函数
void write_com(unsigned char x); //写LCD指令子函数
void write_dat(unsigned char y); //写LCD数据子函数
char keyscan(); //键盘按键扫描子函数 void key1_down(); //key1键响应子函数
void key2_down(); //key2键响应子函数
void key3_down(); //key3键响应子函数
void key4_down(); //key4键响应子函数
void showtime(unsigned char n); //显示时间子函数
void clock1(); //洗涤环节时钟
void clock2(); //漂洗环节时钟
void clock3(); //甩干环节时钟
unsigned char code string[]="WASHING MASHION";
unsigned char code string1[]="3:00"; unsigned char code string2[]="WASHING";
unsigned char code string3[]="RINSING";
unsigned char code string4[]="DRYING"; unsigned char code string5[]="FINISH";
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
sbit key1=P1^4;
sbit key2=P1^5;
sbit key3=P1^6;
sbit key4=P1^7;
unsigned char xidi=3,piaoxi=3,shuaigan=3;
char second=0;
unsigned char count=0;
void main()
{
init();
while(1)
{
char x;
x=keyscan();
switch(x)
{
case 1: key1_down();
break;
case 2: key2_down();
break;
case 3: key3_down();
break;
case 4: key4_down();
break;
}
}
}
void init() //初始化:设定液晶参数,显示初始化界面,
开中断,设定时器0初值
{
unsigned char i=0;
RS=0;
RW=0;
EN=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80+0);
while(string[i]!='\0')
{
write_dat(string[i]);
i++;
}
i=0;
write_com(0x80+0x40+6);
while(string1[i]!='\0')
{
write_dat(string1[i]);
i++;
}
TMOD=0x01;
TH0=0x94;
TL0=0x93;
EA=1;
ET0=1;
TR0=0;
}
void delay(unsigned int z) //延时z毫秒子函数 {
unsigned int x,y;
for(x=z;x>0;x--)
for(y=342;y>0;y--); }
void write_com(unsigned char x) //写LCD指令子函数
{
RS=0;
RW=0;
EN=0;
P0=x;
delay(5);
EN=1;
delay(5);
EN=0;
}
void write_dat(unsigned char x) //写LCD数据子函数
{
RS=1;
RW=0;
EN=0;
P0=x;
delay(5);
EN=1;
delay(5);
EN=0;
}
char keyscan() //键盘按键扫描子函数
{
unsigned char z=0;
if(key1==0)
{
delay(5); //防抖动
if(key1==0)
{
while(key1==0); //手离开按键,表示按键完毕
z=1;
}
return z;
}
if(key2==0)
{
delay(5);
if(key2==0)
{
while(key2==0);
z=2;
}
return z;
}
if(key3==0)
{
delay(5);
if(key3==0)
{
while(key3==0);
z=3;
}
return z;
}
if(key4==0)
{
delay(5);
if(key4==0)
{
while(key4==0);
z=4;
}
return z;
}
return z;
}
void timer0() interrupt 1 //定时器0中断函数
{
TH0=0x94;
TL0=0x93;
count++;
}
void clock1() //clock1、clock2、clock3与定时器配合起计时作用
{ //假设定时器0设定为每100ms溢出一次,
if(count>=10) //每溢出一次,全局变量count+1
{ //当count=10,则经过一秒,second-1.如此计时
count=0;
if(second==0)
{
second=59;
xidi--;
}
else
second--;
}
}
void clock2() {
if(count>=10)
{
count=0;
if(second==0)
{
second=59;
piaoxi--;
}
else
second--;
}
}
void clock3() {
if(count>=10)
{
count=0;
if(second==0)
{
second=59;
shuaigan--;
}
else
second--;
}
}
void showtime(unsigned char n)
{
unsigned char shi,ge;
shi=second/10;
ge=second%10;
write_com(0x80+0x40+6);
write_dat(0x30+n);
write_com(0x80+0x40+8);
write_dat(0x30+shi);
write_com(0x80+0x40+9);
write_dat(0x30+ge); }
void key1_down()
{
unsigned char i=0;
TR0=1;
while(1)
{
if(xidi>0||xidi==0&&second>0) //洗涤中
{
write_com(0x01); //清屏
write_com(0x80+5); //先写入固定部分,
while(string2[i]!='\0') //下边showtime中显示变化部分
{
write_dat(string2[i]);
i++;
}
i=0;
write_com(0x80+0x40+6);
while(string1[i]!='\0')
{
write_dat(string1[i]);
i++;
}
i=0;
while(xidi>0||xidi==0&&second>0) //此处用while循环:因为上边有清屏动
作
{ //若不加while循环,液晶屏会不停闪
烁
clock1();
showtime(xidi);
}
}
else if(piaoxi>0||piaoxi==0&&second>0) //洗涤完毕,漂洗中
{
write_com(0x01);
write_com(0x80+5);
while(string3[i]!='\0')
{
write_dat(string3[i]);
i++;
}
i=0;
write_com(0x80+0x40+6);
while(string1[i]!='\0')
{
write_dat(string1[i]);
i++;
}
i=0;
while(piaoxi>0||piaoxi==0&&second>0)
{
clock2();
showtime(piaoxi);
}
}
else if(shuaigan>0||shuaigan==0&&second>0) //洗涤漂洗完毕,甩干中
{
write_com(0x01);
write_com(0x80+5);
while(string4[i]!='\0')
{
write_dat(string4[i]);
i++;
}
i=0;
write_com(0x80+0x40+6);
while(string1[i]!='\0')
{
write_dat(string1[i]);
i++;
}
i=0;
while(shuaigan>0||shuaigan==0&&second>0)
{
clock3();
showtime(shuaigan);
}
}
else //工作完成
{
TR0=0;
write_com(0x01);
write_com(0x80+5);
while(string5[i]!='\0')
{
write_dat(string5[i]);
i++;
}
break;
}
}
}
void key2_down() //key2、key3只能在洗衣机开始工作前按下有效
{
char i=0,j=0;
if(xidi==3) //设定洗涤时间
xidi=4;
else if(xidi==4)
xidi=5;
else
xidi=3;
write_com(0x0c); //显示设定洗涤时间的界面
write_com(0x01); //清屏,否则屏上很混乱
write_com(0x80+5);
while(string2[i]!='\0')
{
write_dat(string2[i]);
i++;
}
write_com(0x80+0x40+6);
while(string1[j]!='\0')
{
write_dat(string1[j]);
j++;
}
write_com(0x80+0x40+6);
write_dat(0x30+xidi); }
void key3_down()
{
char i=0,j=0;
if(piaoxi==3)
piaoxi=4;
else if(piaoxi==4)
piaoxi=5;
else
piaoxi=3;
write_com(0x0c);
write_com(0x01);
write_com(0x80+5);
while(string3[i]!='\0')
{
write_dat(string3[i]);
i++;
}
write_com(0x80+0x40+6);
while(string1[j]!='\0')
{
write_dat(string1[j]);
j++;
}
write_com(0x80+0x40+6);
write_dat(0x30+piaoxi); }
void key4_down()
{
char i=0,j=0;
if(shuaigan==3)
shuaigan=4;
else if(shuaigan==4)
shuaigan=5;
else
shuaigan=3;
write_com(0x0c);
write_com(0x01);
write_com(0x80+5);
while(string4[i]!='\0')
{
write_dat(string4[i]);
i++;
}
write_com(0x80+0x40+6);
while(string1[j]!='\0')
{
write_dat(string1[j]);
j++;
}
write_com(0x80+0x40+6);
write_dat(0x30+shuaigan); }
程序:
开始
键盘扫描函数
Key2按下改变洗涤时间
Key3按下改变漂洗时间
Key4按下改变甩干时间
Key1按下
否 洗涤完成洗涤计时
否漂洗完成漂洗计时
否甩干完成甩干计时
本文档为【洗衣机程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。