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

📄 lcm1602.lst

📁 WINAVR编写的PS2键盘驱动
💻 LST
📖 第 1 页 / 共 5 页
字号:
 1054 051e 0FBE      		out __SREG__,__tmp_reg__
 1055 0520 CDBF      		out __SP_L__,r28
 1056 0522 DF91      		pop r29
 1057 0524 CF91      		pop r28
 1058 0526 0895      		ret
 1059               	/* epilogue end (size=9) */
 1060               	/* function LCM1602Write_number size 43 (24) */
 1066               	.Lscope6:
 1067               		.lcomm StringHead.0,1
 1068               		.lcomm RunTimeCounter.1,2
 1075               	.global	RunString
 1077               	RunString:
 168:lcm1602.c     **** }
 169:lcm1602.c     **** 
 170:lcm1602.c     **** 
 171:lcm1602.c     **** 
 172:lcm1602.c     **** /***************************************************************************
 173:lcm1602.c     ****   函数说明:滚屏字幕效果                               
 174:lcm1602.c     ****   输入:    (需要滚屏的字符串, x起始位置,x终止位置,y坐标,方向)                
 175:lcm1602.c     **** ***************************************************************************/
 176:lcm1602.c     **** void RunString(uchar *String,uchar StartX,uchar EndX,uchar Y,uchar Direction)
 177:lcm1602.c     **** {   
 1079               	.LM93:
 1080               	/* prologue: frame size=38 */
 1081 0528 0F93      		push r16
 1082 052a CF93      		push r28
 1083 052c DF93      		push r29
 1084 052e CDB7      		in r28,__SP_L__
 1085 0530 DEB7      		in r29,__SP_H__
 1086 0532 A697      		sbiw r28,38
 1087 0534 0FB6      		in __tmp_reg__,__SREG__
 1088 0536 F894      		cli
 1089 0538 DEBF      		out __SP_H__,r29
 1090 053a 0FBE      		out __SREG__,__tmp_reg__
 1091 053c CDBF      		out __SP_L__,r28
 1092               	/* prologue end (size=11) */
 1093 053e 9A83      		std Y+2,r25
 1094 0540 8983      		std Y+1,r24
 1095 0542 6B83      		std Y+3,r22
 1096 0544 4C83      		std Y+4,r20
 1097 0546 2D83      		std Y+5,r18
 1098 0548 0E83      		std Y+6,r16
 178:lcm1602.c     **** 	static uchar StringHead = 0;//StringHead为每次滚动后第一个要显示的字符号
 179:lcm1602.c     **** 	uchar Screen[17];
 180:lcm1602.c     **** 	uchar a = 0 ;
 1100               	.LM94:
 1101 054a 188E      		std Y+24,__zero_reg__
 181:lcm1602.c     **** 	uchar Point = StringHead;//Point当前这次显示的字符串的第一个字符
 1103               	.LM95:
 1104 054c 8091 0000 		lds r24,StringHead.0
 1105 0550 898F      		std Y+25,r24
 182:lcm1602.c     **** 	uchar StringLong = StringLength(String);//字符串的长度
 1107               	.LM96:
 1108 0552 8981      		ldd r24,Y+1
 1109 0554 9A81      		ldd r25,Y+2
 1110 0556 0E94 0000 		call StringLength
 1111 055a 8A8F      		std Y+26,r24
 1112               	.LBB18:
 1114               	.Ltext9:
 1116               	.LM97:
 1117 055c 80E0      		ldi r24,lo8(0x41000000)
 1118 055e 90E0      		ldi r25,hi8(0x41000000)
 1119 0560 A0E0      		ldi r26,hlo8(0x41000000)
 1120 0562 B1E4      		ldi r27,hhi8(0x41000000)
 1121 0564 8B8F      		std Y+27,r24
 1122 0566 9C8F      		std Y+28,r25
 1123 0568 AD8F      		std Y+29,r26
 1124 056a BE8F      		std Y+30,r27
 1125               	.LBB19:
 1127               	.LM98:
 1128 056c 26E6      		ldi r18,lo8(0x44e66666)
 1129 056e 36E6      		ldi r19,hi8(0x44e66666)
 1130 0570 46EE      		ldi r20,hlo8(0x44e66666)
 1131 0572 54E4      		ldi r21,hhi8(0x44e66666)
 1132 0574 6B8D      		ldd r22,Y+27
 1133 0576 7C8D      		ldd r23,Y+28
 1134 0578 8D8D      		ldd r24,Y+29
 1135 057a 9E8D      		ldd r25,Y+30
 1136 057c 0E94 0000 		call __mulsf3
 1137 0580 DC01      		movw r26,r24
 1138 0582 CB01      		movw r24,r22
 1139 0584 89A3      		std Y+33,r24
 1140 0586 9AA3      		std Y+34,r25
 1141 0588 ABA3      		std Y+35,r26
 1142 058a BCA3      		std Y+36,r27
 1144               	.LM99:
 1145 058c 20E0      		ldi r18,lo8(0x3f800000)
 1146 058e 30E0      		ldi r19,hi8(0x3f800000)
 1147 0590 40E8      		ldi r20,hlo8(0x3f800000)
 1148 0592 5FE3      		ldi r21,hhi8(0x3f800000)
 1149 0594 69A1      		ldd r22,Y+33
 1150 0596 7AA1      		ldd r23,Y+34
 1151 0598 8BA1      		ldd r24,Y+35
 1152 059a 9CA1      		ldd r25,Y+36
 1153 059c 0E94 0000 		call __ltsf2
 1154 05a0 8823      		tst r24
 1155 05a2 0CF0      		brlt .L51
 1157               	.LM100:
 1158 05a4 05C0      		rjmp .L50
 1159               	.L51:
 1161               	.LM101:
 1162 05a6 81E0      		ldi r24,lo8(1)
 1163 05a8 90E0      		ldi r25,hi8(1)
 1164 05aa 98A3      		std Y+32,r25
 1165 05ac 8F8F      		std Y+31,r24
 1166 05ae 1AC0      		rjmp .L52
 1167               	.L50:
 1169               	.LM102:
 1170 05b0 20E0      		ldi r18,lo8(0x477fff00)
 1171 05b2 3FEF      		ldi r19,hi8(0x477fff00)
 1172 05b4 4FE7      		ldi r20,hlo8(0x477fff00)
 1173 05b6 57E4      		ldi r21,hhi8(0x477fff00)
 1174 05b8 69A1      		ldd r22,Y+33
 1175 05ba 7AA1      		ldd r23,Y+34
 1176 05bc 8BA1      		ldd r24,Y+35
 1177 05be 9CA1      		ldd r25,Y+36
 1178 05c0 0E94 0000 		call __gtsf2
 1179 05c4 1816      		cp __zero_reg__,r24
 1180 05c6 0CF0      		brlt .L54
 1181 05c8 03C0      		rjmp .L53
 1182               	.L54:
 1184               	.LM103:
 1185 05ca 18A2      		std Y+32,__zero_reg__
 1186 05cc 1F8E      		std Y+31,__zero_reg__
 1187 05ce 0AC0      		rjmp .L52
 1188               	.L53:
 1190               	.LM104:
 1191 05d0 69A1      		ldd r22,Y+33
 1192 05d2 7AA1      		ldd r23,Y+34
 1193 05d4 8BA1      		ldd r24,Y+35
 1194 05d6 9CA1      		ldd r25,Y+36
 1195 05d8 0E94 0000 		call __fixunssfsi
 1196 05dc DC01      		movw r26,r24
 1197 05de CB01      		movw r24,r22
 1198 05e0 98A3      		std Y+32,r25
 1199 05e2 8F8F      		std Y+31,r24
 1200               	.L52:
 1201               	.LBB20:
 1203               	.LM105:
 1204 05e4 8F8D      		ldd r24,Y+31
 1205 05e6 98A1      		ldd r25,Y+32
 1206 05e8 9EA3      		std Y+38,r25
 1207 05ea 8DA3      		std Y+37,r24
 1208               	.LBB21:
 1210               	.LM106:
 1211 05ec 8DA1      		ldd r24,Y+37
 1212 05ee 9EA1      		ldd r25,Y+38
 1213               	/* #APP */
 1214 05f0 0197      		1: sbiw r24,1
 1215 05f2 F1F7      		brne 1b
 1216               	/* #NOAPP */
 1217 05f4 9EA3      		std Y+38,r25
 1218 05f6 8DA3      		std Y+37,r24
 1219               	.LBE21:
 1220               	.LBE20:
 1221               	.LBE19:
 1222               	.LBE18:
 1224               	.Ltext10:
 183:lcm1602.c     **** 	static uint RunTimeCounter = 0 ;
 184:lcm1602.c     **** 	_delay_ms(8);
 185:lcm1602.c     **** 	if (Direction==0)//向左滚动
 1226               	.LM107:
 1227 05f8 8E81      		ldd r24,Y+6
 1228 05fa 8823      		tst r24
 1229 05fc 09F0      		breq .+2
 1230 05fe 6EC0      		rjmp .L58
 186:lcm1602.c     **** 	{		
 187:lcm1602.c     **** 		for (a = 0;a<(EndX - StartX + 1);a++)
 1232               	.LM108:
 1233 0600 188E      		std Y+24,__zero_reg__
 1234               	.L59:
 1235 0602 888D      		ldd r24,Y+24
 1236 0604 482F      		mov r20,r24
 1237 0606 5527      		clr r21
 1238 0608 8C81      		ldd r24,Y+4
 1239 060a 282F      		mov r18,r24
 1240 060c 3327      		clr r19
 1241 060e 8B81      		ldd r24,Y+3
 1242 0610 9927      		clr r25
 1243 0612 281B      		sub r18,r24
 1244 0614 390B      		sbc r19,r25
 1245 0616 C901      		movw r24,r18
 1246 0618 0196      		adiw r24,1
 1247 061a 4817      		cp r20,r24
 1248 061c 5907      		cpc r21,r25
 1249 061e FCF4      		brge .L63
 188:lcm1602.c     **** 		{
 189:lcm1602.c     **** 			Screen[a] = String[Point];
 1251               	.LM109:
 1252 0620 888D      		ldd r24,Y+24
 1253 0622 282F      		mov r18,r24
 1254 0624 3327      		clr r19
 1255 0626 CE01      		movw r24,r28
 1256 0628 0196      		adiw r24,1
 1257 062a 820F      		add r24,r18
 1258 062c 931F      		adc r25,r19
 1259 062e DC01      		movw r26,r24
 1260 0630 1696      		adiw r26,6
 1261 0632 898D      		ldd r24,Y+25
 1262 0634 282F      		mov r18,r24
 1263 0636 3327      		clr r19
 1264 0638 8981      		ldd r24,Y+1
 1265 063a 9A81      		ldd r25,Y+2
 1266 063c F901      		movw r30,r18
 1267 063e E80F      		add r30,r24
 1268 0640 F91F      		adc r31,r25
 1269 0642 8081      		ld r24,Z
 1270 0644 8C93      		st X,r24
 190:lcm1602.c     **** 			Point ++;
 1272               	.LM110:
 1273 0646 898D      		ldd r24,Y+25
 1274 0648 8F5F      		subi r24,lo8(-(1))
 1275 064a 898F      		std Y+25,r24
 191:lcm1602.c     **** 			if (Point == StringLong)	//如果字符串长度小于Endx-Startx+1,循环显示,类似以圆环
 1277               	.LM111:
 1278 064c 998D      		ldd r25,Y+25
 1279 064e 8A8D      		ldd r24,Y+26
 1280 0650 9817      		cp r25,r24
 1281 0652 09F4      		brne .L61
 192:lcm1602.c     **** 			{							
 193:lcm1602.c     **** 				Point = 0;
 1283               	.LM112:
 1284 0654 198E      		std Y+25,__zero_reg__
 1285               	.L61:
 1287               	.LM113:
 1288 0656 888D      		ldd r24,Y+24
 1289 0658 8F5F      		subi r24,lo8(-(1))
 1290 065a 888F      		std Y+24,r24
 1291 065c D2CF      		rjmp .L59
 1292               	.L63:
 194:lcm1602.c     **** 			}
 195:lcm1602.c     **** 		}
 196:lcm1602.c     **** 			
 197:lcm1602.c     **** 		for (;a < 17;a++)  //无字符的补空白
 1294               	.LM114:
 1295 065e 888D      		ldd r24,Y+24
 1296 0660 8131      		cpi r24,lo8(17)
 1297 0662 78F4      		brsh .L64
 198:lcm1602.c     **** 		{
 199:lcm1602.c     **** 			Screen[a] =' ';
 1299               	.LM115:
 1300 0664 888D      		ldd r24,Y+24
 1301 0666 282F      		mov r18,r24
 1302 0668 3327      		clr r19
 1303 066a CE01      		movw r24,r28
 1304 066c 0196      		adiw r24,1
 1305 066e 820F      		add r24,r18
 1306 0670 931F      		adc r25,r19
 1307 0672 FC01      		movw r30,r24
 1308 0674 3696      		adiw r30,6
 1309 0676 80E2      		ldi r24,lo8(32)
 1310 0678 8083      		st Z,r24
 1312               	.LM116:
 1313 067a 888D      		ldd r24,Y+24
 1314 067c 8F5F      		subi r24,lo8(-(1))
 1315 067e 888F      		std Y+24,r24
 1316 0680 EECF      		rjmp .L63
 1317               	.L64:
 200:lcm1602.c     **** 		}			
 201:lcm1602.c     **** 	
 202:lcm1602.c     **** 		RunTimeCounter ++;
 1319               	.LM117:
 1320 0682 8091 0000 		lds r24,RunTimeCounter.1
 1321 0686 9091 0000 		lds r25,(RunTimeCounter.1)+1
 1322 068a 0196      		adiw r24,1
 1323 068c 9093 0000 		sts (RunTimeCounter.1)+1,r25
 1324 0690 8093 0000 		sts RunTimeCounter.1,r24
 203:lcm1602.c     **** 		if ((RunTimeCounter % RunStringSpeed) > (RunStringSpeed >>1)	)//滚动频率为为(RunStringSpeed/2)*8m
 1326               	.LM118:
 1327 0694 8091 0000 		lds r24,RunTimeCounter.1
 1328 0698 9091 0000 		lds r25,(RunTimeCounter.1)+1
 1329 069c 2AEF      		ldi r18,lo8(250)
 1330 069e 30E0      		ldi r19,hi8(250)
 1331 06a0 B901      		movw r22,r18
 1332 06a2 0E94 0000 		call __udivmodhi4
 1333 06a6 8E37      		cpi r24,126
 1334 06a8 9105      		cpc r25,__zero_reg__
 1335 06aa 80F0      		brlo .L66
 204:lcm1602.c     **** 		{
 205:lcm1602.c     **** 			StringHead ++;//向左滚动
 1337               	.LM119:
 1338 06ac 8091 0000 		lds r24,StringHead.0
 1339 06b0 8F5F      		subi r24,lo8(-(1))
 1340 06b2 8093 0000 		sts StringHead.0,r24
 206:lcm1602.c     **** 			RunTimeCounter = 0;
 1342               	.LM120:
 1343 06b6 1092 0000 		sts (RunTimeCounter.1)+1,__zero_reg__
 1344 06ba 1092 0000 		sts RunTimeCounter.1,__zero_reg__
 207:lcm1602.c    

⌨️ 快捷键说明

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