📄 clock.lst
字号:
Clock.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000080 00800100 00000b90 00000c24 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00000b90 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 0000001b 00800180 00800180 00000ca4 2**0
ALLOC
3 .noinit 00000000 0080019b 0080019b 00000ca4 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00000ca4 2**0
CONTENTS
5 .debug_aranges 00000014 00000000 00000000 00000ca4 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 000001d8 00000000 00000000 00000cb8 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 000004fa 00000000 00000000 00000e90 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 0000018d 00000000 00000000 0000138a 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 00000577 00000000 00000000 00001517 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_str 000001c5 00000000 00000000 00001a8e 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 46 00 jmp 0x8c
4: 0c 94 63 00 jmp 0xc6
8: 0c 94 63 00 jmp 0xc6
c: 0c 94 63 00 jmp 0xc6
10: 0c 94 63 00 jmp 0xc6
14: 0c 94 63 00 jmp 0xc6
18: 0c 94 63 00 jmp 0xc6
1c: 0c 94 63 00 jmp 0xc6
20: 0c 94 63 00 jmp 0xc6
24: 0c 94 63 00 jmp 0xc6
28: 0c 94 63 00 jmp 0xc6
2c: 0c 94 63 00 jmp 0xc6
30: 0c 94 63 00 jmp 0xc6
34: 0c 94 63 00 jmp 0xc6
38: 0c 94 63 00 jmp 0xc6
3c: 0c 94 63 00 jmp 0xc6
40: 0c 94 ab 02 jmp 0x556
44: 0c 94 63 00 jmp 0xc6
48: 0c 94 63 00 jmp 0xc6
4c: 0c 94 63 00 jmp 0xc6
50: 0c 94 63 00 jmp 0xc6
54: 0c 94 63 00 jmp 0xc6
58: 0c 94 63 00 jmp 0xc6
5c: 0c 94 63 00 jmp 0xc6
60: 0c 94 63 00 jmp 0xc6
64: 0c 94 63 00 jmp 0xc6
68: 0c 94 63 00 jmp 0xc6
6c: 0c 94 63 00 jmp 0xc6
70: 0c 94 63 00 jmp 0xc6
74: 0c 94 63 00 jmp 0xc6
78: 0c 94 63 00 jmp 0xc6
7c: 0c 94 63 00 jmp 0xc6
80: 0c 94 63 00 jmp 0xc6
84: 0c 94 63 00 jmp 0xc6
88: 0c 94 63 00 jmp 0xc6
0000008c <__ctors_end>:
8c: 11 24 eor r1, r1
8e: 1f be out 0x3f, r1 ; 63
90: cf ef ldi r28, 0xFF ; 255
92: d0 e1 ldi r29, 0x10 ; 16
94: de bf out 0x3e, r29 ; 62
96: cd bf out 0x3d, r28 ; 61
00000098 <__do_copy_data>:
98: 11 e0 ldi r17, 0x01 ; 1
9a: a0 e0 ldi r26, 0x00 ; 0
9c: b1 e0 ldi r27, 0x01 ; 1
9e: e0 e9 ldi r30, 0x90 ; 144
a0: fb e0 ldi r31, 0x0B ; 11
a2: 00 e0 ldi r16, 0x00 ; 0
a4: 0b bf out 0x3b, r16 ; 59
a6: 02 c0 rjmp .+4 ; 0xac
000000a8 <.__do_copy_data_loop>:
a8: 07 90 elpm r0, Z+
aa: 0d 92 st X+, r0
000000ac <.__do_copy_data_start>:
ac: a0 38 cpi r26, 0x80 ; 128
ae: b1 07 cpc r27, r17
b0: d9 f7 brne .-10 ; 0xa8
000000b2 <__do_clear_bss>:
b2: 11 e0 ldi r17, 0x01 ; 1
b4: a0 e8 ldi r26, 0x80 ; 128
b6: b1 e0 ldi r27, 0x01 ; 1
b8: 01 c0 rjmp .+2 ; 0xbc
000000ba <.do_clear_bss_loop>:
ba: 1d 92 st X+, r1
000000bc <.do_clear_bss_start>:
bc: ab 39 cpi r26, 0x9B ; 155
be: b1 07 cpc r27, r17
c0: e1 f7 brne .-8 ; 0xba
c2: 0c 94 ff 03 jmp 0x7fe
000000c6 <__bad_interrupt>:
c6: 0c 94 00 00 jmp 0x0
000000ca <Feb>:
unsigned char key2asc(unsigned char in);
unsigned char key_scan(void);
int bell();
void init_key(void);
int Feb(int year){
ca: 9c 01 movw r18, r24
if(((year%4==0)&&(year%100!=0))||(year%100==0))
cc: 83 70 andi r24, 0x03 ; 3
ce: 90 70 andi r25, 0x00 ; 0
d0: 89 2b or r24, r25
d2: 39 f4 brne .+14 ; 0xe2
d4: c9 01 movw r24, r18
d6: 64 e6 ldi r22, 0x64 ; 100
d8: 70 e0 ldi r23, 0x00 ; 0
da: 0e 94 b5 05 call 0xb6a
de: 89 2b or r24, r25
e0: 39 f4 brne .+14 ; 0xf0
e2: c9 01 movw r24, r18
e4: 64 e6 ldi r22, 0x64 ; 100
e6: 70 e0 ldi r23, 0x00 ; 0
e8: 0e 94 b5 05 call 0xb6a
ec: 89 2b or r24, r25
ee: 19 f4 brne .+6 ; 0xf6
return 29;
f0: 8d e1 ldi r24, 0x1D ; 29
f2: 90 e0 ldi r25, 0x00 ; 0
f4: 08 95 ret
else
return 28;
f6: 8c e1 ldi r24, 0x1C ; 28
f8: 90 e0 ldi r25, 0x00 ; 0
}
fa: 08 95 ret
fc: 08 95 ret
000000fe <bell>:
SIGNAL(SIG_OVERFLOW0){
TCNT0=0x70;
TCCR0=0X07;
m[1]=Feb(Year);
PORTB=0x60&bell();
interrupt_count++;
if(interrupt_count<100)goto ed;interrupt_count=0;Second++;
if(Second<60)goto ed;Second=0;Minite++;
if(Minite<60)goto ed;Minite=0;Hour++;
if(Hour<24) goto ed;Hour=0;Date++;
if(Date<m[Month-1])goto ed;Date=1;Month++;
if(Month<13)goto ed;Month=1;Year++;
ed:
if(keying)return;
display();
}
void init_timer(){
TCNT0=0x70;
TCCR0=0X07;
TIMSK=0x01;
sei();
}
void delay(int d1,int d2){
int i,j;
for(i=0;i<d1;i++)
for(j=0;j<d2;j++);
}
void lcd_ctrl_wait(void){
delay(1000,100);
}
void lcd_data_wait(void){
delay(1000,10);
}
void init_text_lcd(void){
lcd_ctrl=TLCD_CTRL;
lcd_data=TLCD_DATA;
lcd_ctrl_wait();
*lcd_ctrl=0x38;
lcd_ctrl_wait();
*lcd_ctrl=0x02;
lcd_ctrl_wait();
*lcd_ctrl=0x01;
lcd_ctrl_wait();
*lcd_ctrl=0x06;
lcd_ctrl_wait();
*lcd_ctrl=0x0C;
lcd_ctrl_wait();
}
void printmsg(char*msg)
{
unsigned int i=0;
for(i=0;msg[i]!='\0';i++)
{
if(msg[i]=='\r')
{
*lcd_ctrl=0xc0;
lcd_ctrl_wait();
}
else
{
*lcd_data=msg[i];
lcd_data_wait();
}
}
}
void printchar(char c){
*lcd_data=c;
lcd_data_wait();
}
void printcell(int data,int address)
{
char str[5]={0};
int i;
for(i=3;i>=0;i--)
{
str[i]=data%10+'0';
data=data/10;
}
*lcd_ctrl=address;
lcd_ctrl_wait();
for(i=(address==ADD_YEAR?0:2);str[i];i++)
{
*lcd_data=str[i];
lcd_data_wait();
}
}
void display(){
if(Second-second){printcell(Second,ADD_SECOND);second=Second;}
if(Minite-minite){printcell(Minite,ADD_MINITE);minite=Minite;}
if(Hour-hour){printcell(Hour,ADD_HOUR);hour=Hour;}
if(Date-date){printcell(Date,ADD_DATE);printweek();date=Date;}
if(Month-month){printcell(Month,ADD_MONTH);printweek();month=Month;}
if(Year-year){printcell(Year,ADD_YEAR);printweek();year=Year;}
}
unsigned char key2asc(unsigned char in)
{
unsigned char ka[]={0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88};
unsigned char a;
for(a=0;a<0x10;a++)
if(ka[a]==in)break;
return (a&0x0f);
}
unsigned char key_scan(void)
{
unsigned char save_low,save_high;
*ppi_ctrl=0x91;
*key=0xf0;
delay(10,10);
save_low=*key&0x0f;
*ppi_ctrl=0x90;
*key=0x00;
if(save_low)
{
*ppi_ctrl=0x98;
*key=0x0f;
delay(10,10);
save_high=*key&0xf0;
*ppi_ctrl=0x90;
*key=0x00;
if(!save_high)return 0;
save_high|=save_low;
return save_high;
}
return 0;
}
void init_key(void)
{
ppi_ctrl=PPI_1_CT;
key=PPI_1_PC;
*ppi_ctrl=0x90;
*key=0x00;
}
int main(){
unsigned char in;
keying=0;
MCUCR=(1<<SRE);
init_timer();
init_text_lcd();
init_key();
printmsg("2006-07-01\r00:00:00 00:00");
printweek();
DDRB=0x60;
while(1)
{
in=key_scan();
if(in==0)continue;
delay(1152,750);
in=key2asc(in);
keying=1;
switch(in)
{
case 1:
Year++;
year=Year;
printcell(Year,ADD_YEAR);
printweek();
break;
case 2:
Month++;
if(Month==13)Month=1;
month=Month;
printcell(Month,ADD_MONTH);
printweek();
break;
case 3:
Date++;
m[1]=Feb(Year);
if(Date>m[Month-1])Date=1;
date=Date;
printcell(Date,ADD_DATE);
printweek();
break;
case 9:
Hour=(Hour+49)%24;
hour=Hour;
printcell(Hour,ADD_HOUR);
break;
case 10:
Minite=(Minite+121)%60;
minite=Minite;
printcell(Minite,ADD_MINITE);
break;
case 11:
Second=(Second+121)%60;
second=Second;
printcell(Second,ADD_SECOND);
break;
case 5:
Year--;
year=Year;
printcell(Year,ADD_YEAR);
printweek();
break;
case 6:
Month--;
if(Month<1)Month=12;
month=Month;
printcell(Month,ADD_MONTH);
printweek();
break;
case 7:
Date--;
m[1]=Feb(Year);
if(Date<1)Date=m[Month-1];
date=Date;
printcell(Date,ADD_DATE);
printweek();
break;
case 13:
Hour=(Hour+47)%24;
hour=Hour;
printcell(Hour,ADD_HOUR);
break;
case 14:
Minite=(Minite+119)%60;
minite=Minite;
printcell(Minite,ADD_MINITE);
break;
case 15:
Second=(Second+119)%60;
second=Second;
printcell(Second,ADD_SECOND);
break;
case 0:
AltHour=(AltHour+49)%24;
printcell(AltHour,ADD_ALTHOUR);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -