#include "stc15.h"
#include "intrins.h"
#include "gpio.h"
#include "595hc.h"
#define MAIN_Fosc 11059200L
u16 counter = 0;
u8 countdown = 5;
u16 i,j,k;
bit start_flag = 0;
bit next_flag = 0;
bit confirm_flag = 0;
bit up = 0;
bit down = 0;
u16 Fre_input = 0;
u16 Fre_counter = 0;
u8 code start[8] = {1,22,24,25,26,17,17,17};
u8 KeyCode = 0;
u8 IO_KeyState = 0, IO_KeyState1 = 0, IO_KeyHoldCnt = 0;
static u8 get_flag = 1;
void IO_KeyDelay(void)
{
i = 60;
while (--i);
}
void IO_KeyScan(void)
{
j = IO_KeyState1;
P0 = 0xf0;
IO_KeyDelay();
IO_KeyState1 = P0 & 0xf0;
P0 = 0x0f;
IO_KeyDelay();
IO_KeyState1 |= (P0 & 0x0f);
IO_KeyState1 ^= 0xff;
if (j == IO_KeyState1)
{
j = IO_KeyState;
IO_KeyState = IO_KeyState1;
if (IO_KeyState != 0)
{
F0 = 0;
if (j == 0) F0 = 1;
else if (j == IO_KeyState)
{
if (++IO_KeyHoldCnt >= 20)
{
IO_KeyHoldCnt = 18;
F0 = 1;
}
}
if (F0)
{
next_flag = 1;
switch(IO_KeyState)
{
case 0x11: get_flag = 0 ;break;
case 0x12: get_flag = 1 ;break;
case 0x14: get_flag = 2 ;break;
case 0x18: get_flag = 3 ;break;
case 0x21: get_flag = 4 ;break;
case 0x22: get_flag = 5 ;break;
case 0x24: get_flag = 6 ;break;
case 0x28: get_flag = 7 ;break;
case 0x41: get_flag = 8 ;break;
case 0x42: get_flag = 9 ;break;
case 0x44: get_flag = 10 ;break;
case 0x48: get_flag = 11 ;break;
case 0x81: get_flag = 12 ;break;
case 0x82: up = 1 ;break;
case 0x84: down = 1 ;break;
case 0x88: IAP_CONTR = 0x20;break;
default: get_flag = 16 ;break;
}
}
}
else IO_KeyHoldCnt = 0;
}
P0 = 0xff;
}
void Delay1ms()
{
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void Delay_ms(u16 xms)
{
for (k=0;k<xms;k++)
{
Delay1ms();
}
}
void Timer0Init(void)
{
AUXR = 0x80;
TMOD = 0x00;
TL0 = 0xCD;
TH0 = 0xD4;
EA = 1;
ET0 = 1;
TF0 = 0;
TR0 = 1;
}
void timer0 (void) interrupt 1
{
counter++;
Fre_counter++;
DisplayScan();
}
void Fre_output(u16 Fre)
{
LED8[0] = 15;
LED8[1] = 29;
LED8[2] = 14;
LED8[3] = 17;
LED8[4] = 17;
Fre = 500 / Fre;
if(Fre_counter >= Fre)
{
P16 = !P16;
Fre_counter = 0;
}
}
int up_down(bit up,bit down)
{
if(up == 1)
{
LED8[7] = LED8[7] + 1;
if(LED8[7] == 10)
{
if(LED8[6] == 9)
{
if(LED8[5] == 9)
{
LED8[7] = 9;
LED8[6] = 9;
LED8[5] = 9;
}
else
{
LED8[7] = 0;
LED8[6] = 0;
LED8[5] ++;
}
}
else
{
LED8[7] = 0;
LED8[6] ++;
}
}
return 1;
}
else if (down == 1)
{
LED8[7] = LED8[7] - 1;
if(LED8[7] < 0)
{
if(LED8[6] == 0 )
{
if(LED8[5] == 0)
{
LED8[7] = 0;
LED8[6] = 0;
LED8[5] = 0;
}
else
{
LED8[7] = 9;
LED8[6] = 9;
LED8[5] --;
}
}
else
{
LED8[7] = 9;
LED8[6] --;
}
}
return 0;
}
}
void main(void)
{
GPIO();
Timer0Init();
P16 = 1;
P17 = 1;
for (k = 0; k < 8; k++) LED8[k] = 17;
Fre_counter = 0;
counter = 0;
while(1)
{
if(counter >= 50)
{
IO_KeyScan();
counter = 0;
}
if(next_flag==0)
{
for(i=0; i<5; i++) LED8[i] = start[i];
}
if(next_flag==1)
{
if(get_flag != 12)
{
LED8[5] = LED8[6];
LED8[6] = LED8[7];
LED8[7] = get_flag;
next_flag = 0;
}
else
{
Fre_input = LED8[5] * 100 + LED8[6] * 10 + LED8[7];
switch(up_down(up,down))
{
case 0: Fre_input --;
down = 0;
break;
case 1: Fre_input ++;
up = 0;
break;
default:break;
}
Fre_output(Fre_input);
P17 = !P17;
}
}
}
}