📄 lcm1602.lst
字号:
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 + -