📄 clock.c
字号:
#include <mega16.h>
#define HOLD_TIME 300
char Hour = 12, Min = 0, Sec = 0;
char Display_Seconds;
int Counter;
interrupt [TIM0_COMP] void TIMER0_COMP(void)
{
if (Counter == 2100)
{
Display_Seconds = 0;
Counter++;
}
else
if (Counter == 12500)
{
if (Sec == 59)
{
if (Min == 59)
{
if (Hour == 23)
Hour = 0;
else Hour++;
Min = 0;
}
else Min++;
Sec = 0;
}
else Sec++;
Counter = 0;
Display_Seconds = 1;
}
else Counter++;
}
void main (void)
{
int Digit_1, Digit_2, Digit_3, Digit_4;
char Select_Digit, Current_Digit;
int Display_Persist;
char Set_Min_Ok = 1, Set_Hour_Ok = 1;
DDRA = 0xFF;
DDRB = 0x0F;
DDRC = 0x00;
DDRD = 0x00;
PORTA = 0x00;
PORTB = 0x0F;
PORTC = 0x00;
PORTD = 0x00;
TCCR0 = 0x0A;
TCNT0 = 0x00;
OCR0 = 0x86;
TIMSK = 0x02;
ACSR = 0x80;
SFIOR = 0x01;
#asm("sei")
for ( ; ; )
{
if ((!PINC.1) && (Set_Hour_Ok))
{
Set_Hour_Ok = 0;
if (Hour == 23)
Hour = 0;
else
Hour++;
}
if (PINC.1)
Set_Hour_Ok = 1;
if ((!PINC.0) && (Set_Min_Ok))
{
Set_Min_Ok = 0;
if (Min == 59)
Min = 0;
else
Min++;
}
if (PINC.0)
Set_Min_Ok = 1;
Digit_4 = Min % 10;
Digit_3 = Min / 10;
Digit_2 = Hour % 10;
Digit_1 = Hour / 10;
for (Select_Digit = 0; Select_Digit < 4; Select_Digit++)
{
switch (Select_Digit)
{
case 0: Current_Digit = Digit_1; break;
case 1: Current_Digit = Digit_2; break;
case 2: Current_Digit = Digit_3; break;
case 3: Current_Digit = Digit_4; break;
}
switch (Current_Digit)
{
case 0: PORTA = 0xC0; break;
case 1: PORTA = 0xF9; break;
case 2: PORTA = 0xA4; break;
case 3: PORTA = 0xB0; break;
case 4: PORTA = 0x99; break;
case 5: PORTA = 0x92; break;
case 6: PORTA = 0x82; break;
case 7: PORTA = 0xF8; break;
case 8: PORTA = 0x80; break;
case 9: PORTA = 0x90; break;
}
if ((Select_Digit == 1 || Select_Digit == 2) && (Display_Seconds))
PORTA.7 = 0;
switch (Select_Digit)
{
case 0: PORTB.3 = 0; break;
case 1: PORTB.2 = 0; break;
case 2: PORTB.1 = 0; break;
case 3: PORTB.0 = 0; break;
}
for (Display_Persist = 0; Display_Persist < HOLD_TIME; Display_Persist++);
PORTB |= 0x0F;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -