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

📄 1602test.lss

📁 avr单片机编写的1602液晶显示屏程序
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 164:	88 e2       	ldi	r24, 0x28	; 40
 166:	0e 94 59 00 	call	0xb2	; 0xb2 <LCD_write>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 16a:	c8 01       	movw	r24, r16
 16c:	01 97       	sbiw	r24, 0x01	; 1
 16e:	f1 f7       	brne	.-4      	; 0x16c <LCD_init+0x54>
	
	
	LCD_write(0x28,0);      //4bit Display  
    _delay_ms(1); 
    LCD_write(0x08,0);      // 显示关闭  
 170:	60 e0       	ldi	r22, 0x00	; 0
 172:	88 e0       	ldi	r24, 0x08	; 8
 174:	0e 94 59 00 	call	0xb2	; 0xb2 <LCD_write>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 178:	c8 01       	movw	r24, r16
 17a:	01 97       	sbiw	r24, 0x01	; 1
 17c:	f1 f7       	brne	.-4      	; 0x17a <LCD_init+0x62>
    _delay_ms(1); 
    LCD_write(0x08,0);      // 显示关闭  
    _delay_ms(1); 
        
    LCD_write(0x01,0);      // 显示清屏   
 17e:	60 e0       	ldi	r22, 0x00	; 0
 180:	81 e0       	ldi	r24, 0x01	; 1
 182:	0e 94 59 00 	call	0xb2	; 0xb2 <LCD_write>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 186:	c8 01       	movw	r24, r16
 188:	01 97       	sbiw	r24, 0x01	; 1
 18a:	f1 f7       	brne	.-4      	; 0x188 <LCD_init+0x70>
        
    LCD_write(0x01,0);      // 显示清屏   
    _delay_ms(1); 
         
    LCD_write(0x06,0);      // 显示光标移动设置  
 18c:	60 e0       	ldi	r22, 0x00	; 0
 18e:	86 e0       	ldi	r24, 0x06	; 6
 190:	0e 94 59 00 	call	0xb2	; 0xb2 <LCD_write>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 194:	c8 01       	movw	r24, r16
 196:	01 97       	sbiw	r24, 0x01	; 1
 198:	f1 f7       	brne	.-4      	; 0x196 <LCD_init+0x7e>
         
    LCD_write(0x06,0);      // 显示光标移动设置  
    _delay_ms(1);         
         
    LCD_write(0x0c,0);     // 显示开及光标设置  
 19a:	60 e0       	ldi	r22, 0x00	; 0
 19c:	8c e0       	ldi	r24, 0x0C	; 12
 19e:	0e 94 59 00 	call	0xb2	; 0xb2 <LCD_write>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 1a2:	8c e4       	ldi	r24, 0x4C	; 76
 1a4:	9d e1       	ldi	r25, 0x1D	; 29
 1a6:	01 97       	sbiw	r24, 0x01	; 1
 1a8:	f1 f7       	brne	.-4      	; 0x1a6 <LCD_init+0x8e>
 1aa:	1f 91       	pop	r17
 1ac:	0f 91       	pop	r16
 1ae:	08 95       	ret

000001b0 <LCD_set_xy>:
        LCD第一行显示寄存器地址:0X80-0X8F  
        LCD第一行显示寄存器地址:0XC0-0XCF 	
-------------------------------------------------------*/
void LCD_set_xy(uint8_t x,uint8_t y)
{
 1b0:	66 23       	and	r22, r22
 1b2:	11 f4       	brne	.+4      	; 0x1b8 <LCD_set_xy+0x8>
   uint8_t address;  
    if (y == 0) 
		address = 0x80 + x; //第一行显示 
 1b4:	80 58       	subi	r24, 0x80	; 128
 1b6:	01 c0       	rjmp	.+2      	; 0x1ba <LCD_set_xy+0xa>
    else   
        address = 0xc0 + x; //第二行显示 
 1b8:	80 54       	subi	r24, 0x40	; 64
    LCD_write( address, 0 ); 
 1ba:	60 e0       	ldi	r22, 0x00	; 0
 1bc:	0e 94 59 00 	call	0xb2	; 0xb2 <LCD_write>
 1c0:	08 95       	ret

000001c2 <LCD_write_string>:
}
 
/*-------------------------------------------------------
void LCD_write_string(uint8_t x,uint8_t y,char *s)
说明: 英文字符串显示函数  
       输入参数:*s(英文字符串指)  
        X、Y    : 显示字符串的位置 
---------------------------------------------------------*/ 
void LCD_write_string(uint8_t x,uint8_t y,char *s)
{
 1c2:	cf 93       	push	r28
 1c4:	df 93       	push	r29
 1c6:	ea 01       	movw	r28, r20
    LCD_set_xy( x, y );  
 1c8:	0e 94 d8 00 	call	0x1b0	; 0x1b0 <LCD_set_xy>
 1cc:	04 c0       	rjmp	.+8      	; 0x1d6 <LCD_write_string+0x14>
    while (*s)   
    {  
        LCD_write( 0, *s );  
 1ce:	80 e0       	ldi	r24, 0x00	; 0
 1d0:	0e 94 59 00 	call	0xb2	; 0xb2 <LCD_write>
        s ++;  
 1d4:	21 96       	adiw	r28, 0x01	; 1
 1d6:	68 81       	ld	r22, Y
 1d8:	66 23       	and	r22, r22
 1da:	c9 f7       	brne	.-14     	; 0x1ce <LCD_write_string+0xc>
 1dc:	df 91       	pop	r29
 1de:	cf 91       	pop	r28
 1e0:	08 95       	ret

000001e2 <LCD_self_def>:
    }  
}
/*-----------------------------------------------------------
void LCD_self_def(uint8_t add,uint8_t *table)
说明:把自定义的点阵符号数据写入CGRAM中
	1 ADD为数据的地址;
	2 table为相应的数据
-------------------------------------------------------------*/
void LCD_self_def(uint8_t add,uint8_t table[])
{
 1e2:	ef 92       	push	r14
 1e4:	ff 92       	push	r15
 1e6:	0f 93       	push	r16
 1e8:	1f 93       	push	r17
 1ea:	cf 93       	push	r28
 1ec:	df 93       	push	r29
 1ee:	e8 2e       	mov	r14, r24
 1f0:	eb 01       	movw	r28, r22
 1f2:	ff 24       	eor	r15, r15
 uint8_t i;

 for (i=0;i<8;i++)
  {
	LCD_write(add+i,0); // 设置自定义字符的 CGRAM 地址  
 1f4:	60 e0       	ldi	r22, 0x00	; 0
 1f6:	8e 2d       	mov	r24, r14
 1f8:	8f 0d       	add	r24, r15
 1fa:	0e 94 59 00 	call	0xb2	; 0xb2 <LCD_write>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 1fe:	04 ef       	ldi	r16, 0xF4	; 244
 200:	11 e0       	ldi	r17, 0x01	; 1
 202:	c8 01       	movw	r24, r16
 204:	01 97       	sbiw	r24, 0x01	; 1
 206:	f1 f7       	brne	.-4      	; 0x204 <LCD_self_def+0x22>
 for (i=0;i<8;i++)
  {
	LCD_write(add+i,0); // 设置自定义字符的 CGRAM 地址  
    _delay_ms(2);
    LCD_write(0,table[i]); // 向CGRAM写入自定义字符表的数据
 208:	69 91       	ld	r22, Y+
 20a:	80 e0       	ldi	r24, 0x00	; 0
 20c:	0e 94 59 00 	call	0xb2	; 0xb2 <LCD_write>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 210:	c8 01       	movw	r24, r16
 212:	01 97       	sbiw	r24, 0x01	; 1
 214:	f1 f7       	brne	.-4      	; 0x212 <LCD_self_def+0x30>
void LCD_self_def(uint8_t add,uint8_t table[])
{
 uint8_t i;

 for (i=0;i<8;i++)
 216:	f3 94       	inc	r15
 218:	98 e0       	ldi	r25, 0x08	; 8
 21a:	f9 16       	cp	r15, r25
 21c:	59 f7       	brne	.-42     	; 0x1f4 <LCD_self_def+0x12>
 21e:	df 91       	pop	r29
 220:	cf 91       	pop	r28
 222:	1f 91       	pop	r17
 224:	0f 91       	pop	r16
 226:	ff 90       	pop	r15
 228:	ef 90       	pop	r14
 22a:	08 95       	ret

0000022c <LCD_write_char>:
  {
	LCD_write(add+i,0); // 设置自定义字符的 CGRAM 地址  
    _delay_ms(2);
    LCD_write(0,table[i]); // 向CGRAM写入自定义字符表的数据
	_delay_ms(2);
  };
}

/*------------------------------------------------------------
void LCD_write_char(uint8_t x,uint8_t y,uint8_t c)
说明:向LCD写一个字符;
	x,y为坐标 ;c 为所写字符
--------------------------------------------------------------*/
void LCD_write_char(uint8_t x,uint8_t y,uint8_t c)
{
 22c:	1f 93       	push	r17
 22e:	14 2f       	mov	r17, r20
   LCD_set_xy(x,y );
 230:	0e 94 d8 00 	call	0x1b0	; 0x1b0 <LCD_set_xy>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 234:	84 ef       	ldi	r24, 0xF4	; 244
 236:	91 e0       	ldi	r25, 0x01	; 1
 238:	01 97       	sbiw	r24, 0x01	; 1
 23a:	f1 f7       	brne	.-4      	; 0x238 <LCD_write_char+0xc>
void LCD_write_char(uint8_t x,uint8_t y,uint8_t c)
{
   LCD_set_xy(x,y );
  _delay_ms(2); 
  LCD_write(0,c);
 23c:	61 2f       	mov	r22, r17
 23e:	80 e0       	ldi	r24, 0x00	; 0
 240:	0e 94 59 00 	call	0xb2	; 0xb2 <LCD_write>
 244:	1f 91       	pop	r17
 246:	08 95       	ret

00000248 <main>:
#include "1602.h"
#include "avr_m16.h"

int main(void)  
{  
 248:	0f 93       	push	r16
 24a:	1f 93       	push	r17
 24c:	cf 93       	push	r28
 24e:	df 93       	push	r29
 250:	cd b7       	in	r28, 0x3d	; 61
 252:	de b7       	in	r29, 0x3e	; 62
 254:	28 97       	sbiw	r28, 0x08	; 8
 256:	0f b6       	in	r0, 0x3f	; 63
 258:	f8 94       	cli
 25a:	de bf       	out	0x3e, r29	; 62
 25c:	0f be       	out	0x3f, r0	; 63
 25e:	cd bf       	out	0x3d, r28	; 61
 uint8_t table[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}; 
 260:	de 01       	movw	r26, r28
 262:	11 96       	adiw	r26, 0x01	; 1
 264:	ee e8       	ldi	r30, 0x8E	; 142
 266:	f0 e0       	ldi	r31, 0x00	; 0
 268:	88 e0       	ldi	r24, 0x08	; 8
 26a:	01 90       	ld	r0, Z+
 26c:	0d 92       	st	X+, r0
 26e:	81 50       	subi	r24, 0x01	; 1
 270:	e1 f7       	brne	.-8      	; 0x26a <main+0x22>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 272:	00 e0       	ldi	r16, 0x00	; 0
 274:	10 e0       	ldi	r17, 0x00	; 0
 276:	c8 01       	movw	r24, r16
 278:	01 97       	sbiw	r24, 0x01	; 1
 27a:	f1 f7       	brne	.-4      	; 0x278 <main+0x30>
 uint8_t tmp;
 tmp=0x40;
 _delay_ms(500); 
  DDRD = 0XFF;  
 27c:	8f ef       	ldi	r24, 0xFF	; 255
 27e:	81 bb       	out	0x11, r24	; 17
  DDRB = 0XFF; 
 280:	87 bb       	out	0x17, r24	; 23
  LCD_init();//初始化  
 282:	0e 94 8c 00 	call	0x118	; 0x118 <LCD_init>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 286:	88 ea       	ldi	r24, 0xA8	; 168
 288:	91 e6       	ldi	r25, 0x61	; 97
 28a:	01 97       	sbiw	r24, 0x01	; 1
 28c:	f1 f7       	brne	.-4      	; 0x28a <main+0x42>
  _delay_ms(100); 
  LCD_self_def(tmp,table); //写入自己定义的字符
 28e:	be 01       	movw	r22, r28
 290:	6f 5f       	subi	r22, 0xFF	; 255
 292:	7f 4f       	sbci	r23, 0xFF	; 255
 294:	80 e4       	ldi	r24, 0x40	; 64
 296:	0e 94 f1 00 	call	0x1e2	; 0x1e2 <LCD_self_def>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 29a:	c8 01       	movw	r24, r16
 29c:	01 97       	sbiw	r24, 0x01	; 1
 29e:	f1 f7       	brne	.-4      	; 0x29c <main+0x54>
  _delay_ms(500); 
  LCD_write_string(3,0,"lcd test");
 2a0:	40 e6       	ldi	r20, 0x60	; 96
 2a2:	50 e0       	ldi	r21, 0x00	; 0
 2a4:	60 e0       	ldi	r22, 0x00	; 0
 2a6:	83 e0       	ldi	r24, 0x03	; 3
 2a8:	0e 94 e1 00 	call	0x1c2	; 0x1c2 <LCD_write_string>
  LCD_write_string(0,1,"TODAY: -12");
 2ac:	49 e6       	ldi	r20, 0x69	; 105
 2ae:	50 e0       	ldi	r21, 0x00	; 0
 2b0:	61 e0       	ldi	r22, 0x01	; 1
 2b2:	80 e0       	ldi	r24, 0x00	; 0
 2b4:	0e 94 e1 00 	call	0x1c2	; 0x1c2 <LCD_write_string>
  LCD_write_char(11,1,0x00);//0x00 为第一个自己定义字符的地址
 2b8:	40 e0       	ldi	r20, 0x00	; 0
 2ba:	61 e0       	ldi	r22, 0x01	; 1
 2bc:	8b e0       	ldi	r24, 0x0B	; 11
 2be:	0e 94 16 01 	call	0x22c	; 0x22c <LCD_write_char>
 2c2:	ff cf       	rjmp	.-2      	; 0x2c2 <main+0x7a>

⌨️ 快捷键说明

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