#include "init.h"
#include "timer.h"
#include "led.h"
#include "key.h"
#include "seg.h"
#include "iic.h"
#include "stdio.h"
unsigned char ucLed[8]={0,0,0,0,0,0,0,0};
unsigned char seg_string[10],seg_buf[8];
unsigned char pos=0;
unsigned char Key_Val,Key_Down,Key_Up,Key_Old;
unsigned char Key_Slow;
unsigned int Seg_Slow;
void Led_Proc();
void Key_Proc();
void Seg_Proc();
unsigned char Seg_Disp_Mode;
unsigned char counter=0;
float advolt;
float advolt_param=0.0;
unsigned char advolt_save;
long led_ms;
long t_ms;
unsigned char key_error=0;
bit L1_flag=0;
bit L3_flag=0;
bit over_flag=0;
bit down_flag=0;
void main(void)
{
All_Init();
Timer5Init();
EEPROM_Read(&advolt_save,0,1);
advolt_param=(advolt_save/10)+(advolt_save%10)*0.1;
while(1)
{
Led_Proc();
Seg_Proc();
Key_Proc();
}
}
void t2int() interrupt 12
{
t_ms++;
if(++Seg_Slow==100) Seg_Slow=0;
if(++Key_Slow==10) Key_Slow=0;
Seg_Disp(seg_buf,pos);
if(++pos==8) pos=0;
Led_Disp(pos,ucLed[pos]);
}
void Key_Proc(void)
{
if(Key_Slow) return;
Key_Slow=1;
Key_Val = KBD_Read();
Key_Down = Key_Val & (Key_Val ^ Key_Old);
Key_Up = ~Key_Val & (Key_Val ^ Key_Old);
Key_Old = Key_Val;
switch(Key_Down)
{
case 12:
key_error=0;
if(++Seg_Disp_Mode==3) Seg_Disp_Mode=0;
if(Seg_Disp_Mode==2)
{
advolt_save=advolt_param*10;
EEPROM_Write(&advolt_save,0,1);
}
break;
case 13:
if(Seg_Disp_Mode==2)
{
counter=0;
key_error=0;
}
else key_error++;
break;
case 16:
if(Seg_Disp_Mode==1)
{
key_error=0;
advolt_param+=0.5;
if(advolt_param>5.0) advolt_param=0;
}
else key_error++;
break;
case 17:
if(Seg_Disp_Mode==1)
{
key_error=0;
advolt_param-=0.5;
if(advolt_param<0.0) advolt_param=5.0;
}
else key_error++;
break;
case 0:
break;
default: key_error++;
}
}
void Seg_Proc(void)
{
if(Seg_Slow) return;
Seg_Slow=1;
if((AD_Read(0x43)/51.0)>advolt_param)
{
over_flag=1;
}
if(((AD_Read(0x43)/51.0)<advolt_param)&&over_flag==1)
{
down_flag=1;
}
if(over_flag&&down_flag)
{
over_flag=down_flag=0;
counter++;
}
switch(Seg_Disp_Mode)
{
case 0:
sprintf(seg_string,"U %3.2f",AD_Read(0x43)/51.0);
break;
case 1:
sprintf(seg_string,"P %3.2f",advolt_param);
break;
case 2:
sprintf(seg_string,"N%7d",(unsigned int)counter);
break;
}
Seg_Trans(seg_buf,seg_string);
}
void Led_Proc(void)
{
if(Key_Slow)return;
Key_Slow = 1;
advolt = AD_Read(0x43)/51.0;
if((advolt<advolt_param)&&(led_ms==0))
{
led_ms=t_ms;
}
if((advolt<advolt_param)&&((t_ms-led_ms)>5000))
{
L1_flag=1;
}
if(advolt>advolt_param)
{
led_ms=0;
L1_flag=0;
}
if(key_error>=3)
{
L3_flag=1;
}
else L3_flag=0;
ucLed[0]=L1_flag;
ucLed[1]=(counter%2);
ucLed[2]=L3_flag;
}