|
#include
#include
//****************************//
#define uchar unsigned char
#define uint unsigned int
//****************************//
sbit key_on = P3^5; // 开始按键
sbit s1=P3^0; // L298的In 1
sbit s2=P3^1; // L298的In 2
//****************************//
sbit led_in = P0^0; // 进水指示灯
sbit led_xi = P0^1; // 洗涤指示灯
sbit led_out = P0^2; // 排水指示灯
sbit led_piao = P0^3; // 漂洗指示灯
sbit led_tuo = P0^4; // 脱水指示灯
sbit led_over = P0^5; // 洗衣结束指示灯
sbit ena = P3^2; // 洗衣电源控制开关
//******************************//
void delay(uint i); // 延时子程序
void in(); // 进水子程序
void out(); // 出水子程序
void xi(); // 洗涤子程序
void piao(); // 漂洗子程序
void tuo(); // 脱水子程序
void over(); // 结束子程序
void SEG_display(); // 显示时间子程序
void key_scan(); // 按键扫描子程序
void on(); // 工作on处理子程序
//******************************//
char sec =0; // 时间秒
char min =0; // 时间分
uchar t=0; // 中断计数
uchar flag=0; // 洗衣机工作状态标志
uchar quan = 0; // 正反转计数
// 进水子程序
//*********************************//
uchar code num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//******************************//
// 工作on处理子程序
//********************************//
void on()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P0 = 0xff;
if(flag == 0)
in();
if(flag == 1)
xi();
if(flag == 2)
out();
if(flag == 3)
piao();
if(flag == 4)
tuo();
}
//*********************************//
void in()
{
P0 = 0xff;
led_in = 0;
ena=0;
s1 = 0;
s2 = 0;
min = 0;
sec = 9;
}
// 洗衣子程序
//*********************************//
void xi()
{
P0 = 0xff;
led_xi = 0;
ena=1;
s1 = 1;
s2 = 0;
min = 1;
sec = 0;
quan = 0;
}
// 排水子程序
//*********************************//
void out()
{
P0 = 0xff;
led_out = 0;
ena=0;
s1 = 0;
s2 = 0;
min = 0;
sec = 5;
}
// 漂洗子程序
//*********************************//
void piao()
{
P0 = 0xff;
led_piao = 0;
ena=1;
s1 = 1;
s2 = 0;
min = 0;
sec = 30;
quan = 0;
}
// 脱水子程序
//*********************************//
void tuo()
{
P0 = 0xff;
led_tuo = 0;
ena=1;
s1 = 0;
s2 = 1;
min = 0;
sec = 20;
}
// 结束子程序
//*********************************//
void over()
{
P0 = 0xff;
ena=0;
s1=0;
s2=0;
led_over = 0;
EA=0;
}
//*********************************//
// 显示子程序
//*********************************//
void SEG_display()
{
P1=0x01;
P2 = num[min/10];
delay(10);
P1 = 0x02;
P2 = num[min%10];
delay(10);
P1 = 0x04;
P2 = num[sec/10];
delay(10);
P1 = 0x08;
P2 = num[sec%10];
delay(10);
}
// 按键扫描子程序
//*********************************//
void key_scan()
{
P3=0xff;
if(key_on == 0)
{
delay(5);
if(key_on == 0)
{
while(!key_on);
on();
}
}
}
// 延时子程序
//****************************//
void delay(uint i)
{
uint x,y;
for(x=i;x>0;x--)
{ for(y=120;y>0;y--);
}
}
// 主函数
//*********************************//
void main()
{
led_in=0;
while(1)
{
SEG_display();
key_scan();
}
}
// 定时器0中断处理程序
//**********************************//
void timer0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==20)
{
t = 0;
sec--;
if((flag==1)||(flag==3))
{
quan++;
switch(quan)
{
case 1: s1=1;s2=0;break;
case 10:s1=0;s2=0;break;
case 15:s1=0;s2=1;break;
case 25:s1=0;s2=0;break;
default:;
}
if(quan==30)
{
quan=0;
}
//**********************************//
if((sec==0)&&(min!=0))
{
min--;
sec=59;
}
//**********************************//
if((sec<0)&&(min==0)&&(flag==0)) //进水结束
{
flag=1;
}
//**********************************//
if((sec<0)&&(min==0)&&(flag==1)) //洗涤结束
{
flag=2;
}
//**********************************//
if((sec<0)&&(min==0)&&(flag==2)) //出水结束
{
flag=3;
}
//**********************************//
if((sec<0)&&(min==0)&&(flag==3)) //漂洗结束
{
flag=4;
}
//***********************************//洗衣结束
if((sec<0)&&(min==0)&&(flag==4))
{
sec=0;
over();
}
}
}
}
|
|