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

📄 system.lss

📁 FM12864液晶驱动,单片机为ATMEGA48,GCC编译器开发,其中包含ADC和串口程序.
💻 LSS
📖 第 1 页 / 共 4 页
字号:
 cdc:	82 2f       	mov	r24, r18
	u8_t loop1,loop2;
	ptr = ptr + choice*8;
 cde:	99 27       	eor	r25, r25
 ce0:	64 e0       	ldi	r22, 0x04	; 4
 ce2:	88 0f       	add	r24, r24
 ce4:	99 1f       	adc	r25, r25
 ce6:	6a 95       	dec	r22
 ce8:	e1 f7       	brne	.-8      	; 0xce2 <display_character_char+0x1e>
 cea:	c8 0f       	add	r28, r24
 cec:	d9 1f       	adc	r29, r25
	if((line>4)||(line==0))return 1;
 cee:	8f 2d       	mov	r24, r15
 cf0:	81 50       	subi	r24, 0x01	; 1
 cf2:	84 30       	cpi	r24, 0x04	; 4
 cf4:	28 f4       	brcc	.+10     	; 0xd00 <display_character_char+0x3c>
	if((tier>16)||(tier==0))return 1;
 cf6:	bd 2c       	mov	r11, r13
 cf8:	ba 94       	dec	r11
 cfa:	8f e0       	ldi	r24, 0x0F	; 15
 cfc:	8b 15       	cp	r24, r11
 cfe:	18 f4       	brcc	.+6      	; 0xd06 <display_character_char+0x42>
 d00:	81 e0       	ldi	r24, 0x01	; 1
 d02:	90 e0       	ldi	r25, 0x00	; 0
 d04:	63 c0       	rjmp	.+198    	; 0xdcc <display_character_char+0x108>
	if(line==1)
 d06:	81 e0       	ldi	r24, 0x01	; 1
 d08:	f8 16       	cp	r15, r24
 d0a:	11 f4       	brne	.+4      	; 0xd10 <display_character_char+0x4c>
	{
		line = 0;
 d0c:	ff 24       	eor	r15, r15
 d0e:	03 c0       	rjmp	.+6      	; 0xd16 <display_character_char+0x52>
	}
	else
	{
		line = line * 2 - 2;
 d10:	ff 0c       	add	r15, r15
 d12:	8e ef       	ldi	r24, 0xFE	; 254
 d14:	f8 0e       	add	r15, r24
	}
	tier = tier - 1;
 d16:	db 2c       	mov	r13, r11
	if(tier<8)
 d18:	87 e0       	ldi	r24, 0x07	; 7
 d1a:	8b 15       	cp	r24, r11
 d1c:	50 f1       	brcs	.+84     	; 0xd72 <display_character_char+0xae>
	{
		for(loop1=0;loop1<2;loop1++)
 d1e:	cc 24       	eor	r12, r12
		{
			write_left_command(0x40|(tier*8));//设置列
 d20:	8b 2d       	mov	r24, r11
 d22:	99 27       	eor	r25, r25
 d24:	53 e0       	ldi	r21, 0x03	; 3
 d26:	88 0f       	add	r24, r24
 d28:	99 1f       	adc	r25, r25
 d2a:	5a 95       	dec	r21
 d2c:	e1 f7       	brne	.-8      	; 0xd26 <display_character_char+0x62>
 d2e:	08 2f       	mov	r16, r24
 d30:	00 64       	ori	r16, 0x40	; 64
 d32:	80 2f       	mov	r24, r16
 d34:	99 de       	rcall	.-718    	; 0xa68 <write_left_command>
			write_left_command(0xb8|line);
 d36:	1f 2d       	mov	r17, r15
 d38:	18 6b       	ori	r17, 0xB8	; 184
 d3a:	81 2f       	mov	r24, r17
 d3c:	95 de       	rcall	.-726    	; 0xa68 <write_left_command>
			write_right_command(0x40|(tier*8));//设置列
 d3e:	80 2f       	mov	r24, r16
 d40:	a3 de       	rcall	.-698    	; 0xa88 <write_right_command>
			write_right_command(0xb8|line);
 d42:	81 2f       	mov	r24, r17
 d44:	a1 de       	rcall	.-702    	; 0xa88 <write_right_command>
 d46:	43 e0       	ldi	r20, 0x03	; 3
 d48:	e4 2e       	mov	r14, r20
			for(loop2=0;loop2<4;loop2++)
			{
				write_left_data((unsigned char)pgm_read_word_near(ptr));
 d4a:	fe 01       	movw	r30, r28
 d4c:	05 91       	lpm	r16, Z+
 d4e:	14 91       	lpm	r17, Z
 d50:	80 2f       	mov	r24, r16
 d52:	99 27       	eor	r25, r25
 d54:	a9 de       	rcall	.-686    	; 0xaa8 <write_left_data>
				write_left_data((unsigned char)(pgm_read_word_near(ptr)>>8));
 d56:	81 2f       	mov	r24, r17
 d58:	99 27       	eor	r25, r25
 d5a:	99 27       	eor	r25, r25
 d5c:	a5 de       	rcall	.-694    	; 0xaa8 <write_left_data>
				ptr++;
 d5e:	22 96       	adiw	r28, 0x02	; 2
 d60:	ea 94       	dec	r14
 d62:	e7 fe       	sbrs	r14, 7
 d64:	f2 cf       	rjmp	.-28     	; 0xd4a <display_character_char+0x86>
			}
			line++;
 d66:	f3 94       	inc	r15
 d68:	c3 94       	inc	r12
 d6a:	81 e0       	ldi	r24, 0x01	; 1
 d6c:	8c 15       	cp	r24, r12
 d6e:	c0 f6       	brcc	.-80     	; 0xd20 <display_character_char+0x5c>
 d70:	2b c0       	rjmp	.+86     	; 0xdc8 <display_character_char+0x104>
		}
	}
	else
	{
		tier = tier - 8;
 d72:	88 ef       	ldi	r24, 0xF8	; 248
 d74:	d8 0e       	add	r13, r24
		for(loop1=0;loop1<2;loop1++)
 d76:	cc 24       	eor	r12, r12
		{
			write_left_command(0x40|(tier*8));//设置列
 d78:	8d 2d       	mov	r24, r13
 d7a:	99 27       	eor	r25, r25
 d7c:	23 e0       	ldi	r18, 0x03	; 3
 d7e:	88 0f       	add	r24, r24
 d80:	99 1f       	adc	r25, r25
 d82:	2a 95       	dec	r18
 d84:	e1 f7       	brne	.-8      	; 0xd7e <display_character_char+0xba>
 d86:	08 2f       	mov	r16, r24
 d88:	00 64       	ori	r16, 0x40	; 64
 d8a:	80 2f       	mov	r24, r16
 d8c:	6d de       	rcall	.-806    	; 0xa68 <write_left_command>
			write_left_command(0xb8|line);
 d8e:	1f 2d       	mov	r17, r15
 d90:	18 6b       	ori	r17, 0xB8	; 184
 d92:	81 2f       	mov	r24, r17
 d94:	69 de       	rcall	.-814    	; 0xa68 <write_left_command>
			write_right_command(0x40|(tier*8));//设置列
 d96:	80 2f       	mov	r24, r16
 d98:	77 de       	rcall	.-786    	; 0xa88 <write_right_command>
			write_right_command(0xb8|line);
 d9a:	81 2f       	mov	r24, r17
 d9c:	75 de       	rcall	.-790    	; 0xa88 <write_right_command>
 d9e:	93 e0       	ldi	r25, 0x03	; 3
 da0:	e9 2e       	mov	r14, r25
			for(loop2=0;loop2<4;loop2++)
			{
				write_right_data((unsigned char)pgm_read_word_near(ptr));
 da2:	fe 01       	movw	r30, r28
 da4:	05 91       	lpm	r16, Z+
 da6:	14 91       	lpm	r17, Z
 da8:	80 2f       	mov	r24, r16
 daa:	99 27       	eor	r25, r25
 dac:	90 de       	rcall	.-736    	; 0xace <write_right_data>
				write_right_data((unsigned char)(pgm_read_word_near(ptr)>>8));
 dae:	81 2f       	mov	r24, r17
 db0:	99 27       	eor	r25, r25
 db2:	99 27       	eor	r25, r25
 db4:	8c de       	rcall	.-744    	; 0xace <write_right_data>
				ptr++;
 db6:	22 96       	adiw	r28, 0x02	; 2
 db8:	ea 94       	dec	r14
 dba:	e7 fe       	sbrs	r14, 7
 dbc:	f2 cf       	rjmp	.-28     	; 0xda2 <display_character_char+0xde>
			}
			line++;
 dbe:	f3 94       	inc	r15
 dc0:	c3 94       	inc	r12
 dc2:	81 e0       	ldi	r24, 0x01	; 1
 dc4:	8c 15       	cp	r24, r12
 dc6:	c0 f6       	brcc	.-80     	; 0xd78 <display_character_char+0xb4>
		}
	}
	return 0;
 dc8:	80 e0       	ldi	r24, 0x00	; 0
 dca:	90 e0       	ldi	r25, 0x00	; 0
 dcc:	df 91       	pop	r29
 dce:	cf 91       	pop	r28
 dd0:	1f 91       	pop	r17
 dd2:	0f 91       	pop	r16
 dd4:	ff 90       	pop	r15
 dd6:	ef 90       	pop	r14
 dd8:	df 90       	pop	r13
 dda:	cf 90       	pop	r12
 ddc:	bf 90       	pop	r11
 dde:	08 95       	ret

00000de0 <init_lcd>:
}

/*******************************************/



void init_lcd(void)
{
	colse_back_light();//关闭液晶背光
 de0:	43 98       	cbi	0x08, 3	; 8
	reset_lcd();//复位液晶
 de2:	44 98       	cbi	0x08, 4	; 8
	double __tmp = ((F_CPU) / 4e3) * __ms;
	if (__tmp < 1.0)
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
 de4:	80 e0       	ldi	r24, 0x00	; 0
 de6:	90 e0       	ldi	r25, 0x00	; 0
 de8:	01 97       	sbiw	r24, 0x01	; 1
 dea:	f1 f7       	brne	.-4      	; 0xde8 <init_lcd+0x8>
 dec:	44 9a       	sbi	0x08, 4	; 8
	write_left_command(0x3f);//打开显示
 dee:	8f e3       	ldi	r24, 0x3F	; 63
 df0:	3b de       	rcall	.-906    	; 0xa68 <write_left_command>
	write_right_command(0x3f);
 df2:	8f e3       	ldi	r24, 0x3F	; 63
 df4:	49 de       	rcall	.-878    	; 0xa88 <write_right_command>
	write_left_command(0xc0);//显示起始行设置为1行
 df6:	80 ec       	ldi	r24, 0xC0	; 192
 df8:	37 de       	rcall	.-914    	; 0xa68 <write_left_command>
	write_right_command(0xc0);
 dfa:	80 ec       	ldi	r24, 0xC0	; 192
 dfc:	45 de       	rcall	.-886    	; 0xa88 <write_right_command>
	write_left_command(0xb8);//页面地址设置为0
 dfe:	88 eb       	ldi	r24, 0xB8	; 184
 e00:	33 de       	rcall	.-922    	; 0xa68 <write_left_command>
	write_right_command(0xb8);
 e02:	88 eb       	ldi	r24, 0xB8	; 184
 e04:	41 de       	rcall	.-894    	; 0xa88 <write_right_command>
	write_left_command(0x40);//列地址设置为0
 e06:	80 e4       	ldi	r24, 0x40	; 64
 e08:	2f de       	rcall	.-930    	; 0xa68 <write_left_command>
	write_right_command(0x40);
 e0a:	80 e4       	ldi	r24, 0x40	; 64
 e0c:	3d de       	rcall	.-902    	; 0xa88 <write_right_command>
	clear_lcd();
 e0e:	ae de       	rcall	.-676    	; 0xb6c <clear_lcd>
	double __tmp = ((F_CPU) / 4e3) * __ms;
	if (__tmp < 1.0)
		__ticks = 1;
	else if (__tmp > 65535)
		__ticks = 0;	/* i.e. 65536 */
 e10:	80 e0       	ldi	r24, 0x00	; 0
 e12:	90 e0       	ldi	r25, 0x00	; 0
 e14:	01 97       	sbiw	r24, 0x01	; 1
 e16:	f1 f7       	brne	.-4      	; 0xe14 <init_lcd+0x34>
	_delay_ms(1000);
	open_back_light();
 e18:	43 9a       	sbi	0x08, 3	; 8
 e1a:	08 95       	ret

00000e1c <open_adc>:
unsigned int adc_data;
unsigned char adc_mark;
/*****************************************************/
void open_adc(unsigned char channel)
{
 e1c:	98 2f       	mov	r25, r24
	if((channel<1)&&(channel>6))return;//超出通道范围则退出
	ADCSRA = channel | 0x88;//使能ADC,开ADC结束中断,选择通道
 e1e:	88 68       	ori	r24, 0x88	; 136
 e20:	80 93 7a 00 	sts	0x007A, r24
	ADMUX  = 0x00;//选择ADC0通道,结果右对齐
 e24:	10 92 7c 00 	sts	0x007C, r1
	DIDR0  = 0x01<<(channel - 1);//禁止数字缓冲器
 e28:	29 2f       	mov	r18, r25
 e2a:	33 27       	eor	r19, r19
 e2c:	21 50       	subi	r18, 0x01	; 1
 e2e:	30 40       	sbci	r19, 0x00	; 0
 e30:	81 e0       	ldi	r24, 0x01	; 1
 e32:	90 e0       	ldi	r25, 0x00	; 0
 e34:	02 c0       	rjmp	.+4      	; 0xe3a <open_adc+0x1e>
 e36:	88 0f       	add	r24, r24
 e38:	99 1f       	adc	r25, r25
 e3a:	2a 95       	dec	r18
 e3c:	e2 f7       	brpl	.-8      	; 0xe36 <open_adc+0x1a>
 e3e:	80 93 7e 00 	sts	0x007E, r24
	ADCSRA = ADCSRA | 0x40;//开始转换
 e42:	80 91 7a 00 	lds	r24, 0x007A
 e46:	80 64       	ori	r24, 0x40	; 64
 e48:	80 93 7a 00 	sts	0x007A, r24
 e4c:	08 95       	ret

00000e4e <__vector_21>:
}
/*****************************************************/
ISR(ADC_vect)
{
 e4e:	1f 92       	push	r1
 e50:	0f 92       	push	r0
 e52:	0f b6       	in	r0, 0x3f	; 63
 e54:	0f 92       	push	r0
 e56:	11 24       	eor	r1, r1
 e58:	2f 93       	push	r18
 e5a:	8f 93       	push	r24
 e5c:	9f 93       	push	r25
	unsigned char buffer1;
	unsigned char buffer2;
	buffer1 = ADCH;
 e5e:	80 91 79 00 	lds	r24, 0x0079
	buffer2 = ADCL;
 e62:	20 91 78 00 	lds	r18, 0x0078
	adc_data = (buffer1<<8)+buffer2;
 e66:	99 27       	eor	r25, r25
 e68:	98 2f       	mov	r25, r24
 e6a:	88 27       	eor	r24, r24
 e6c:	82 0f       	add	r24, r18
 e6e:	91 1d       	adc	r25, r1
 e70:	90 93 04 01 	sts	0x0104, r25
 e74:	80 93 03 01 	sts	0x0103, r24
	adc_mark = 1;
 e78:	81 e0       	ldi	r24, 0x01	; 1
 e7a:	80 93 02 01 	sts	0x0102, r24
 e7e:	9f 91       	pop	r25
 e80:	8f 91       	pop	r24
 e82:	2f 91       	pop	r18
 e84:	0f 90       	pop	r0
 e86:	0f be       	out	0x3f, r0	; 63
 e88:	0f 90       	pop	r0
 e8a:	1f 90       	pop	r1
 e8c:	18 95       	reti

00000e8e <init_usart>:
unsigned char rs232writeP = 0;
/*****************************************************/
void init_usart(void)
{
	UBRR0H = 0;
 e8e:	10 92 c5 00 	sts	0x00C5, r1
	UBRR0L = 51;//8M晶体
 e92:	83 e3       	ldi	r24, 0x33	; 51
 e94:	80 93 c4 00 	sts	0x00C4, r24
	UCSR0C = 0x06;//数据位8位
 e98:	86 e0       	ldi	r24, 0x06	; 6
 e9a:	80 93 c2 00 	sts	0x00C2, r24
	UCSR0A = 0x00;
 e9e:	10 92 c0 00 	sts	0x00C0, r1
	UCSR0B = 0x90;//使能接收
 ea2:	80 e9       	ldi	r24, 0x90	; 144
 ea4:	80 93 c1 00 	sts	0x00C1, r24
 ea8:	08 95       	ret

00000eaa <__vector_18>:
}

/*****************************************************/
ISR(USART_RX_vect)
{
 eaa:	1f 92       	push	r1
 eac:	0f 92       	push	r0
 eae:	0f b6       	in	r0, 0x3f	; 63
 eb0:	0f 92       	push	r0
 eb2:	11 24       	eor	r1, r1
 eb4:	8f 93       	push	r24
 eb6:	9f 93       	push	r25
 eb8:	ef 93       	push	r30
 eba:	ff 93       	push	r31
	rs232revbuf[rs232writeP]=UDR0;
 ebc:	90 91 00 01 	lds	r25, 0x0100
 ec0:	e9 2f       	mov	r30, r25
 ec2:	ff 27       	eor	r31, r31
 ec4:	eb 5f       	subi	r30, 0xFB	; 251
 ec6:	fe 4f       	sbci	r31, 0xFE	; 254
 ec8:	80 91 c6 00 	lds	r24, 0x00C6
 ecc:	80 83       	st	Z, r24
	if(rs232writeP >= RSrevmax)rs232writeP = 0;
 ece:	9a 30       	cpi	r25, 0x0A	; 10
 ed0:	18 f0       	brcs	.+6      	; 0xed8 <__vector_18+0x2e>
 ed2:	10 92 00 01 	sts	0x0100, r1
 ed6:	03 c0       	rjmp	.+6      	; 0xede <__vector_18+0x34>
	else rs232writeP++;
 ed8:	9f 5f       	subi	r25, 0xFF	; 255
 eda:	90 93 00 01 	sts	0x0100, r25
 ede:	ff 91       	pop	r31
 ee0:	ef 91       	pop	r30
 ee2:	9f 91       	pop	r25
 ee4:	8f 91       	pop	r24
 ee6:	0f 90       	pop	r0
 ee8:	0f be       	out	0x3f, r0	; 63
 eea:	0f 90       	pop	r0
 eec:	1f 90       	pop	r1
 eee:	18 95       	reti

00000ef0 <__vector_20>:
}

/*****************************************************/
ISR(USART_TX_vect)
{
 ef0:	1f 92       	push	r1
 ef2:	0f 92       	push	r0
 ef4:	0f b6       	in	r0, 0x3f	; 63
 ef6:	0f 92       	push	r0
 ef8:	11 24       	eor	r1, r1
 efa:	0f 90       	pop	r0
 efc:	0f be       	out	0x3f, r0	; 63
 efe:	0f 90       	pop	r0
 f00:	1f 90       	pop	r1
 f02:	18 95       	reti

00000f04 <send_com>:
}

/*****************************************************/
void send_com(unsigned char data)
{
	UDR0 = data;
 f04:	80 93 c6 00 	sts	0x00C6, r24
	UCSR0B = UCSR0B | 0x08;//发送数据
 f08:	80 91 c1 00 	lds	r24, 0x00C1
 f0c:	88 60       	ori	r24, 0x08	; 8
 f0e:	80 93 c1 00 	sts	0x00C1, r24
 f12:	08 95       	ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -