📄 xiyiji.c
字号:
/*P1.0~~~p1.5 键盘扫描口
P3.5 测温器
P3.6 加热器
P0 显示数据口
P2.0~~~P2.2 显示口控制线
P2.3 检测水满
P2.4 检测水排光
P2.5 加水闸;
P2.6 排水闸;
P2.7 喇叭
3.0 洗衣服电机
P3.1 洗衣服电机
P3.2 P3.3 P3.4 状态灯口
剩下没用到的口有
P3.7 P1.6 P1.7
*/
//*******************************************************
#include <at89x51.h>
unsigned char minite=24; //分钟全局变量在定时器0中用到
unsigned char second=8; //秒钟全局变量在定时器0中用到
unsigned char wdz=37; //全局变量可调节的临界温度值变量
bit flag=0;
bit sflag=0; //设置慢洗中的变量 在定时器0中用到
bit sflagg=0; //设置报警中的变量 在定时器1中用到
unsigned char san=0; //设置三分钟排水 报警中的变量 在定时器1中用到
unsigned char ba=0; //设置八分钟排水 报警中的变量 在定时器1中用到
unsigned char biao=0; //设置标号选择 识别按键值
unsigned char su=0; //确定键的标识号
unsigned char jc1,jc2;//暂停时 寄存 p2 p3 口
//******************************************************
void jia();
void jian();
void getkey(void);
void jiashui(void);
void paishui(void);
void jiawen(void);
void threetime(void );
void twotime(void);
void manxi(void);
void sure(void);
void baojing(void);
//*************************************************
void daojishi(void) ;//定时器0
void dingshi(void) ;//定时器1
//************************************************
void disauto3();//以下是六个操作按键的显示函数
void disauto2(void);
void diskxi(void);
void dismxi(void);
void distuoshui(void);
void disjiare(void);
//*************************************************
void delay(unsigned int i);//延时
void Delay1ms(unsigned int count);//延时
//LCD灯显示的初始化******************************************
sbit LcdRs = P2^0;
sbit LcdRw = P2^1;
sbit LcdEn = P2^2;
#define DBPort P0
#define LCD_COMMAND 0 // Command
#define LCD_DATA 1 // Data
unsigned char LCD_Wait(void);
void LCD_Write(bit style, unsigned char input);
void LCD_Initial();
void GotoXY(unsigned char x, unsigned char y);
void Print(unsigned char *str);
void IntToStr( unsigned char *str) ;
void charToStr( unsigned char *str) ;
void display(void);//显示当前温度和设置要到的温度
void disp(void);//
void wdszStr( unsigned char *str) ;
void wdszdis(void);
//**************************************
sbit DQ=P3^5;//读温度是用到的函数
ReadOneChar(void);//读一个字节
WriteOneChar(unsigned char dat);
unsigned int ReadTemperature(void);//读取温度
//***************************************************
void main(void)
{
unsigned char n;
for(n=0;n<2;n++)
{
P2=0;P3=0;
LCD_Initial();
Delay1ms(10);
GotoXY(0,0);
Print("Hello Welcome to");
GotoXY(0,1);
Print("Washing System !");
}
while(1)
{
getkey();
if((biao==3)||(biao==4)||(biao==5))disp();
if(biao==6)display();
}
}
//************************************************************************
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
void delay(unsigned int i)//延时函数
{
while(i--);
}
//*************************************************************************
bit pkey(void)//判断键的否被按下,通过返回值确定
{
P1=0x38; //p.0~p1.2接行,p1.3~~~p1.5接列。。给行输入低电平,给列输入高电平,整体扫描
if(P1!=0x38)
{
Delay1ms(50);
if(P1!=0x38)
return 1;//如果有按键按下返回1
else
return 0;
}
else return 0;//没有按键按下返回0
}
void getkey(void)
{
unsigned char key=0x09,s,k,c;
while(1)
{
if(pkey()==1)
{
P1=0x3e;
k=0x3e;
for(c=0;c<3;c++)
{
s=P1&0x38;
switch(s)
{
case 0x30: key=3*c+0; break;
case 0x28: key=3*c+1; break;
case 0x18: key=3*c+2; break;
default: break;
}
k=(k<<1)|0x01;
P1=k;
}
while(pkey());
switch(key)
{
case 0x00 :if(su==0)disauto3(); break;//自动洗3次加脱水
case 0x01 :if(su==0)disauto2(); break;//自动洗2次加脱水
case 0x02 :if(su==0)diskxi();break;//快速洗一次
case 0x03 :if(su==0)dismxi() ;break;//慢速洗一次
case 0x04 :if(su==0)distuoshui();break;//脱水
case 0x05 :if(su==0)disjiare();break; //加温
case 0x06 :jia(); break;//加
case 0x07 :jian();break;//减
case 0x08 :su++;if(su>=4)su=2;sure();break;//确定键和暂停
default :break;
}
}
else
break;
}
}
//****************************************************
void disauto3(void)
{
P3_2=0;P3_3=1;P3_4=1;TR1=0;
GotoXY(0,0);
Print("system will auto");
GotoXY(0,1);
Print("wash three times");
biao=1;
}
void disauto2(void)
{
P3_2=1;P3_3=0;P3_4=1;TR1=0;
GotoXY(0,0);
Print("system will auto");
GotoXY(0,1);
Print(" wash two times ");
biao=2;
}
void diskxi(void)
{
P3_2=0;P3_3=0;P3_4=1;TR1=0;
minite=8;
GotoXY(0,0);
Print(" kuai xi yi ci ");
GotoXY(0,1);
Print("time: ");
biao=3;
}
void dismxi(void)
{
P3_2=1;P3_3=1;P3_4=0;TR1=0;
minite=8;
GotoXY(0,0);
Print(" man xi yi ci ");
GotoXY(0,1);
Print("time: ");
biao=4;
}
void distuoshui(void)
{
P3_2=0;P3_3=1;P3_4=0;TR1=0;
minite=7;P2_6=1;
GotoXY(0,0);
Print("tuo shui shijian");
GotoXY(0,1);
Print("time: ");
biao=5;
}
void disjiare(void)
{
P3_2=1;P3_3=0;P3_4=0;TR1=0;
GotoXY(0,0);
Print("from: ");
GotoXY(0,1);
Print("to: ");
biao=6;
}
//************************************************************
void jia(void)
{
minite++; wdz++;
if(minite==60) minite=0;
}
void jian(void)
{
minite--; wdz--;
if(minite<=0) minite=0;
}
//*************************************************************************
void sure(void)
{
while(su==1)
{
if(biao==0){su=0;TR1=0;}
while((biao==1)||(biao==2))
{
jiawen();
if(biao==1)
threetime();
else
twotime();
}
while((biao==3)||(biao==4)||(biao==5))
{
if((biao==3)||(biao==4))
jiashui();
daojishi();
P3_1=0;P3_0=1;
GotoXY(0,0);
if(biao==3)Print(" kuai xi yi ci ");
if(biao==4)Print(" man xi yi ci ");
GotoXY(0,1);
Print("time: ");
while(1)
{
disp();if(biao==4)manxi();
getkey();
while((second<=5)&&(minite==0))
{
P2_6=1;P3_0=0;su=0;GotoXY(0,1);
Print("wan cheng le ");baojing();
}
}
}
while(biao==6)
{
jiawen();
P3_6=0;
GotoXY(0,0);
Print("jia wen jie su");
GotoXY(0,1);
Print("keyi xiyi le ");
su=0;baojing();
}
}
while(su==2)
{
P3_2=1;P3_3=1;P3_4=1;
jc1=P2;
jc2=P3;
TR0=0;
P3=0;
P2=0;
while(1)
{getkey();}
}
while(su==3)
{
P3_2=0;P3_3=0;P3_4=0;TR0=1;
P2=jc1;
P3=jc2;
while(1)
{getkey();if(biao==6)display();else disp();}
}
}
//*****************************************************************************
void jiashui(void)// P2.3检测水满//P2.4检测水排光//P2.5加水闸;//P2.6排水闸;
{
P3=0;
GotoXY(0,0);
Print("xi tong zheng ");
GotoXY(0,1);
Print("zai jia shui ");
dingshi();
while(P2_3!=1||P2_4!=1)
{ su=0;
P2_5=1; if(san)baojing();
}
P2_5=0;TR1=0;
}
//***********************************************************************************
void paishui(void)//排水 縋2.3检测水满; P2.4检测水排光; P2.5加水闸; P2.6排水闸;
{
P3=0;
GotoXY(0,0);
Print("xi tong zheng ");
GotoXY(0,1);
Print("zai pai shui ");
dingshi();
while(P2_4==1||P2_3==1)
{ su=0;
P2_6=1;if(san)baojing();
}
P2_6=0;TR1=0;
}
//******************************************************
void jiawen(void)//P3.7 测温器 P3.6 加热器
{
ReadTemperature() ;
jiashui();
GotoXY(0,0);
Print("from: ");
GotoXY(0,1);
Print("to: ");
// Delay1ms(800);
dingshi();
while(ReadTemperature()<=wdz)
{
P3_6=1;
display();
getkey();su=0;
if(ba)baojing();
}
P3_6=0;
TR1=0;
}
//************************************
void manxi(void)
{
daojishi();
if(sflag)P3_0=1;
else P3_0=0;
}
//自动洗3次**********************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -