#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
uint fen=33;
uint shi=18;
uint miao=0;
uint ri=0;
uint g=0;
#pragma interrupt_handler timer1_isr:9
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
void show(uchar j,uchar k)
{
PORTA=table[j];
PORTB=0XFF;
PORTB&=~BIT(k);
delay(1);
}
void temer1_init(void)
{
TCCR1B=0X04; //开timer1 为256分频
TCNT1H=0X85;
TCNT1L=0XED;
TIMSK|=BIT(2);
SREG|=BIT(7);
}
void timer1_isr(void)
{
miao++;
TCNT1H=0X85;
TCNT1L=0XED;
}
uchar key_press()
{
uchar j;
DDRD|=0X0F;
PORTD|=0X0F;
DDRD&=0XF0;
j=PIND;
j=j&0X0F;
if(j==0X0F)
{
return 0;
}
else
{
return 1;
}
}
uchar key_scan()
{
uchar key;
delay(10);
if(key_press())
{
key=PIND;
//key=0X0E;
key&=0X0F;
switch(key)
{
case 0X0E:
key=1;
break;
case 0X0D:
key=2;
break;
case 0X0B:
key=3;
break;
case 0X07:
key=4;
break;
default:
key=16;
}
while(key_press());
}
else
{
key=16;
}
return key;
}
void main()
{
uchar i,l;
temer1_init();
DDRA|=0XFF;//0001 1000
DDRB=0XFF;
while(1)
{
i=key_press();
if(i)
{
l=key_scan();
if(l==1)
{
show(miao%10,0);
show(miao/10,1);
show(fen%10,2);
show(fen/10,3);
}
if(l==2)
{
shi++;
}
if(l==3)
{
fen++;
}
}
if(miao==60)
{
miao=0;
fen++;
}
if(fen==60)
{
fen=0;
shi++;
}
if(shi==24)
{
shi=0;
ri++;
}
show(fen%10,0);
show(fen/10,1);
show(shi%10,2);
show(shi/10,3);
}
}