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

📄 lcddrive.lst

📁 一个基于MEGA16的GUI
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -