📄 main.lss
字号:
1f8: 80 e3 ldi r24, 0x30 ; 48
1fa: 0e 94 cc 00 call 0x198
lcm12864_wirte_cmd(0x01); //清除显示
1fe: 81 e0 ldi r24, 0x01 ; 1
200: 0e 94 cc 00 call 0x198
lcm12864_wirte_cmd(0x0C); //显示开,关光标不闪烁
204: 8c e0 ldi r24, 0x0C ; 12
206: 0e 94 cc 00 call 0x198
lcm12864_wirte_cmd(0x06); //设置输入模式
20a: 86 e0 ldi r24, 0x06 ; 6
20c: 0e 94 cc 00 call 0x198
210: 08 95 ret
00000212 <lcm12864_char_locate>:
}
//***************************************************************************************
//*名称: void lcm12864_char_locate(unsigned char x, unsigned char y ) *
//*功能: 字符显示定位(汉字和ASCII) *
//*参数: x水平列地址(0-7) y垂直行地址(0-3) *
//*返回: 无 *
//***************************************************************************************
void lcm12864_char_locate(unsigned char x, unsigned char y )
{
212: 28 2f mov r18, r24
214: 86 2f mov r24, r22
unsigned char dx=0; // DDRAM中的水平和垂直坐标
216: 30 e0 ldi r19, 0x00 ; 0
switch(y)
218: 99 27 eor r25, r25
21a: 81 30 cpi r24, 0x01 ; 1
21c: 91 05 cpc r25, r1
21e: 79 f0 breq .+30 ; 0x23e
220: 82 30 cpi r24, 0x02 ; 2
222: 91 05 cpc r25, r1
224: 1c f4 brge .+6 ; 0x22c
226: 89 2b or r24, r25
228: 39 f0 breq .+14 ; 0x238
22a: 11 c0 rjmp .+34 ; 0x24e
22c: 82 30 cpi r24, 0x02 ; 2
22e: 91 05 cpc r25, r1
230: 49 f0 breq .+18 ; 0x244
232: 03 97 sbiw r24, 0x03 ; 3
234: 51 f0 breq .+20 ; 0x24a
236: 0b c0 rjmp .+22 ; 0x24e
{
case 0:
{
dx=x+0x80;
238: 32 2f mov r19, r18
23a: 30 58 subi r19, 0x80 ; 128
break;
23c: 08 c0 rjmp .+16 ; 0x24e
}
case 1:
{
dx=x+0x90;
23e: 32 2f mov r19, r18
240: 30 57 subi r19, 0x70 ; 112
break;
242: 05 c0 rjmp .+10 ; 0x24e
}
case 2:
{
dx=x+0x88;
244: 32 2f mov r19, r18
246: 38 57 subi r19, 0x78 ; 120
break;
248: 02 c0 rjmp .+4 ; 0x24e
}
case 3:
{
dx=x+0x98;
24a: 32 2f mov r19, r18
24c: 38 56 subi r19, 0x68 ; 104
break;
}
}
lcm12864_wirte_cmd(dx);
24e: 83 2f mov r24, r19
250: 0e 94 cc 00 call 0x198
254: 08 95 ret
00000256 <lcm12864_dis_ascii>:
}
//***************************************************************************************
//*名称: lcm12864_dis_ascii(unsigned char ascii_code) *
//*功能: 显示一个ASCII字符 *
//*参数: ascii_code 显示的ASCII代码 *
//*返回: 无 *
//***************************************************************************************
void lcm12864_dis_ascii(unsigned char ascii_code)
{
lcm12864_wirte_data(ascii_code);
256: 0e 94 e3 00 call 0x1c6
25a: 08 95 ret
0000025c <lcm12864_dis_string>:
}
//***********************************************************************************************************************
//*名称: lcm12864_dis_string (unsigned char x, unsigned char y, unsigned char *ptr,unsigned int speed) *
//*功能: 显示一个字符 *
//*参数: x 水平列地址(0-7) y 垂直行地址(0-3) *ptr 字符串指针 *
//*返回:无 *
//***********************************************************************************************************************
void lcm12864_dis_string (unsigned char x, unsigned char y, unsigned char *ptr,unsigned int speed)
{
25c: 0f 93 push r16
25e: 1f 93 push r17
260: cf 93 push r28
262: df 93 push r29
264: ea 01 movw r28, r20
266: 89 01 movw r16, r18
lcm12864_char_locate(x,y); // 定位字符的起点在DDRAM中的位置
268: 0e 94 09 01 call 0x212
while (*ptr)
{
lcm12864_wirte_data(*ptr++);
delay_nms(speed);
26c: 88 81 ld r24, Y
26e: 88 23 and r24, r24
270: 49 f0 breq .+18 ; 0x284
272: 89 91 ld r24, Y+
274: 0e 94 e3 00 call 0x1c6
278: c8 01 movw r24, r16
27a: 0e 94 b4 00 call 0x168
27e: 88 81 ld r24, Y
280: 88 23 and r24, r24
282: b9 f7 brne .-18 ; 0x272
284: df 91 pop r29
286: cf 91 pop r28
288: 1f 91 pop r17
28a: 0f 91 pop r16
28c: 08 95 ret
0000028e <lcm12864_draw_locate>:
}
}
//*******************************************************************************************************
//*名称: lcm12864_draw_locate (unsigned char x,unsigned char y) *
//*功能: 绘图模式GDRAM定位 *
//*参数: x水平列地址(0-127) y垂直行地址(0-63) *
//*返回: 无 *
//*******************************************************************************************************
void lcm12864_draw_locate (unsigned char x,unsigned char y)
{
28e: 0f 93 push r16
290: 1f 93 push r17
292: 08 2f mov r16, r24
294: 16 2f mov r17, r22
lcm12864_wirte_cmd(0x34);
296: 84 e3 ldi r24, 0x34 ; 52
298: 0e 94 cc 00 call 0x198
lcm12864_wirte_cmd(y); // 垂直地址
29c: 81 2f mov r24, r17
29e: 0e 94 cc 00 call 0x198
lcm12864_wirte_cmd(x); // 水平地址
2a2: 80 2f mov r24, r16
2a4: 0e 94 cc 00 call 0x198
lcm12864_wirte_cmd(0x30);
2a8: 80 e3 ldi r24, 0x30 ; 48
2aa: 0e 94 cc 00 call 0x198
2ae: 1f 91 pop r17
2b0: 0f 91 pop r16
2b2: 08 95 ret
000002b4 <lcm12864_string_negative>:
}
//*******************************************************************************************************
//*名称: lcm12864_string_negative(unsigned char x,unsigned char y,unsigned char with) *
//*功能: 字符串反白显示 可以反白半宽的ASCII码字符 *
//*参数: x水平列地址(0-15) y垂直行地址(0-3) *
//*返回: 无 *
//*******************************************************************************************************
void lcm12864_string_negative(unsigned char x,unsigned char y,unsigned char with)
{
2b4: cf 92 push r12
2b6: df 92 push r13
2b8: ef 92 push r14
2ba: ff 92 push r15
2bc: 0f 93 push r16
2be: 1f 93 push r17
2c0: cf 93 push r28
2c2: c8 2f mov r28, r24
2c4: f6 2e mov r15, r22
2c6: e4 2e mov r14, r20
unsigned char temp1,temp2;
unsigned int dot_data;
if(x%2==1) // 初始化写入点数据
2c8: 80 ff sbrs r24, 0
2ca: 04 c0 rjmp .+8 ; 0x2d4
{
dot_data=0x00FF;
2cc: ef ef ldi r30, 0xFF ; 255
2ce: ce 2e mov r12, r30
2d0: d1 2c mov r13, r1
2d2: 03 c0 rjmp .+6 ; 0x2da
}
else
{
dot_data=0xFF00;
2d4: c1 2c mov r12, r1
2d6: 7f ef ldi r23, 0xFF ; 255
2d8: d7 2e mov r13, r23
}
x=0x80+x/2; // 绘图GDRAM水平地址
2da: 2c 2f mov r18, r28
2dc: 26 95 lsr r18
2de: c2 2f mov r28, r18
2e0: c0 58 subi r28, 0x80 ; 128
switch(y) // 转换成DDRAM坐标
2e2: 8f 2d mov r24, r15
2e4: 99 27 eor r25, r25
2e6: 81 30 cpi r24, 0x01 ; 1
2e8: 91 05 cpc r25, r1
2ea: 79 f0 breq .+30 ; 0x30a
2ec: 82 30 cpi r24, 0x02 ; 2
2ee: 91 05 cpc r25, r1
2f0: 1c f4 brge .+6 ; 0x2f8
2f2: 89 2b or r24, r25
2f4: 39 f0 breq .+14 ; 0x304
2f6: 13 c0 rjmp .+38 ; 0x31e
2f8: 82 30 cpi r24, 0x02 ; 2
2fa: 91 05 cpc r25, r1
2fc: 49 f0 breq .+18 ; 0x310
2fe: 03 97 sbiw r24, 0x03 ; 3
300: 51 f0 breq .+20 ; 0x316
302: 0d c0 rjmp .+26 ; 0x31e
{
case 0:
{
y=0x80;
304: 60 e8 ldi r22, 0x80 ; 128
306: f6 2e mov r15, r22
break;
308: 0a c0 rjmp .+20 ; 0x31e
}
case 1:
{
y=0x90;
30a: 50 e9 ldi r21, 0x90 ; 144
30c: f5 2e mov r15, r21
break;
30e: 07 c0 rjmp .+14 ; 0x31e
}
case 2:
{
y=0x80;
310: 40 e8 ldi r20, 0x80 ; 128
312: f4 2e mov r15, r20
314: 02 c0 rjmp .+4 ; 0x31a
x+=8;
break;
}
case 3:
{
y=0x90;
316: 30 e9 ldi r19, 0x90 ; 144
318: f3 2e mov r15, r19
x+=8;
31a: c2 2f mov r28, r18
31c: c8 57 subi r28, 0x78 ; 120
break;
}
}
if(dot_data==0x00FF) // 反白起点为半个水平地址的字符
31e: 8f ef ldi r24, 0xFF ; 255
320: c8 16 cp r12, r24
322: d1 04 cpc r13, r1
324: 99 f4 brne .+38 ; 0x34c
{
for(temp1=0;temp1<16;temp1++)
326: 10 e0 ldi r17, 0x00 ; 0
{
lcm12864_draw_locate(x,y+temp1); // 写绘图资料地址,先写垂直地址,再写水平地址
328: 8f 2d mov r24, r15
32a: 81 0f add r24, r17
32c: 68 2f mov r22, r24
32e: 8c 2f mov r24, r28
330: 0e 94 47 01 call 0x28e
lcm12864_wirte_data((char)(dot_data/256)); // 连续写入两个字节的数据到绘图资料
334: 80 e0 ldi r24, 0x00 ; 0
336: 0e 94 e3 00 call 0x1c6
lcm12864_wirte_data((char)(dot_data%256));
33a: 8f ef ldi r24, 0xFF ; 255
33c: 0e 94 e3 00 call 0x1c6
340: 1f 5f subi r17, 0xFF ; 255
342: 10 31 cpi r17, 0x10 ; 16
344: 88 f3 brcs .-30 ; 0x328
}
with--;
346: ea 94 dec r14
if(with==0) // 如果达到反白宽度则退出
348: f1 f0 breq .+60 ; 0x386
{
lcm12864_wirte_cmd(0x36);
lcm12864_wirte_cmd(0x30);
return;
}
x++; // 水平坐标增加
34a: cf 5f subi r28, 0xFF ; 255
}
for(temp1=0;temp1<16;temp1++) // 反白剩余宽度的字符
34c: 10 e0 ldi r17, 0x00 ; 0
{
dot_data=0xFF00;
34e: c1 2c mov r12, r1
350: 2f ef ldi r18, 0xFF ; 255
352: d2 2e mov r13, r18
for(temp2=0;temp2<with;temp2++)
354: 00 e0 ldi r16, 0x00 ; 0
356: 0e 15 cp r16, r14
358: 98 f4 brcc .+38 ; 0x380
{
lcm12864_draw_locate(x+temp2/2,y+temp1); // 写绘图资料地址,先写垂直地址,再写水平地址
35a: 80 2f mov r24, r16
35c: 86 95 lsr r24
35e: 6f 2d mov r22, r15
360: 61 0f add r22, r17
362: 8c 0f add r24, r28
364: 0e 94 47 01 call 0x28e
lcm12864_wirte_data((char)(dot_data/256)); // 连续写入两个字节的数据到绘图资料
368: 8d 2d mov r24, r13
36a: 99 27 eor r25, r25
36c: 0e 94 e3 00 call 0x1c6
lcm12864_wirte_data((char)(dot_data%256));
370: 8c 2d mov r24, r12
372: 0e 94 e3 00 call 0x1c6
dot_data|=~dot_data;
376: 8f ef ldi r24, 0xFF ; 255
378: c8 2e mov r12, r24
37a: d8 2e mov r13, r24
37c: 0f 5f subi r16, 0xFF ; 255
37e: eb cf rjmp .-42 ; 0x356
380: 1f 5f subi r17, 0xFF ; 255
382: 10 31 cpi r17, 0x10 ; 16
384: 20 f3 brcs .-56 ; 0x34e
}
}
lcm12864_wirte_cmd(0x36); // 打开绘图显示
386: 86 e3 ldi r24, 0x36 ; 54
388: 0e 94 cc 00 call 0x198
lcm12864_wirte_cmd(0x30);
38c: 80 e3 ldi r24, 0x30 ; 48
38e: 0e 94 cc 00 call 0x198
392: cf 91 pop r28
394: 1f 91 pop r17
396: 0f 91 pop r16
398: ff 90 pop r15
39a: ef 90 pop r14
39c: df 90 pop r13
39e: cf 90 pop r12
3a0: 08 95 ret
000003a2 <lcm12864_dis_dot>:
}
//*******************************************************************************************************
//*名称: lcm12864_dis_dot(unsigned char x,unsigned char y,const unsigned char *prt) *
//*功能: 显示16*16点阵
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -