📄 zlg7290.lst
字号:
024F E010 LDI R17,0
0250 DF68 RCALL _delay1
(0153) for ( x=0; x<8; x++ )
0251 2744 CLR R20
0252 C007 RJMP 0x025A
(0154) {
(0155) ZLG7290_WriteReg(ZLG7290_ScanNum,x);
0253 2F24 MOV R18,R20
0254 E00D LDI R16,0xD
0255 DEF1 RCALL _ZLG7290_WriteReg
(0156) delay(100);
0256 E604 LDI R16,0x64
0257 E010 LDI R17,0
0258 DE20 RCALL _delay
0259 9543 INC R20
025A 3048 CPI R20,0x8
025B F3B8 BCS 0x0253
(0157) }
(0158) }
025C 9623 ADIW R28,3
025D 940E0351 CALL pop_gset1
025F 9508 RET
_Test_Flash:
dat --> R20
x --> R22
0260 940E0365 CALL push_gset2
0262 9723 SBIW R28,3
(0159)
(0160) /*
(0161) 函数:Test_Flash()
(0162) 功能:测试闪烁功能
(0163) */
(0164) void Test_Flash()
(0165) {
(0166) uchar dat = 0x01;
0263 E041 LDI R20,1
(0167) uchar x;
(0168) //显示01234567
(0169) for ( x=0; x<8; x++ )
0264 2766 CLR R22
0265 C007 RJMP 0x026D
(0170) {
(0171) ZLG7290_Download(x,0,0,x);
0266 836A STD R22,2+Y
0267 2422 CLR R2
0268 8228 STD R2,0+Y
0269 2722 CLR R18
026A 2F06 MOV R16,R22
026B DF21 RCALL _ZLG7290_Download
026C 9563 INC R22
026D 3068 CPI R22,0x8
026E F3B8 BCS 0x0266
(0172) }
(0173) //设置闪烁控制寄存器
(0174) ZLG7290_WriteReg(ZLG7290_FlashOnOff,0x11);
026F E121 LDI R18,0x11
0270 E00C LDI R16,0xC
0271 DED5 RCALL _ZLG7290_WriteReg
(0175) //闪烁演示
(0176) for ( x=0; x<8; x++ )
0272 2766 CLR R22
0273 C008 RJMP 0x027C
(0177) {
(0178) ZLG7290_Flash(dat);
0274 2F24 MOV R18,R20
0275 E700 LDI R16,0x70
0276 DEF4 RCALL _ZLG7290_cmd
(0179) dat <<= 1;
0277 0F44 LSL R20
(0180) delay1(300);
0278 E20C LDI R16,0x2C
0279 E011 LDI R17,1
027A DF3E RCALL _delay1
027B 9563 INC R22
027C 3068 CPI R22,0x8
027D F3B0 BCS 0x0274
(0181) }
(0182) //数码管的8个位一起闪烁
(0183) ZLG7290_Flash(0xFF);
027E EF2F LDI R18,0xFF
027F E700 LDI R16,0x70
0280 DEEA RCALL _ZLG7290_cmd
(0184) delay1(350);
0281 E50E LDI R16,0x5E
0282 E011 LDI R17,1
0283 DF35 RCALL _delay1
(0185) //停止闪烁
(0186) ZLG7290_Flash(0x00);
0284 2722 CLR R18
0285 E700 LDI R16,0x70
0286 DEE4 RCALL _ZLG7290_cmd
(0187) delay1(50);
0287 E302 LDI R16,0x32
0288 E010 LDI R17,0
0289 DF2F RCALL _delay1
(0188) }
028A 9623 ADIW R28,3
028B 940E0375 CALL pop_gset2
028D 9508 RET
_Test_SegOnOff:
seg --> R20
028E 940E034E CALL push_gset1
(0189)
(0190) /*
(0191) 函数:Test_SegOnOff()
(0192) 功能:测试段寻址功能
(0193) */
(0194) void Test_SegOnOff()
(0195) {
(0196) uchar seg;
(0197) ClearAll();
0290 DF41 RCALL _ClearAll
(0198) delay1(100);
0291 E604 LDI R16,0x64
0292 E010 LDI R17,0
0293 DF25 RCALL _delay1
(0199) for ( seg=0; seg<64; seg++ )
0294 2744 CLR R20
0295 C007 RJMP 0x029D
(0200) {
(0201) ZLG7290_SegOnOff(seg,1);
0296 E021 LDI R18,1
0297 2F04 MOV R16,R20
0298 DEE6 RCALL _ZLG7290_SegOnOff
(0202) delay1(30);
0299 E10E LDI R16,0x1E
029A E010 LDI R17,0
029B DF1D RCALL _delay1
029C 9543 INC R20
029D 3440 CPI R20,0x40
029E F3B8 BCS 0x0296
(0203) }
(0204) delay1(100);
029F E604 LDI R16,0x64
02A0 E010 LDI R17,0
02A1 DF17 RCALL _delay1
(0205) for ( seg=0; seg<64; seg++ )
02A2 2744 CLR R20
02A3 C007 RJMP 0x02AB
(0206) {
(0207) ZLG7290_SegOnOff(seg,0);
02A4 2722 CLR R18
02A5 2F04 MOV R16,R20
02A6 DED8 RCALL _ZLG7290_SegOnOff
(0208) delay1(30);
02A7 E10E LDI R16,0x1E
02A8 E010 LDI R17,0
02A9 DF0F RCALL _delay1
02AA 9543 INC R20
02AB 3440 CPI R20,0x40
02AC F3B8 BCS 0x02A4
(0209) }
(0210) delay1(100);
02AD E604 LDI R16,0x64
02AE E010 LDI R17,0
02AF DF09 RCALL _delay1
(0211) }
02B0 940E0351 CALL pop_gset1
02B2 9508 RET
_DispValue:
d --> R22
dat --> R10
x --> R20
02B3 940E0369 CALL push_gset3
02B5 2EA2 MOV R10,R18
02B6 2F40 MOV R20,R16
02B7 9723 SBIW R28,3
(0212)
(0213) /*
(0214) 函数:DispValue()
(0215) 功能:显示100以内的数值
(0216) 参数:
(0217) x:显示位置,取值0~6
(0218) dat:要显示的数据,取值0~99
(0219) */
(0220) void DispValue(uchar x, uchar dat)
(0221) {
(0222) uchar d;
(0223) d = dat / 10;
02B8 E01A LDI R17,0xA
02B9 2D0A MOV R16,R10
02BA 940E033C CALL div8u
02BC 2F60 MOV R22,R16
(0224) ZLG7290_Download(x,0,0,d);
02BD 836A STD R22,2+Y
02BE 2422 CLR R2
02BF 8228 STD R2,0+Y
02C0 2722 CLR R18
02C1 2F04 MOV R16,R20
02C2 DECA RCALL _ZLG7290_Download
(0225) d = dat - d * 10;
02C3 E08A LDI R24,0xA
02C4 9F86 MUL R24,R22
02C5 2D6A MOV R22,R10
02C6 1960 SUB R22,R0
(0226) ZLG7290_Download(x+1,0,0,d);
02C7 836A STD R22,2+Y
02C8 2422 CLR R2
02C9 8228 STD R2,0+Y
02CA 2722 CLR R18
02CB 2F04 MOV R16,R20
02CC 5F0F SUBI R16,0xFF
02CD DEBF RCALL _ZLG7290_Download
(0227) }
02CE 9623 ADIW R28,3
02CF 940E0378 CALL pop_gset3
02D1 9508 RET
_DispHexValue:
d --> R22
dat --> R10
x --> R20
02D2 940E0369 CALL push_gset3
02D4 2EA2 MOV R10,R18
02D5 2F40 MOV R20,R16
02D6 9723 SBIW R28,3
(0228)
(0229) /*
(0230) 函数:DispHexValue()
(0231) 功能:以16进制方式显示数值
(0232) 参数:
(0233) x:显示位置,取值0~6
(0234) dat:要显示的数据,取值0~255
(0235) */
(0236) void DispHexValue(uchar x, uchar dat)
(0237) {
(0238) uchar d;
(0239) d = dat / 16;
02D7 E110 LDI R17,0x10
02D8 2D0A MOV R16,R10
02D9 940E033C CALL div8u
02DB 2F60 MOV R22,R16
(0240) ZLG7290_Download(x,0,0,d);
02DC 836A STD R22,2+Y
02DD 2422 CLR R2
02DE 8228 STD R2,0+Y
02DF 2722 CLR R18
02E0 2F04 MOV R16,R20
02E1 DEAB RCALL _ZLG7290_Download
(0241) d = dat - d * 16;
02E2 E180 LDI R24,0x10
02E3 9F86 MUL R24,R22
02E4 2D6A MOV R22,R10
02E5 1960 SUB R22,R0
(0242) ZLG7290_Download(x+1,0,0,d);
02E6 836A STD R22,2+Y
02E7 2422 CLR R2
02E8 8228 STD R2,0+Y
02E9 2722 CLR R18
02EA 2F04 MOV R16,R20
02EB 5F0F SUBI R16,0xFF
02EC DEA0 RCALL _ZLG7290_Download
(0243) }
02ED 9623 ADIW R28,3
02EE 940E0378 CALL pop_gset3
02F0 9508 RET
_Test_Key:
FnKeyValue --> Y+2
RepeatCnt --> Y+1
KeyValue --> Y+0
02F1 9723 SBIW R28,3
(0244)
(0245) /*
(0246) 函数:Test_Key()
(0247) 功能:测试按键功能
(0248) */
(0249) void Test_Key()
(0250) {
(0251) uchar KeyValue;
(0252) uchar RepeatCnt;
(0253) uchar FnKeyValue;
(0254) ClearAll();
02F2 DEDF RCALL _ClearAll
(0255) for (;;)
(0256) {
(0257) if ( FlagINT ) //如果有键按下
02F3 90200110 LDS R2,0x110
02F5 90300111 LDS R3,0x111
02F7 2022 TST R2
02F8 F411 BNE 0x02FB
02F9 2033 TST R3
02FA F3C1 BEQ 0x02F3
(0258) {
(0259) //清除中断标志
(0260) FlagINT = 0;
02FB 2422 CLR R2
02FC 2433 CLR R3
02FD 92300111 STS R3,0x111
02FF 92200110 STS R2,0x110
(0261) //读取键值、连击计数器值、功能键值
(0262) ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);
0301 019E MOVW R18,R28
0302 E001 LDI R16,1
0303 DE57 RCALL _ZLG7290_ReadReg
(0263) ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);
0304 019E MOVW R18,R28
0305 5F2F SUBI R18,0xFF
0306 4F3F SBCI R19,0xFF
0307 E002 LDI R16,2
0308 DE52 RCALL _ZLG7290_ReadReg
(0264) ZLG7290_ReadReg(ZLG7290_FunctionKey,&FnKeyValue);
0309 019E MOVW R18,R28
030A 5F2E SUBI R18,0xFE
030B 4F3F SBCI R19,0xFF
030C E003 LDI R16,3
030D DE4D RCALL _ZLG7290_ReadReg
(0265) //显示键值、连击计数器值、功能键值
(0266) DispValue(0,KeyValue);
030E 8128 LDD R18,0+Y
030F 2700 CLR R16
0310 DFA2 RCALL _DispValue
(0267) DispHexValue(3,RepeatCnt);
0311 8129 LDD R18,1+Y
0312 E003 LDI R16,3
0313 DFBE RCALL _DispHexValue
(0268) DispHexValue(6,FnKeyValue);
0314 812A LDD R18,2+Y
0315 E006 LDI R16,6
0316 DFBB RCALL _DispHexValue
0317 CFDB RJMP 0x02F3
0318 9623 ADIW R28,3
0319 9508 RET
_main:
x --> R20
031A 9723 SBIW R28,3
(0269) }
(0270) }
(0271) }
(0272)
(0273) void main()
(0274) {
(0275) uchar x;
(0276) SystemInit(); //系统初始化
031B DEB1 RCALL _SystemInit
031C C01A RJMP 0x0337
(0277) //Test_DispBuf(); //测试直接写显存
(0278) //Test_Download(); //测试下载数据
(0279) //Test_ScanNum(); //测试不同扫描位数
(0280) //Test_Flash(); //测试闪烁功能
(0281) //Test_SegOnOff(); //测试段寻址功能
(0282) //Test_Key(); //测试键盘功能
(0283) while (1)
(0284) {
(0285) for ( x=0; x<8; x++ )
031D 2744 CLR R20
031E C008 RJMP 0x0327
(0286) {
(0287) ZLG7290_Download(x,1,0,5);
031F E085 LDI R24,5
0320 838A STD R24,2+Y
0321 2422 CLR R2
0322 8228 STD R2,0+Y
0323 E021 LDI R18,1
0324 2F04 MOV R16,R20
0325 DE67 RCALL _ZLG7290_Download
0326 9543 INC R20
0327 3048 CPI R20,0x8
0328 F3B0 BCS 0x031F
(0288) }
(0289) delay1(100);
0329 E604 LDI R16,0x64
032A E010 LDI R17,0
032B DE8D RCALL _delay1
(0290) //Test_Key();
(0291) //ZLG7290_Download(0,0,0,4);
(0292) for ( x=0; x<6; x++ )
032C 2744 CLR R20
032D C007 RJMP 0x0335
(0293) {
(0294) ZLG7290_WriteReg(ZLG7290_ScanNum,x);
032E 2F24 MOV R18,R20
032F E00D LDI R16,0xD
0330 DE16 RCALL _ZLG7290_WriteReg
(0295) delay(100);
0331 E604 LDI R16,0x64
0332 E010 LDI R17,0
0333 DD45 RCALL _delay
0334 9543 INC R20
0335 3046 CPI R20,6
0336 F3B8 BCS 0x032E
0337 CFE5 RJMP 0x031D
(0296) }
(0297) }
(0298) }FILE: <library>
0338 9623 ADIW R28,3
0339 9508 RET
mod8u:
033A 9468 BSET 6
033B C001 RJMP xdiv8u
div8u:
033C 94E8 BCLR 6
xdiv8u:
033D 932A ST R18,-Y
033E 92FA ST R15,-Y
033F 24FF CLR R15
0340 E028 LDI R18,0x8
0341 0F00 LSL R16
0342 1CFF ROL R15
0343 16F1 CP R15,R17
0344 F010 BCS 0x0347
0345 1AF1 SUB R15,R17
0346 9503 INC R16
0347 952A DEC R18
0348 F7C1 BNE 0x0341
0349 F40E BRTC 0x034B
034A 2D0F MOV R16,R15
034B 90F9 LD R15,Y+
034C 9129 LD R18,Y+
034D 9508 RET
push_gset1:
034E 935A ST R21,-Y
034F 934A ST R20,-Y
0350 9508 RET
pop_gset1:
0351 E0E1 LDI R30,1
pop:
0352 9149 LD R20,Y+
0353 9159 LD R21,Y+
0354 FDE0 SBRC R30,0
0355 9508 RET
0356 9169 LD R22,Y+
0357 9179 LD R23,Y+
0358 FDE1 SBRC R30,1
0359 9508 RET
035A 90A9 LD R10,Y+
035B 90B9 LD R11,Y+
035C FDE2 SBRC R30,2
035D 9508 RET
035E 90C9 LD R12,Y+
035F 90D9 LD R13,Y+
0360 FDE3 SBRC R30,3
0361 9508 RET
0362 90E9 LD R14,Y+
0363 90F9 LD R15,Y+
0364 9508 RET
push_gset2:
0365 937A ST R23,-Y
0366 936A ST R22,-Y
0367 940C034E JMP push_gset1
push_gset3:
0369 92BA ST R11,-Y
036A 92AA ST R10,-Y
036B 940C0365 JMP push_gset2
push_gset4:
036D 92DA ST R13,-Y
036E 92CA ST R12,-Y
036F 940C0369 JMP push_gset3
push_gset5:
0371 92FA ST R15,-Y
0372 92EA ST R14,-Y
0373 940C036D JMP push_gset4
pop_gset2:
0375 E0E2 LDI R30,2
0376 940C0352 JMP pop
pop_gset3:
0378 E0E4 LDI R30,4
0379 940C0352 JMP pop
pop_gset4:
037B E0E8 LDI R30,0x8
037C 940C0352 JMP pop
pop_gset5:
037E 27EE CLR R30
037F 940C0352 JMP pop
asgncblk:
0381 93AA ST R26,-Y
0382 93BA ST R27,-Y
0383 93EA ST R30,-Y
0384 93FA ST R31,-Y
0385 920A ST R0,-Y
0386 81AF LDD R26,7+Y
0387 85B8 LDD R27,8+Y
0388 81ED LDD R30,5+Y
0389 81FE LDD R31,6+Y
038A 3000 CPI R16,0
038B 0701 CPC R16,R17
038C F031 BEQ 0x0393
038D 95C8 LPM
038E 920D ST R0,X+
038F 9631 ADIW R30,1
0390 5001 SUBI R16,1
0391 4010 SBCI R17,0
0392 CFF7 RJMP 0x038A
0393 9009 LD R0,Y+
0394 91F9 LD R31,Y+
0395 91E9 LD R30,Y+
0396 91B9 LD R27,Y+
0397 91A9 LD R26,Y+
0398 9624 ADIW R28,4
0399 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -