#include "stc15f2k60s2.h"
#include "intrins.h"
#include "stdio.h"
#include "onewire.h"
#include "ds1302.h"
#include "iic.h"
#define uchar unsigned char
#define uint unsigned int
extern unsigned char shijian[7];
//LED开关
uchar led_bit=0xff;
#define led_on(n) {led_bit&=_crol_(0xfe,n-1);P0=led_bit;P2|=0x80;P2&=0x9f;P2&=0x1f;}
#define led_off(n){led_bit|=_crol_(0x01,n-1);P0=led_bit;P2|=0x80;P2&=0x9f;P2&=0x1f;}
uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0xBF,0xFF,0xC6,0x86,0x8C};
uchar Digbuf[]={0,1,2,3,4,5,6,7};
uchar Digcom=0;
void Allinit();
void delayms(uint ms);
void Timer2Init(void);
void GID_Show();
void keyscan16();
void LED_Show();
uint wendu=0;
uchar inter_face1=0; //数据,参数界面切换
uchar inter_face2=0; //数据子界面
uchar inter_face3=0;//参数子界面
uchar voltage=0;
char shi_can=17; //小时参数
char wen_can=25; //温度参数
char led_can=4; //指示灯参数
uint tt1=0,tt2=0;
void main(void)
{
Allinit();
Timer2Init();
DS_init();
while(1)
{
voltage=AD_Read(0x01); //光敏分压
voltage=AD_Read(0x01);
wendu=Temper_Get();
DS_Get();
LED_Show();
keyscan16();
GID_Show();
}
}
void GID_Show()
{
if(inter_face1==0) //数据界面
{
if(inter_face2==0) //时间数据显示
{
Digbuf[0]=shijian[2]/10;Digbuf[1]=shijian[2]%10;Digbuf[2]=20;
Digbuf[3]=shijian[1]/10;Digbuf[4]=shijian[1]%10;Digbuf[5]=20;
Digbuf[6]=shijian[0]/10;Digbuf[7]=shijian[0]%10;
}
else if(inter_face2==1) //温度数据显示
{
Digbuf[0]=22;Digbuf[1]=21;Digbuf[2]=21;Digbuf[3]=21;Digbuf[4]=21;
Digbuf[5]=wendu/1000;Digbuf[6]=wendu%1000/100+10;Digbuf[7]=wendu%100/10;
}
else if(inter_face2==2)
{
Digbuf[0]=23;Digbuf[1]=21;Digbuf[2]=voltage/100+10;Digbuf[3]=voltage%100/10;Digbuf[4]=voltage%10;
Digbuf[5]=21;Digbuf[6]=21;
if(voltage<50){Digbuf[7]=1;} //暗
else Digbuf[7]=0; //亮
}
}
else if(inter_face1==1) //参数界面
{
if(inter_face3==0) //时间参数
{
Digbuf[0]=24;Digbuf[1]=1;Digbuf[2]=21;Digbuf[3]=21;Digbuf[4]=21;Digbuf[5]=21;
Digbuf[6]=shi_can/10;Digbuf[7]=shi_can%10;
}
else if(inter_face3==1) //温度参数
{
Digbuf[0]=24;Digbuf[1]=2;Digbuf[2]=21;Digbuf[3]=21;Digbuf[4]=21;Digbuf[5]=21;
Digbuf[6]=wen_can/10;Digbuf[7]=wen_can%10;
}
else if(inter_face3==2) //指示灯参数
{
Digbuf[0]=24;Digbuf[1]=2;Digbuf[2]=21;Digbuf[3]=21;Digbuf[4]=21;Digbuf[5]=21;Digbuf[6]=21;
Digbuf[7]=led_can;
}
}
}
void LED_Show()
{
if(shi_can<=7)
{
if((shijian[2]>=shi_can)&&(shijian[2]<=8)){led_on(1);}
else {led_off(1);}
}
else if(shi_can>7)
{
if(((shijian[2]>=shi_can)&&(shijian[2]<=23))||((shijian[2]>=0)&&(shijian[2]<=8))){led_on(1);}
else {led_off(1);}
}
if(wendu=23)shi_can=23;
}
else if(inter_face3==1) //温度参数 00-99
{
wen_can++;
if(wen_can>=99)wen_can=99;
}
else if(inter_face3==2)//指示灯参数 4-8
{
led_can++;
if(led_can>=8)led_can=8;
}
}
}
while(!P32);
}
else if(P33==0) //s8 —
{
delayms(5);
if(P33==0)
{
if(inter_face1==1)//参数界面加
{
if(inter_face3==0)//小时参数 00-23
{
shi_can--;
if(shi_can<=0)shi_can=0;
}
else if(inter_face3==1) //温度参数 00-99
{
wen_can--;
if(wen_can<=0)wen_can=0;
}
else if(inter_face3==2)//指示灯参数 4-8
{
led_can--;
if(led_can<=4)led_can=4;
}
}
}
while(!P33);
}
}
void Timer2Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0x20; //设置定时初值
T2H = 0xD1; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
IE2|=0x04;
EA=1;
}
void timer2() interrupt 12
{
P0=0xFF;
P2|=0xC0;P2&=0xDF;P2&=0x1F;
P0=0xFF;
P2|=0xE0;P2&=0xFF;P2&=0x1F;
P0=(1<=3000)
{
tt1=0;
led_on(3);
}
}
else //亮
{
tt1=0;
tt2++;
if(tt2>=3000)
{
tt2=0;
led_off(3);
}
}
if(voltage<50) //暗
{
if(led_can==4){led_on(4);led_off(5);led_off(6);led_off(7);led_off(8);}
else if(led_can==5){led_off(4);led_on(5);led_off(6);led_off(7);led_off(8);}
else if(led_can==6){led_off(4);led_off(5);led_on(6);led_off(7);led_off(8);}
else if(led_can==7){led_off(4);led_off(5);led_off(6);led_on(7);led_off(8);}
else if(led_can==8){led_off(4);led_off(5);led_off(6);led_off(7);led_on(8);}
}
else {led_off(4);led_off(5);led_off(6);led_off(7);led_off(8);}
}
void Allinit()
{
P0=0x00;P2|=0xA0;P2&=0xBF;P2&=0x1F;
P0=0xFF;P2|=0x80;P2&=0x9F;P2&=0x1F;
P0=0xFF;P2|=0xC0;P2&=0xDF;P2&=0x1F;
P0=0xFF;P2|=0xE0;P2&=0xFF;P2&=0x1F;
}
void delayms(uint ms)
{
uint i,j;
for(i=0;i0;j--);
}