标题:
自己单片机洗衣机控制程序
[打印本页]
作者:
diydz
时间:
2015-5-26 16:14
标题:
自己单片机洗衣机控制程序
洗衣机控制
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^0;//定义写数据(命令)
sbit rw=P2^1;//定义读写控制
sbit en=P2^2;//定义使模块使能
sbit rst=P2^3;
sbit scl=P3^6;//定义IIC
sbit sda=P3^7;
sbit s1=P1^2;//功能键
sbit s2=P1^0;//加数键
sbit s3=P1^1;//减数键
sbit s4=P1^4;//
sbit s5=P1^3;
sbit fw=P3^3;
sbit d1z=P1^5;
sbit d1f=P1^6;
sbit d2t=P1^7;
uchar zshi,fshi,zong,tuoshi,s1num;
uchar kk,zz,ftuoshi,fzshi,ffshi,fzong,s5num,s4num;
uchar w,h,t,k,f,g,x;
uchar code mb1[]="正转时间: 00秒";
uchar code mb2[]="反转时间:00秒";
uchar code mb3[]="总洗衣时间:00分";
uchar code mb4[]="总脱水时间:00分";
void ys(uint z)//延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void writecom12864(uchar com,uchar add)//写命令
{
rs=0;
rw=0;
P0=com;
ys(5);
rw=1;
ys(5);
rw=0;
P0=add;
ys(5);
rw=1;
ys(5);
}
void writedat12864(uchar dat)//写数据
{
rs=1;
rw=0;
P0=dat;
ys(5);
rw=1;
ys(5);
}
uchar readcom12864(uchar add)//读命令程序
{
uchar Data;
rs = 0;
P0= add; //Reg Addr
rw = 0;
rw = 1;
P0 = 0xff;
en = 0;
Data = P0;
en = 1;
return Data;
}
void busy(void)//读忙程序
{
uchar temp;
do
{
temp = readcom12864(0x0f);
}while(temp & 0x80);
}
void clear()//清屏
{
uchar temp;
temp = readcom12864(0x01);
temp |= 0x40;
writecom12864(0x01, temp);
busy();
busy();
}
void gbxy(uchar x,uchar y)//光标坐标
{
writecom12864(0x05,x);
writecom12864(0x06,y);
}
void ret(void)
{
rst = 0;
ys(50);//Delay100ms(1);
rst= 1;
ys(50);//Delay100ms(1);
}
void init12864()//初始化
{
uchar i;
ys(50);
writecom12864(0x01, 0x02); /* 显示功能打开,键盘关*/
writecom12864(0x02, 0x7f); /* 128x64, BG Code 64列 */
writecom12864(0x03, 0x03); /* 正常显示范围,不允许中断,ASCII 1 ,16*16字体,正常字体,不反白,文字模式 */
writecom12864(0x04, 0x02);//光标设定
writecom12864(0x10, 0x70); /* (1/9偏压,Cont=100111)(1/8,效果也行,B0110_1110) */
writecom12864(0x11, 0xf0); /* 升压开,内升压,内部V0,内部偏压,ICON顺序不变,SEG=143, COM=63 */
writecom12864(0x12, 0xf7); /* 12.5Khz, X6, 大电流11110111 */
clear();
ys(50);
gbxy(0,0);
for(i=0;i<14;i++)
{
writedat12864(mb1[i]);
ys(20);
}
gbxy(0,0x10);
for(i=0;i<14;i++)
{
writedat12864(mb2[i]);
ys(20);
}
gbxy(0,0x1f);
for(i=0;i<16;i++)
{
writedat12864(mb3[i]);
ys(20);
}
gbxy(0,0x2f);
for(i=0;i<16;i++)
{
writedat12864(mb4[i]);
ys(20);
}
TMOD=0X11;
T2CON=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
RCAP2L=0xb0;
RCAP2H=0x3c;
EA=1;
ET2=1;
ET0=1;
ET1=1;
TR0=0;
TR1=0;
}
void disp(uchar dat)//液晶显示
{
uchar shi,ge;
shi=dat/10;
ge=dat%10;
writedat12864(0x30+shi);
writedat12864(0x30+ge);
}
////////////////////
void ysus()
{
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
_nop_();_nop_();
}
void start()
{
sda=1;
ysus();
scl=1;
ysus();
sda=0;
ysus();
}
void stop()
{
sda=0;
ysus();
scl=1;
ysus();
sda=1;
ysus();
}
void ack()
{
uchar i;
scl=1;
ysus();
while((sda==1)&&(i<200))i++;
scl=0;
ysus();
}
void writebyte(uchar dat)
{
uchar i;
scl=0;
for(i=0;i<8;i++)
{
if(dat&0x80)
{
sda=1;
}
else
sda=0;
dat=dat<<1;
ysus();
scl=1;
ysus();
scl=0;
ysus();
}
sda=1;
ysus();
}
uchar readbyte()
{
uchar i,j;
scl=0;
ysus();
sda=1;
ysus();
for(i=0;i<8;i++)
{
scl=1;
ysus();
j=j<<1;
if(sda)
j++;
scl=0;
ysus();
}
return j;
}
void writeiic(uchar add,uchar dat)
{
start();
writebyte(0xa0);
ack();
writebyte(add);
ack();
writebyte(dat);
ack();
stop();
}
uchar readiic(uchar dat)
{
uchar a;
start();
writebyte(0xa0);
ack();
writebyte(dat);
ack();
start();
writebyte(0xa1);
ack();
a=readbyte();
stop();
return a;
}
//////////////////////////
void key()
{
if(s1==0)
{
ys(5);
if(s1==0)
{
fw=0;
ys(100);
fw=1;
s1num++;
while(!s1);
ys(5);
while(!s1);
if(s1num==1)
{
gbxy(10,0);
writecom12864(0x04, 0x05);
}
if(s1num==2)
{
writeiic(1,zshi);
gbxy(10,0x10);
}
if(s1num==3)
{
writeiic(2,fshi);
gbxy(12,0x1f);
}
if(s1num==4)
{
writeiic(3,zong);
gbxy(12,0x2f);
}
if(s1num==5)
{
s1num=0;
writeiic(4,tuoshi);
writecom12864(0x04, 0x00);
}
}
}
if(s1num!=0)
{
if(s2==0)
{
ys(5);
if(s2==0)
{
fw=0;
ys(100);
fw=1;
while(!s2);
ys(5);
while(!s2);
if(s1num==1)
{
zshi++;
if(zshi==100)
zshi=0;
writeiic(1,zshi);
gbxy(10,0);
disp(zshi);
}
if(s1num==2)
{
fshi++;
if(fshi==100)
fshi=0;
writeiic(2,fshi);
gbxy(10,0x10);
disp(fshi);
}
if(s1num==3)
{
zong++;
if(zong==100)
zong=0;
writeiic(3,zong);
gbxy(12,0x1f);
disp(zong);
}
if(s1num==4)
{
tuoshi++;
if(tuoshi==100)
tuoshi=0;
writeiic(4,tuoshi);
gbxy(12,0x2f);
disp(tuoshi);
}
}
}
if(s3==0)
{
ys(5);
if(s3==0)
{
fw=0;
ys(100);
fw=1;
while(!s3);
ys(5);
while(!s3);
if(s1num==1)
{
zshi--;
if(zshi==-1)
zshi=99;
writeiic(1,zshi);
gbxy(10,0);
disp(zshi);
}
if(s1num==2)
{
fshi--;
if(fshi==-1)
fshi=99;
writeiic(2,fshi);
gbxy(10,0x10);
disp(fshi);
}
if(s1num==3)
{
zong--;
if(zong==-1)
zong=99;
writeiic(3,zong);
gbxy(12,0x1f);
disp(zong);
}
if(s1num==4)
{
tuoshi--;
if(tuoshi==-1)
tuoshi=99;
writeiic(4,tuoshi);
gbxy(12,0x2f);
disp(tuoshi);
}
}
}
}
if(s4==0)
{
ys(5);
if(s4==0)
{
s4num++;
while(!s4);
ys(5);
while(!s4);
if(s4num==1)
{
k=0;
TR0=1;
TR2=1;
d1z=0;
kk=0;
zz=0;
fw=0;
ys(200);
fw=1;
}
if(s4num==2)
{
s4num=0;
TR0=0;
TR2=0;
k=1;
d1z=1;
d1f=1;
kk=1;
zz=0;
zshi=readiic(1);
fshi=readiic(2);
zong=readiic(3);
gbxy(10,0);
disp(zshi);
gbxy(10,0x10);
disp(fshi);
gbxy(12,0x1f);
disp(zong);
gbxy(12,0x2f);
disp(tuoshi);
fw=0;
ys(200);
fw=1;
}
}
}
if(s5==0)
{
ys(5);
if(s5==0)
{
s5num++;
while(!s5);
if(s5num==1)
{
TR1=1;
d2t=0;
fw=0;
ys(200);
fw=1;
}
if(s5num==2)
{
s5num=0;
TR1=0;
d2t=1;
tuoshi=readiic(4);
gbxy(12,0x2f);
disp(tuoshi);
fw=0;
ys(200);
fw=1;
}
}
}
}
void main()
{
ret();
init12864();
zshi=readiic(1);
fshi=readiic(2);
zong=readiic(3);
tuoshi=readiic(4);
gbxy(10,0);
disp(zshi);
gbxy(10,0x10);
disp(fshi);
gbxy(12,0x1f);
disp(zong);
gbxy(12,0x2f);
disp(tuoshi);
while(1)
{
fzshi=readiic(1);
ffshi=readiic(2);
fzong=readiic(3);
ftuoshi=readiic(4);
key();
if(k==1)
{
d1z=1;
d1f=1;
TR0=0;
TR2=0;
zz=0;
kk=1;
}
if(w==20)
{
w=0;
if(kk!=1)
{
zshi--;
if(zshi==-1)
{
zshi=readiic(1);
TR2=0;
d1z=1;
ys(4000);
d1f=0;
TR2=1;
zz=1;
kk=1;
}
gbxy(10,0);
disp(zshi);
}
if(zz==1)
{
TR2=1;
fshi--;
if(fshi==-1)
{
d1f=1;
fshi=readiic(2);
zz=0;
kk=0;
TR2=0;
ys(4000);
d1z=0;
TR2=1;
}
gbxy(10,0x10);
disp(fshi);
}
}
}
}
void t0() interrupt 1//控制洗衣总时间
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==20)
{
t=0;
h++;
if(h==60)
{
h=0;
zong--;
if(zong==0)
{
zz=0;
kk=1;
k=1;
zong=fzong;
zshi=fzshi;
fshi=ffshi;
gbxy(10,0);
disp(zshi);
gbxy(10,0x10);
disp(fshi);
gbxy(12,0x1f);
disp(zong);
fw=0;
ys(2000);
fw=1;
}
gbxy(12,0x1f);
disp(zong);
}
}
}
void t1() interrupt 3//控制脱水时间
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
g++;
if(g==20)
{
g=0;
f++;
if(f==60)
{
f=0;
tuoshi--;
if(tuoshi==0)
{
TR1=0;
d2t=1;
tuoshi=ftuoshi;
fw=0;
ys(2000);
fw=1;
}
gbxy(12,0x2f);
disp(tuoshi);
}
}
}
void t2() interrupt 5//控制电机正反转时间
{
TF2=0;
w++;
}
复制代码
作者:
xtitxjg
时间:
2015-5-27 13:10
作者:
好又快维修部
时间:
2016-3-22 16:20
xtitxjg 发表于 2015-5-27 13:10
我来看看是怎么写的程序
作者:
好又快维修部
时间:
2016-3-22 16:22
xtitxjg 发表于 2015-5-27 13:10
我来看看是怎么写的程序
作者:
单片机好难啊
时间:
2016-4-13 18:12
只有程序吗
作者:
syl150
时间:
2016-4-15 08:20
我来看看是怎么写的程序
作者:
l4188403
时间:
2016-5-2 10:22
我也来看看那
作者:
lyl44
时间:
2017-1-3 16:36
不错啊
作者:
binyv
时间:
2017-3-3 14:47
我也想看看这程序,
作者:
ml999
时间:
2017-3-4 15:21
我来看看是怎么写的程序
作者:
隔壁老谢
时间:
2017-3-5 00:07
我也想做一个洗衣机设计
作者:
dianzi741
时间:
2017-3-7 20:27
我也来看看
作者:
chaopping
时间:
2017-4-26 14:09
我是来学习的
作者:
liqingyundmtech
时间:
2023-11-3 00:42
我也想看看这程序,
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1