⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.lst

📁 使用AVR ATmega128实验箱上的资源
💻 LST
📖 第 1 页 / 共 4 页
字号:

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 + -