📄 1602test.lss
字号:
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 + -