#include "reg52.h"
#include "onewire.h"
#include "ds1302.h"
#define uchar unsigned char
#define uint unsigned int
sfr AUXR=0x8e;
unsigned char code ds[]={50,59,23};
unsigned char shijian[7];
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
void smg_xianshi(uchar yi,er,san,si,wu,liu,qi,ba);
void delay(uint x);
uchar yi,er,san,si,wu,liu,qi,ba;
void readtime();
void dsinit();
void allinit();
uchar key_panjian();
void Timer0Init(void);
void zhongduan();
uchar tab1[10];
uchar jiemian=0x10,ww=0,qiehuan_flag=0; //10自动界面//20时钟界面//30温度显示界面 //40温度采集显示界面//
uint tt=0;
uchar k=0,aa;
uchar q=0;
uint times=0;
uchar work_flag=0,work_end=0,p=0;
void readtime()
{
unsigned char i;
unsigned char addr=0x81;
Ds1302_Single_Byte_Write(0x8e,0x00);
for(i=0;i<7;i++)
{
shijian[i]=Ds1302_Single_Byte_Read(addr);
addr=addr+2;
}
Ds1302_Single_Byte_Write(0x8e,0x80);
}
void dsinit()
{
unsigned char i;
unsigned char addr=0x80;
Ds1302_Single_Byte_Write(0x8e,0x00);
for(i=0;i<7;i++)
{
Ds1302_Single_Byte_Write(addr,ds[i]);
addr=addr+2;
}
Ds1302_Single_Byte_Write(0x8e,0x80);
}
void delay(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
void smg_xianshi(uchar yi,er,san,si,wu,liu,qi,ba)
{
P2=0xc0;
P0=0x01;
P2=0xe0;
P0=tab[yi];
delay(10);
P2=0xc0;
P0=0x02;
P2=0xe0;
P0=tab[er];
delay(10);
P2=0xc0;
P0=0x04;
P2=0xe0;
P0=tab[san];
delay(10);
P2=0xc0;
P0=0x08;
P2=0xe0;
P0=tab[si];
delay(10);
P2=0xc0;
P0=0x10;
P2=0xe0;
P0=tab[wu];
delay(10);
P2=0xc0;
P0=0x20;
P2=0xe0;
P0=tab[liu];
delay(10);
P2=0xc0;
P0=0x40;
P2=0xe0;
P0=tab[qi];
delay(10);
P2=0xc0;
P0=0x80;
P2=0xe0;
P0=tab[ba];
delay(10);
}
void main()
{
uchar j=0,flag=0,flag1=0,ls1=0,qi=0,ba=1;
uchar set_time=1;
dsinit();
allinit();
Timer0Init();
while(1)
{
j=key_panjian();
switch(jiemian)
{
case 0x10:
// times=200;
yi=11,er=11,san=11,si=11,wu=11,liu=10; //11//
switch(j)
{
case 1:
break;
case 2:
break;
case 3:
work_flag=1;
jiemian=0x20;
q=0;
break;
case 4:
set_time++;
if(set_time>4)
set_time=1;
if(set_time==1)
{
qi=0;
ba=1;
times=200;
}
else if(set_time==2)
{
qi=0;
ba=5;
times=1000;
}
else if(set_time==3)
{
qi=3;
ba=0;
times=6000;
}
else if(set_time==4)
{
qi=6;
ba=0;
times=12000;
}
break;
default:break;
}
break;
case 0x20:
readtime();
yi=shijian[2]/10;er=shijian[2]%10; //22//
si=shijian[1]/10;wu=shijian[1]%10;
qi=shijian[0]/10;ba=shijian[0]%10;
if(shijian[0]%2==0)
{
san=11;
liu=11;
}
else
{
san=10;
liu=10;
}
if(work_end==1)
{
jiemian=0x30; //55//
}
break;
case 0x30:
yi=10,er=0,san=0,si=11,wu=11,liu=10; //66//
qi=tab1[9]/10;
ba=tab1[9]%10;
switch(j)
{
case 1:
break;
case 2:
work_end=0;
P2=0x80;P0=0xff;P2=0x1f; //77//
jiemian=0x40;
break;
case 3:
break;
case 4:
break;
default:break;
}
break;
case 0x40:
if(qiehuan_flag!=0) //88//
{
qiehuan_flag=0;
qi=tab1[p]/10;
ba=tab1[p]%10;
yi=10,er=(p+1)/10,san=(p+1)%10,si=11,wu=11,liu=10;
p++;
if(p>9)
p=0;
}
switch(j)
{
case 1:
qiehuan_flag=0xff;
jiemian=0x10;
if(times==200)
{
qi=0;
ba=1;
}
else if(times==1000)
{
qi=0;
ba=5;
}
else if(times==6000)
{
qi=3;
ba=0;
}
else if(times==12000)
{
qi=6;
ba=0;
}
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:break;
}
break;
default:break;
}
smg_xianshi(yi,er,san,si,wu,liu,qi,ba);
}
}
//判键子程序//
uchar key_panjian()
{
uchar i,key=0;
P3=0x0f;
i=P3;
i=i&0x0f;
if(i!=0x0f)
{
delay(20);
i=P3;
i=i&0x0f;
if(i!=0x0f)
{
switch (i)
{
case 0x0e:key=1;break;
case 0x0d:key=2;break;
case 0x0b:key=3;break;
case 0x07:key=4;break;
default: break;
}
}
}
i=P3;
i=i&0x0f;
while(i!=0x0f)
{
P3=0x0f;
i=P3;
i=i&0x0f;
}
return key;
}
void allinit()
{
P2=0XA0;
P0=0X00;//关闭蜂鸣器,继电器
P2=0X80;
P0=0XFF;//关闭LED灯
}
void Timer0Init(void) //5毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
TF0 = 0;
EA=1;
ET0=1; //清除TF0标志
TR0=1; //定时器0开始计时
}
void zhongduan() interrupt 1
{
aa++;
ww++;
tt++;
if(work_flag==1)
{
if(tt>=times)
{
tt=0;
k=RD_temper();
if(q<10)
{
tab1[q++]=k;
}
else
{
q=0;
work_flag=0;
work_end=1; //33//
}
}
}
if((work_end==1)&&(aa==200))
{
aa=0;
P2=0x80;P0=0xfe;P2=0x1f;
}
else if((work_end==1)&&(aa==100))
{
P2=0x80;P0=0xff;P2=0x1f;
}
if(jiemian==0x40)
{
if(ww==200)
{
ww=0;
qiehuan_flag=1;
}
// else if(ww==100)
// {
// qiehuan_flag=0;
// }
}
}
|