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

📄 main.lss

📁 用AVR单片机对LCD12864液晶操作源程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         00001450  00800100  000009dc  00000a50  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         000009dc  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .stab         00000414  00000000  00000000  00001ea0  2**2
                  CONTENTS, READONLY, DEBUGGING
  3 .stabstr      00000071  00000000  00000000  000022b4  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_aranges 00000040  00000000  00000000  00002325  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_pubnames 000000d1  00000000  00000000  00002365  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_info   00001586  00000000  00000000  00002436  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_abbrev 000002ee  00000000  00000000  000039bc  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_line   00000b00  00000000  00000000  00003caa  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_frame  00000080  00000000  00000000  000047ac  2**2
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    000001ee  00000000  00000000  0000482c  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_loc    00000f5c  00000000  00000000  00004a1a  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 46 00 	jmp	0x8c	; 0x8c <__ctors_end>
   4:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
   8:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
   c:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  10:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  14:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  18:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  1c:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  20:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  24:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  28:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  2c:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  30:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  34:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  38:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  3c:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  40:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  44:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  48:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  4c:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  50:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  54:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  58:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  5c:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  60:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  64:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  68:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  6c:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  70:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  74:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  78:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  7c:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  80:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  84:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>
  88:	0c 94 65 00 	jmp	0xca	; 0xca <__bad_interrupt>

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:	15 e1       	ldi	r17, 0x15	; 21
  9a:	a0 e0       	ldi	r26, 0x00	; 0
  9c:	b1 e0       	ldi	r27, 0x01	; 1
  9e:	ec ed       	ldi	r30, 0xDC	; 220
  a0:	f9 e0       	ldi	r31, 0x09	; 9
  a2:	00 e0       	ldi	r16, 0x00	; 0
  a4:	0b bf       	out	0x3b, r16	; 59
  a6:	02 c0       	rjmp	.+4      	; 0xac <__do_copy_data+0x14>
  a8:	07 90       	elpm	r0, Z+
  aa:	0d 92       	st	X+, r0
  ac:	a0 35       	cpi	r26, 0x50	; 80
  ae:	b1 07       	cpc	r27, r17
  b0:	d9 f7       	brne	.-10     	; 0xa8 <__do_copy_data+0x10>

000000b2 <__do_clear_bss>:
  b2:	15 e1       	ldi	r17, 0x15	; 21
  b4:	a0 e5       	ldi	r26, 0x50	; 80
  b6:	b5 e1       	ldi	r27, 0x15	; 21
  b8:	01 c0       	rjmp	.+2      	; 0xbc <.do_clear_bss_start>

000000ba <.do_clear_bss_loop>:
  ba:	1d 92       	st	X+, r1

000000bc <.do_clear_bss_start>:
  bc:	a0 35       	cpi	r26, 0x50	; 80
  be:	b1 07       	cpc	r27, r17
  c0:	e1 f7       	brne	.-8      	; 0xba <.do_clear_bss_loop>
  c2:	0e 94 67 00 	call	0xce	; 0xce <main>
  c6:	0c 94 ed 04 	jmp	0x9da	; 0x9da <_exit>

000000ca <__bad_interrupt>:
  ca:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

000000ce <main>:
#include"type.h"


int  main(void)
{	
  ce:	ef 92       	push	r14
  d0:	0f 93       	push	r16
  d2:	1f 93       	push	r17
  d4:	cf 93       	push	r28
  d6:	df 93       	push	r29
     UINT j=0;
	 LCD12864_DataPort_DIR=0XFF;
  d8:	8f ef       	ldi	r24, 0xFF	; 255
  da:	81 bb       	out	0x11, r24	; 17
	 LCD12864_CONPort_DIR=0XFF;
  dc:	84 bb       	out	0x14, r24	; 20
	 Lcd12864_Init();
  de:	0e 94 09 01 	call	0x212	; 0x212 <Lcd12864_Init>
     
	 //Write_lcd12864_Data( /*字号设置*/12 /*X*/,16,/*页设置*/0,/*列设置*/0,/*显示内容设置*/"激情创造",/*左右半屏设置*/0);
	 //Write_lcd12864_Data( /*字号设置*/12 /*X*/,16,/*页设置*/0,/*列设置*/0,/*显示内容设置*/"精彩无限",/*左右半屏设置*/1);
	
	 //Write_lcd12864_Data( /*字号设置*/16 /*X*/,16,/*页设置*/0,/*列设置*/0,/*显示内容设置*/"星雨天空",/*左右半屏设置*/0);

	 // Write_lcd12864_Data( /*字号设置*/8 /*X*/,16,/*页设置*/4,/*列设置*/0,/*显示内容设置*/"01234567",/*左右半屏设置*/1);
	 // Write_lcd12864_Data( /*字号设置*/8 /*X*/,16,/*页设置*/6,/*列设置*/0,/*显示内容设置*/"(89ABC)",/*左右半屏设置*/0);
	  //Write_lcd12864_Data( /*字号设置*/5 /*X*/,8,/*页设置*/2,/*列设置*/0,/*显示内容设置*/"0234567",/*左右半屏设置*/0);
	 
	//	Write_lcd12864_Data( /*字号设置*/100 /*X*/,48,/*页设置*/1,/*列设置*/8,/*显示内容设置*/"图",/*左右半屏设置*/0);
	 	
	Write_lcd12864_Data( /*字号设置*/128 /*X*/,64,/*页设置*/0,/*列设置*/0,/*显示内容设置*/"竞",/*左右半屏设置*/0);
  e2:	ee 24       	eor	r14, r14
  e4:	00 e0       	ldi	r16, 0x00	; 0
  e6:	11 e0       	ldi	r17, 0x01	; 1
  e8:	20 e0       	ldi	r18, 0x00	; 0
  ea:	40 e0       	ldi	r20, 0x00	; 0
  ec:	60 e4       	ldi	r22, 0x40	; 64
  ee:	80 e8       	ldi	r24, 0x80	; 128
  f0:	0e 94 40 01 	call	0x280	; 0x280 <Write_lcd12864_Data>
  f4:	c0 e0       	ldi	r28, 0x00	; 0
  f6:	d0 e0       	ldi	r29, 0x00	; 0
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  f8:	80 e0       	ldi	r24, 0x00	; 0
  fa:	90 e0       	ldi	r25, 0x00	; 0
  fc:	fc 01       	movw	r30, r24
  fe:	31 97       	sbiw	r30, 0x01	; 1
 100:	f1 f7       	brne	.-4      	; 0xfe <main+0x30>
	
	 //Write_lcd12864_Data( /*字号设置*/128 /*X*/,64,/*页设置*/0,/*列设置*/0,/*显示内容设置*/ "单",  /*左右半屏设置*/0);
	
	//while(1);
	 
	 while(1)
		{ 
		_delay_ms(1000);
		_delay_ms(1000);
 		Write_lcd12864_Order(j|0xc0,0);
 102:	01 97       	sbiw	r24, 0x01	; 1
 104:	f1 f7       	brne	.-4      	; 0x102 <main+0x34>
 106:	ce 01       	movw	r24, r28
 108:	80 6c       	ori	r24, 0xC0	; 192
 10a:	18 2f       	mov	r17, r24
 10c:	60 e0       	ldi	r22, 0x00	; 0
 10e:	0e 94 b5 00 	call	0x16a	; 0x16a <Write_lcd12864_Order>
	
 		Write_lcd12864_Order(j|0xc0,1);
 112:	61 e0       	ldi	r22, 0x01	; 1
 114:	81 2f       	mov	r24, r17
 116:	0e 94 b5 00 	call	0x16a	; 0x16a <Write_lcd12864_Order>
		

		j++;
 11a:	21 96       	adiw	r28, 0x01	; 1
		if(j==64)
 11c:	c0 34       	cpi	r28, 0x40	; 64
 11e:	d1 05       	cpc	r29, r1
 120:	59 f7       	brne	.-42     	; 0xf8 <main+0x2a>
 122:	e8 cf       	rjmp	.-48     	; 0xf4 <main+0x26>

00000124 <Is_lcd12864_busy>:

//读状态:输入:D/I=L,CS1或CS2=H,R/W=H,E=H 输出:D0--D7=状态字
//********************************************************
void Is_lcd12864_busy(UCHAR right)
{
 124:	11 ba       	out	0x11, r1	; 17
	
	LCD12864_DataPort_DIR=0X00;   
	LCD12864_DataPort=0xff;
 126:	9f ef       	ldi	r25, 0xFF	; 255
 128:	92 bb       	out	0x12, r25	; 18
	CLR_LCD_EN;
 12a:	aa 98       	cbi	0x15, 2	; 21
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 12c:	94 e0       	ldi	r25, 0x04	; 4
 12e:	9a 95       	dec	r25
 130:	f1 f7       	brne	.-4      	; 0x12e <Is_lcd12864_busy+0xa>
	_delay_us(2);
	CLR_LCD_DI;
 132:	a8 98       	cbi	0x15, 0	; 21
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 134:	92 e0       	ldi	r25, 0x02	; 2
 136:	9a 95       	dec	r25
 138:	f1 f7       	brne	.-4      	; 0x136 <Is_lcd12864_busy+0x12>
   	_delay_us(1);
	if(1==right)
 13a:	81 30       	cpi	r24, 0x01	; 1
 13c:	19 f4       	brne	.+6      	; 0x144 <Is_lcd12864_busy+0x20>
	 {
		CLR_LCD_CS1;
 13e:	ab 98       	cbi	0x15, 3	; 21
		SET_LCD_CS2;
 140:	ac 9a       	sbi	0x15, 4	; 21
 142:	02 c0       	rjmp	.+4      	; 0x148 <Is_lcd12864_busy+0x24>
		
	 }
	else //左半平面 
	{
		
		SET_LCD_CS1;
 144:	ab 9a       	sbi	0x15, 3	; 21
		CLR_LCD_CS2;
 146:	ac 98       	cbi	0x15, 4	; 21
	}
	SET_LCD_RW;
 148:	a9 9a       	sbi	0x15, 1	; 21
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 14a:	82 e0       	ldi	r24, 0x02	; 2
 14c:	8a 95       	dec	r24
 14e:	f1 f7       	brne	.-4      	; 0x14c <Is_lcd12864_busy+0x28>
	_delay_us(1);
    SET_LCD_EN;
 150:	aa 9a       	sbi	0x15, 2	; 21
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 152:	84 e0       	ldi	r24, 0x04	; 4
 154:	8a 95       	dec	r24
 156:	f1 f7       	brne	.-4      	; 0x154 <Is_lcd12864_busy+0x30>
	_delay_us(2); 
	while(LCD12864_IP_DataPort & BUSY);
 158:	87 99       	sbic	0x10, 7	; 16
 15a:	fe cf       	rjmp	.-4      	; 0x158 <Is_lcd12864_busy+0x34>
//	{
//	DDRA=0XFF;
//	PORTA=0XFF;
//	}
	CLR_LCD_EN;
 15c:	aa 98       	cbi	0x15, 2	; 21
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 15e:	85 ef       	ldi	r24, 0xF5	; 245
 160:	8a 95       	dec	r24
 162:	f1 f7       	brne	.-4      	; 0x160 <Is_lcd12864_busy+0x3c>
	_delay_us(100);
//	PORTA=0X00;
	LCD12864_DataPort_DIR=0XFF;
 164:	8f ef       	ldi	r24, 0xFF	; 255
 166:	81 bb       	out	0x11, r24	; 17
 168:	08 95       	ret

0000016a <Write_lcd12864_Order>:
}
//********************************************************
// 写控制志
//写控制志:输入:D/I=L,CS1或CS2=H,R/W=L,E=H D0--D7=指令码,E=L
//********************************************************
void Write_lcd12864_Order(UCHAR order,UCHAR right)
{
 16a:	1f 93       	push	r17
 16c:	18 2f       	mov	r17, r24
 16e:	86 2f       	mov	r24, r22
	
	Is_lcd12864_busy(right);
 170:	0e 94 92 00 	call	0x124	; 0x124 <Is_lcd12864_busy>
	CLR_LCD_EN;
 174:	aa 98       	cbi	0x15, 2	; 21
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 176:	94 e0       	ldi	r25, 0x04	; 4
 178:	89 2f       	mov	r24, r25
 17a:	8a 95       	dec	r24
 17c:	f1 f7       	brne	.-4      	; 0x17a <Write_lcd12864_Order+0x10>
	_delay_us(2); 
    CLR_LCD_DI;
 17e:	a8 98       	cbi	0x15, 0	; 21
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 180:	82 e0       	ldi	r24, 0x02	; 2
 182:	28 2f       	mov	r18, r24
 184:	2a 95       	dec	r18
 186:	f1 f7       	brne	.-4      	; 0x184 <Write_lcd12864_Order+0x1a>
	_delay_us(1);
    CLR_LCD_RW;
 188:	a9 98       	cbi	0x15, 1	; 21
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 18a:	8a 95       	dec	r24
 18c:	f1 f7       	brne	.-4      	; 0x18a <Write_lcd12864_Order+0x20>
	_delay_us(1);
	LCD12864_DataPort=order;
 18e:	12 bb       	out	0x12, r17	; 18
    SET_LCD_EN;
 190:	aa 9a       	sbi	0x15, 2	; 21
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 192:	89 2f       	mov	r24, r25
 194:	8a 95       	dec	r24
 196:	f1 f7       	brne	.-4      	; 0x194 <Write_lcd12864_Order+0x2a>
	 _delay_us(2);  
	CLR_LCD_EN;
 198:	aa 98       	cbi	0x15, 2	; 21
*/
void
_delay_loop_1(uint8_t __count)
{
	__asm__ volatile (
 19a:	9a 95       	dec	r25
 19c:	f1 f7       	brne	.-4      	; 0x19a <Write_lcd12864_Order+0x30>
 19e:	1f 91       	pop	r17
 1a0:	08 95       	ret

000001a2 <Clearscreen>:
	 _delay_us(2); 
//order=
		//0x3e//显示开/关	 //on=on|3e	 (0——1)						
		//0xc0//起始行地址为0//x=x|c0    (0——63)
		//0xb8//起始页地址为0//ye=ye|b8  (0——7)
		//0x40//起始列地址为0//y=y|40   (0——63)	
}

//********************************************************
// 写数据
//写数据:输入:D/I=H,CS1或CS2=H,R/W=L,E=H D0--D7=数据,E=L
//********************************************************
void Write_lcd12864_Data(/*字号设置*/UCHAR H /*X*/,UCHAR L,/*页设置*/UCHAR page,/*列设置*/UCHAR y,/*显示内容设置*/char  hz[],/*左右半屏设置*/UCHAR right)
{
	UCHAR i,ki,j;
	UCHAR len;
	 UINT k;
	 char *p1;
	
	
	
//**************************************************************	
	

len=strlen(hz);	 	//取输入字符串的长度									
if(8>=H)			//判断字体大小
for(ki=0;ki<len;ki++)
{
   p1=&hz[ki];								//取出传送的字符(一个一个的取)				  

//*************************************************************
switch(H)					  
{
	//*************************************************************	
  case 5:									 //5*8
	 {
	for(k=0;k<sizeof(ASC_5)/sizeof(ASC_5[0]);k++)		 //取出字库的长度
	{
		 												 //找出对应字符
		if(p1[0] == ASC_5[k].Index[0] )					 
		
			break;

⌨️ 快捷键说明

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