📄 lcddrive.lst
字号:
990 0334 929A SBI 0x12,2
991
371:lcddrive.c ****
372:lcddrive.c **** LcdSendCommand(0x2b);//page address set
993 .LM156:
994 /* #NOAPP */
995 0336 8BE2 ldi r24,lo8(43)
996 0338 0E94 0000 call LcdSendCommand
373:lcddrive.c **** LcdSendData(y );
998 .LM157:
999 033c 802F mov r24,r16
1000 033e 0E94 0000 call LcdSendData
374:lcddrive.c **** LcdSendData(y );
1002 .LM158:
1003 0342 802F mov r24,r16
1004 0344 0E94 0000 call LcdSendData
375:lcddrive.c **** LCD_DataOver();
1006 .LM159:
1007 /* #APP */
1008 0348 929A SBI 0x12,2
1009
376:lcddrive.c ****
377:lcddrive.c **** LcdSendCommand(0x2C); //memory write
1011 .LM160:
1012 /* #NOAPP */
1013 034a 8CE2 ldi r24,lo8(44)
1014 034c 0E94 0000 call LcdSendCommand
378:lcddrive.c **** LcdSendData(Color);
1016 .LM161:
1017 0350 8F2D mov r24,r15
1018 0352 0E94 0000 call LcdSendData
379:lcddrive.c **** LCD_DataOver();
1020 .LM162:
1021 /* #APP */
1022 0356 929A SBI 0x12,2
1023
1024 /* #NOAPP */
1025 /* epilogue: frame size=0 */
1026 0358 1F91 pop r17
1027 035a 0F91 pop r16
1028 035c FF90 pop r15
1029 035e 0895 ret
1030 /* epilogue end (size=4) */
1031 /* function GUI_Point size 46 (39) */
1033 .Lscope8:
1039 .global GUI_HLine1
1041 GUI_HLine1:
380:lcddrive.c **** }
381:lcddrive.c ****
382:lcddrive.c **** /****************************************************************************
383:lcddrive.c **** * 名称:GUI_HLine1()
384:lcddrive.c **** * 功能:画水平线。
385:lcddrive.c **** * 入口参数: x0 水平线起点所在列的位置
386:lcddrive.c **** * y0 水平线起点所在行的位置
387:lcddrive.c **** * x1 水平线终点所在列的位置
388:lcddrive.c **** * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
389:lcddrive.c **** * 出口参数:无
390:lcddrive.c **** * 说明:操作失败原因是指定地址超出缓冲区范围。 在4096色模式下:
391:lcddrive.c **** ****************************************************************************/
392:lcddrive.c **** void GUI_HLine1(uint8 x0,uint8 y0,uint8 x1,uint16 color)
393:lcddrive.c **** {
1043 .LM163:
1044 /* prologue: frame size=0 */
1045 0360 CF92 push r12
1046 0362 DF92 push r13
1047 0364 FF92 push r15
1048 0366 0F93 push r16
1049 0368 1F93 push r17
1050 036a CF93 push r28
1051 036c DF93 push r29
1052 /* prologue end (size=7) */
1053 036e 082F mov r16,r24
1054 0370 162F mov r17,r22
1055 0372 F42E mov r15,r20
1056 0374 E901 movw r28,r18
394:lcddrive.c **** uint16 old_color;
395:lcddrive.c **** uint8 a;
396:lcddrive.c **** old_color=LcdPenColor;//保存原来的颜色值,以免画线改变原来的颜色
1058 .LM164:
1059 0376 C090 0000 lds r12,LcdPenColor
1060 037a D090 0000 lds r13,(LcdPenColor)+1
397:lcddrive.c **** LcdPenColor=color;
1062 .LM165:
1063 037e 3093 0000 sts (LcdPenColor)+1,r19
1064 0382 2093 0000 sts LcdPenColor,r18
398:lcddrive.c **** LcdSendCommand(0x2a);
1066 .LM166:
1067 0386 8AE2 ldi r24,lo8(42)
1068 0388 0E94 0000 call LcdSendCommand
399:lcddrive.c **** LcdSendData(x0);
1070 .LM167:
1071 038c 802F mov r24,r16
1072 038e 0E94 0000 call LcdSendData
400:lcddrive.c **** LcdSendData(x1); //w的作用体现在此处
1074 .LM168:
1075 0392 8F2D mov r24,r15
1076 0394 0E94 0000 call LcdSendData
401:lcddrive.c **** SetLcdSclk();
1078 .LM169:
1079 /* #APP */
1080 0398 DF9A SBI 0x1b,7
1081
402:lcddrive.c ****
403:lcddrive.c **** LcdSendCommand(0x2b);
1083 .LM170:
1084 /* #NOAPP */
1085 039a 8BE2 ldi r24,lo8(43)
1086 039c 0E94 0000 call LcdSendCommand
404:lcddrive.c **** LcdSendData(y0);
1088 .LM171:
1089 03a0 812F mov r24,r17
1090 03a2 0E94 0000 call LcdSendData
405:lcddrive.c **** LcdSendData(y0);
1092 .LM172:
1093 03a6 812F mov r24,r17
1094 03a8 0E94 0000 call LcdSendData
406:lcddrive.c **** SetLcdSclk();
1096 .LM173:
1097 /* #APP */
1098 03ac DF9A SBI 0x1b,7
1099
407:lcddrive.c **** LcdSendCommand(0x2c);
1101 .LM174:
1102 /* #NOAPP */
1103 03ae 8CE2 ldi r24,lo8(44)
1104 03b0 0E94 0000 call LcdSendCommand
1105 .L63:
408:lcddrive.c **** for(a=x0;a<x1;a+=2)
1107 .LM175:
1108 03b4 0F15 cp r16,r15
1109 03b6 A8F4 brsh .L62
409:lcddrive.c **** {
410:lcddrive.c **** LcdSendData(color>>4);//第一字节写第一个点的RG
1111 .LM176:
1112 03b8 CE01 movw r24,r28
1113 03ba 44E0 ldi r20,4
1114 03bc 9695 1: lsr r25
1115 03be 8795 ror r24
1116 03c0 4A95 dec r20
1117 03c2 E1F7 brne 1b
1118 03c4 0E94 0000 call LcdSendData
411:lcddrive.c **** LcdSendData(((color & 0x00f)<<4)|(color >> 8));//第二字节写第一个点的B和第二个点的R
1120 .LM177:
1121 03c8 2C2F mov r18,r28
1122 03ca 2295 swap r18
1123 03cc 207F andi r18,0xf0
1124 03ce 8D2F mov r24,r29
1125 03d0 9927 clr r25
1126 03d2 822B or r24,r18
1127 03d4 0E94 0000 call LcdSendData
412:lcddrive.c **** LcdSendData(color & 0x0ff);//写第二个点的GB ;
1129 .LM178:
1130 03d8 8C2F mov r24,r28
1131 03da 0E94 0000 call LcdSendData
1133 .LM179:
1134 03de 0E5F subi r16,lo8(-(2))
1135 03e0 E9CF rjmp .L63
1136 .L62:
413:lcddrive.c **** }
414:lcddrive.c **** LcdPenColor=old_color;//恢复原来颜色值
1138 .LM180:
1139 03e2 D092 0000 sts (LcdPenColor)+1,r13
1140 03e6 C092 0000 sts LcdPenColor,r12
415:lcddrive.c **** SetLcdSclk();
1142 .LM181:
1143 /* #APP */
1144 03ea DF9A SBI 0x1b,7
1145
1146 /* #NOAPP */
1147 /* epilogue: frame size=0 */
1148 03ec DF91 pop r29
1149 03ee CF91 pop r28
1150 03f0 1F91 pop r17
1151 03f2 0F91 pop r16
1152 03f4 FF90 pop r15
1153 03f6 DF90 pop r13
1154 03f8 CF90 pop r12
1155 03fa 0895 ret
1156 /* epilogue end (size=8) */
1157 /* function GUI_HLine1 size 87 (72) */
1163 .Lscope9:
1169 .global GUI_RLine1
1171 GUI_RLine1:
416:lcddrive.c **** }
417:lcddrive.c ****
418:lcddrive.c ****
419:lcddrive.c **** /****************************************************************************
420:lcddrive.c **** * 名称:GUI_RLine1()
421:lcddrive.c **** * 功能:画垂直线。
422:lcddrive.c **** * 入口参数: x0 垂直线起点所在列的位置
423:lcddrive.c **** * y0 垂直线起点所在行的位置
424:lcddrive.c **** * y1 垂直线终点所在行的位置
425:lcddrive.c **** * color
426:lcddrive.c **** * 出口参数:无
427:lcddrive.c **** * 说明:操作失败原因是指定地址超出缓冲区范围。 在4096色模式下:
428:lcddrive.c **** ****************************************************************************/
429:lcddrive.c **** void GUI_RLine1(uint8 x0,uint8 y0,uint8 y1,uint16 color)
430:lcddrive.c **** {
1173 .LM182:
1174 /* prologue: frame size=0 */
1175 03fc CF92 push r12
1176 03fe DF92 push r13
1177 0400 FF92 push r15
1178 0402 0F93 push r16
1179 0404 1F93 push r17
1180 0406 CF93 push r28
1181 0408 DF93 push r29
1182 /* prologue end (size=7) */
1183 040a 182F mov r17,r24
1184 040c 062F mov r16,r22
1185 040e F42E mov r15,r20
1186 0410 E901 movw r28,r18
431:lcddrive.c **** uint16 old_color;
432:lcddrive.c **** uint8 a;
433:lcddrive.c **** old_color=LcdPenColor;//保存原来的颜色值,以免画线改变原来的颜色
1188 .LM183:
1189 0412 C090 0000 lds r12,LcdPenColor
1190 0416 D090 0000 lds r13,(LcdPenColor)+1
434:lcddrive.c **** LcdPenColor=color;
1192 .LM184:
1193 041a 3093 0000 sts (LcdPenColor)+1,r19
1194 041e 2093 0000 sts LcdPenColor,r18
435:lcddrive.c **** LcdSendCommand(0x2a);
1196 .LM185:
1197 0422 8AE2 ldi r24,lo8(42)
1198 0424 0E94 0000 call LcdSendCommand
436:lcddrive.c **** LcdSendData(x0);
1200 .LM186:
1201 0428 812F mov r24,r17
1202 042a 0E94 0000 call LcdSendData
437:lcddrive.c **** LcdSendData(x0); //w的作用体现在此处
1204 .LM187:
1205 042e 812F mov r24,r17
1206 0430 0E94 0000 call LcdSendData
438:lcddrive.c **** SetLcdSclk();
1208 .LM188:
1209 /* #APP */
1210 0434 DF9A SBI 0x1b,7
1211
439:lcddrive.c ****
440:lcddrive.c **** LcdSendCommand(0x2b);
1213 .LM189:
1214 /* #NOAPP */
1215 0436 8BE2 ldi r24,lo8(43)
1216 0438 0E94 0000 call LcdSendCommand
441:lcddrive.c **** LcdSendData(y0);
1218 .LM190:
1219 043c 802F mov r24,r16
1220 043e 0E94 0000 call LcdSendData
442:lcddrive.c **** LcdSendData(y1);
1222 .LM191:
1223 0442 8F2D mov r24,r15
1224 0444 0E94 0000 call LcdSendData
443:lcddrive.c **** SetLcdSclk();
1226 .LM192:
1227 /* #APP */
1228 0448 DF9A SBI 0x1b,7
1229
444:lcddrive.c **** LcdSendCommand(0x2c);
1231 .LM193:
1232 /* #NOAPP */
1233 044a 8CE2 ldi r24,lo8(44)
1234 044c 0E94 0000 call LcdSendCommand
1235 .L71:
445:lcddrive.c ****
446:lcddrive.c **** for(a=y0;a<y1;a+=2)
1237 .LM194:
1238 0450 0F15 cp r16,r15
1239 0452 A8F4 brsh .L70
447:lcddrive.c **** {
448:lcddrive.c **** LcdSendData(color>>4);//第一字节写第一个点的RG
1241 .LM195:
1242 0454 CE01 movw r24,r28
1243 0456 64E0 ldi r22,4
1244 0458 9695 1: lsr r25
1245 045a 8795 ror r24
1246 045c 6A95 dec r22
1247 045e E1F7 brne 1b
1248 0460 0E94 0000 call LcdSendData
449:lcddrive.c **** LcdSendData(((color & 0x00f)<<4)|(color >> 8));//第二字节写第一个点的B和第二个点的R
1250 .LM196:
1251 0464 2C2F mov r18,r28
1252 0466 2295 swap r18
1253 0468 207F andi r18,0xf0
1254 046a 8D2F mov r24,r29
1255 046c 9927 clr r25
1256 046e 822B or r24,r
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -