#include <REGX52.H>
#include "onewire.h"
sbit L1 = P0^0;
sbit L2 = P0^1;
sbit L3 = P0^2;
sbit key7 = P3^0;
sbit key6 = P3^1;
sbit key5 = P3^2;
sbit key4 = P3^3;
uint code Shu[] =
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,
0xbf,0xff, 0xc6};
void Delay(uint t);
void Init_hc573(uint sel);
void Init_set(void);
void DisplaySMG_Dat(uint pos, uint dat);
void DisplaySMG_all(void);
void DisplaySMG(void);
void keyscan(void);
void Init_Timer0(void);
uint yi = 11, er = 11, san = 11, si = 11, wu = 11, liu = 11, qi = 11,ba = 11;
uint display;
uint work;
uint motor;
uint sec = 50;
uint flag_5;
uint flag_7;
uint stop;
uint temperature;
uint count;
uint time;
void main()
{
Init_Timer0();
Init_set();
while(1)
{
if(display == 0)
{
if(work == 0)
{
if(sec > 0)
{
Init_hc573(4);
P0 = 0xff;
L1 = 0;
}
else
{
Init_hc573(4);
P0 = 0xff;
}
yi = 10;er = work+1;san = 10;
si = 11;
wu = sec/1000;liu = sec%1000/100;
qi = sec%100/10;ba = sec&10;
}
else if(work == 1)
{
if(sec > 0)
{
Init_hc573(4);
P0 = 0xff;
L2 = 0;
}
else
{
Init_hc573(4);
P0 = 0xff;
}
yi = 10;er = work+1;san = 10;
si = 11;
wu = sec/1000;liu = sec%1000/100;
qi = sec%100/10;ba = sec&10;
}
else if(work == 2)
{
if(sec > 0)
{
Init_hc573(4);
P0 = 0xff;
L3 = 0;
}
else
{
Init_hc573(4);
P0 = 0xff;
}
yi = 10;er = work+1;san = 10;
si = 11;
wu = sec/1000;liu = sec%1000/100;
qi = sec%100/10;ba = sec&10;
}
}
else
{
temperature = read_temperature();
yi = 10;er = 4;san = 10;
si = 11;wu = 11;
liu = temperature/10;qi = temperature%10;ba = 12;
}
if(sec > 0)
{
EA = 1;
ET0 = 1;
}
else
{
EA = 0;
ET0 = 0;
Init_hc573(4);
P0 = 0xff;
motor = 0;
count = 0;
}
keyscan();
DisplaySMG();
}
}
void Delay(uint t)
{
while(t --);
}
void Init_hc573(uint sel)
{
switch(sel)
{
case 4:P2 = (P2 &0x1f)|0x80;break;
case 5:P2 = (P2 &0x1f)|0xa0;break;
case 6:P2 = (P2 &0x1f)|0xc0;break;
case 7:P2 = (P2 &0x1f)|0xe0;break;
}
}
void Init_set(void)
{
Init_hc573(4);
P0 = 0xff;
Init_hc573(5);
P0 = 0x00;
}
void DisplaySMG_Dat(uint pos, uint dat)
{
Init_hc573(6);
P0 = 0x01 << pos;
Init_hc573(7);
P0 = dat;
Delay(100);
P0 = 0xff;
}
void DisplaySMG_all(void)
{
Init_hc573(6);
P0 = 0xff;
Init_hc573(7);
P0 = 0xff;
}
void DisplaySMG(void)
{
DisplaySMG_Dat(0, Shu[yi]);
Delay(100);
DisplaySMG_Dat(1, Shu[er]);
Delay(100);
DisplaySMG_Dat(2, Shu[san]);
Delay(100);
DisplaySMG_Dat(3, Shu[si]);
Delay(100);
DisplaySMG_Dat(4, Shu[wu]);
Delay(100);
DisplaySMG_Dat(5, Shu[liu]);
Delay(100);
DisplaySMG_Dat(6, Shu[qi]);
Delay(100);
DisplaySMG_Dat(7, Shu[ba]);
Delay(100);
DisplaySMG_all();
}
void keyscan(void)
{
if(!key4)
{
Delay(200);
if(!key4)
{
if(!display)
{
work ++;
if(work == 3)
{
work = 0;
}
}
while(!key4);
}
}
if(!key5)
{
Delay(200);
if(!key5)
{
if(!display)
{
sec += 60;
flag_5 ++;
if(flag_5 == 2)
{
sec = 0;
}
}
while(!key5);
}
}
if(!key6)
{
Delay(200);
if(!key6)
{
if(!display)
{
Init_hc573(4);
P0 = 0xff;
sec = 0;
}
while(!key6);
}
}
if(!key7)
{
Delay(200);
if(!key7)
{
display = 1;
flag_7 ++;
if(flag_7 == 2)
{
flag_7 = 0;
display = 0;
}
while(!key7);
}
}
}
void Init_Timer0(void)
{
TMOD = 0x01;
TL0 = (65535-10)/256;
TH0 = (65535-10)%256;
// EA =
// ET0 =
TR0 = 1;
}
void Service_Timer0(void) interrupt 1
{
TL0 = (65535-10)/256;
TH0 = (65535-10)%256;
count ++;
if(work == 0)
{
if(count < 20)
{
motor = 1;
}
else
{
motor = 0;
count = 0;
}
}
else if(work == 1)
{
if(count < 30)
{
motor = 1;
}
else
{
motor = 0;
count = 0;
}
}
else if(work == 2)
{
if(count < 70)
{
motor = 1;
}
else
{
motor = 0;
count = 0;
}
}
time ++;
if(time == 100000 )
{
sec --;
time = 0;
}
}
|