📄 zlg7290_avr.lis
字号:
0458 042F mov R16,R20
045A D8DE xcall _ZLG7290_SegOnOff
045C .dbline 208
045C 0EE1 ldi R16,30
045E 10E0 ldi R17,0
0460 0FDF xcall _delay1
0462 .dbline 209
0462 L122:
0462 .dbline 205
0462 4395 inc R20
0464 L124:
0464 .dbline 205
0464 4034 cpi R20,64
0466 B8F3 brlo L121
0468 .dbline 210
0468 ; {
0468 ; ZLG7290_SegOnOff(seg,0);
0468 ; delay1(30);
0468 ; }
0468 ; delay1(100);
0468 04E6 ldi R16,100
046A 10E0 ldi R17,0
046C 09DF xcall _delay1
046E .dbline -2
046E .dbline 211
046E ; }
046E L116:
046E 0E940000 xcall pop_gset1
0472 .dbline 0 ; func end
0472 0895 ret
0474 .dbsym r seg 20 c
0474 .dbend
0474 .dbfunc e DispValue _DispValue fV
0474 ; d -> R22
0474 ; dat -> R10
0474 ; x -> R20
.even
0474 _DispValue::
0474 0E940000 xcall push_gset3
0478 A22E mov R10,R18
047A 402F mov R20,R16
047C 2397 sbiw R28,3
047E .dbline -1
047E .dbline 221
047E ;
047E ; /*
047E ; 函数:DispValue()
047E ; 功能:显示100以内的数值
047E ; 参数:
047E ; x:显示位置,取值0~6
047E ; dat:要显示的数据,取值0~99
047E ; */
047E ; void DispValue(uchar x, uchar dat)
047E ; {
047E .dbline 223
047E ; uchar d;
047E ; d = dat / 10;
047E 1AE0 ldi R17,10
0480 0A2D mov R16,R10
0482 0E940000 xcall div8u
0486 602F mov R22,R16
0488 .dbline 224
0488 ; ZLG7290_Download(x,0,0,d);
0488 6A83 std y+2,R22
048A 2224 clr R2
048C 2882 std y+0,R2
048E 2227 clr R18
0490 042F mov R16,R20
0492 CADE xcall _ZLG7290_Download
0494 .dbline 225
0494 ; d = dat - d * 10;
0494 8AE0 ldi R24,10
0496 869F mul R24,R22
0498 6A2D mov R22,R10
049A 6019 sub R22,R0
049C .dbline 226
049C ; ZLG7290_Download(x+1,0,0,d);
049C 6A83 std y+2,R22
049E 2224 clr R2
04A0 2882 std y+0,R2
04A2 2227 clr R18
04A4 042F mov R16,R20
04A6 0F5F subi R16,255 ; addi 1
04A8 BFDE xcall _ZLG7290_Download
04AA .dbline -2
04AA .dbline 227
04AA ; }
04AA L125:
04AA 2396 adiw R28,3
04AC 0E940000 xcall pop_gset3
04B0 .dbline 0 ; func end
04B0 0895 ret
04B2 .dbsym r d 22 c
04B2 .dbsym r dat 10 c
04B2 .dbsym r x 20 c
04B2 .dbend
04B2 .dbfunc e DispHexValue _DispHexValue fV
04B2 ; d -> R22
04B2 ; dat -> R10
04B2 ; x -> R20
.even
04B2 _DispHexValue::
04B2 0E940000 xcall push_gset3
04B6 A22E mov R10,R18
04B8 402F mov R20,R16
04BA 2397 sbiw R28,3
04BC .dbline -1
04BC .dbline 237
04BC ;
04BC ; /*
04BC ; 函数:DispHexValue()
04BC ; 功能:以16进制方式显示数值
04BC ; 参数:
04BC ; x:显示位置,取值0~6
04BC ; dat:要显示的数据,取值0~255
04BC ; */
04BC ; void DispHexValue(uchar x, uchar dat)
04BC ; {
04BC .dbline 239
04BC ; uchar d;
04BC ; d = dat / 16;
04BC 10E1 ldi R17,16
04BE 0A2D mov R16,R10
04C0 0E940000 xcall div8u
04C4 602F mov R22,R16
04C6 .dbline 240
04C6 ; ZLG7290_Download(x,0,0,d);
04C6 6A83 std y+2,R22
04C8 2224 clr R2
04CA 2882 std y+0,R2
04CC 2227 clr R18
04CE 042F mov R16,R20
04D0 ABDE xcall _ZLG7290_Download
04D2 .dbline 241
04D2 ; d = dat - d * 16;
04D2 80E1 ldi R24,16
04D4 869F mul R24,R22
04D6 6A2D mov R22,R10
04D8 6019 sub R22,R0
04DA .dbline 242
04DA ; ZLG7290_Download(x+1,0,0,d);
04DA 6A83 std y+2,R22
04DC 2224 clr R2
04DE 2882 std y+0,R2
04E0 2227 clr R18
04E2 042F mov R16,R20
04E4 0F5F subi R16,255 ; addi 1
04E6 A0DE xcall _ZLG7290_Download
04E8 .dbline -2
04E8 .dbline 243
04E8 ; }
04E8 L126:
04E8 2396 adiw R28,3
04EA 0E940000 xcall pop_gset3
04EE .dbline 0 ; func end
04EE 0895 ret
04F0 .dbsym r d 22 c
04F0 .dbsym r dat 10 c
04F0 .dbsym r x 20 c
04F0 .dbend
04F0 .dbfunc e Test_Key _Test_Key fV
04F0 ; FnKeyValue -> y+2
04F0 ; RepeatCnt -> y+1
04F0 ; KeyValue -> y+0
.even
04F0 _Test_Key::
04F0 2397 sbiw R28,3
04F2 .dbline -1
04F2 .dbline 250
04F2 ;
04F2 ; /*
04F2 ; 函数:Test_Key()
04F2 ; 功能:测试按键功能
04F2 ; */
04F2 ; void Test_Key()
04F2 ; {
04F2 .dbline 254
04F2 ; uchar KeyValue;
04F2 ; uchar RepeatCnt;
04F2 ; uchar FnKeyValue;
04F2 ; ClearAll();
04F2 DFDE xcall _ClearAll
04F4 .dbline 255
04F4 ; for (;;)
04F4 L128:
04F4 .dbline 256
04F4 .dbline 257
04F4 20901000 lds R2,_FlagINT
04F8 30901100 lds R3,_FlagINT+1
04FC 2220 tst R2
04FE 11F4 brne X4
0500 3320 tst R3
0502 C1F3 breq L128
0504 X4:
0504 .dbline 258
0504 .dbline 260
0504 2224 clr R2
0506 3324 clr R3
0508 30921100 sts _FlagINT+1,R3
050C 20921000 sts _FlagINT,R2
0510 .dbline 262
0510 9E01 movw R18,R28
0512 01E0 ldi R16,1
0514 57DE xcall _ZLG7290_ReadReg
0516 .dbline 263
0516 9E01 movw R18,R28
0518 2F5F subi R18,255 ; offset = 1
051A 3F4F sbci R19,255
051C 02E0 ldi R16,2
051E 52DE xcall _ZLG7290_ReadReg
0520 .dbline 264
0520 9E01 movw R18,R28
0522 2E5F subi R18,254 ; offset = 2
0524 3F4F sbci R19,255
0526 03E0 ldi R16,3
0528 4DDE xcall _ZLG7290_ReadReg
052A .dbline 266
052A 2881 ldd R18,y+0
052C 0027 clr R16
052E A2DF xcall _DispValue
0530 .dbline 267
0530 2981 ldd R18,y+1
0532 03E0 ldi R16,3
0534 BEDF xcall _DispHexValue
0536 .dbline 268
0536 2A81 ldd R18,y+2
0538 06E0 ldi R16,6
053A BBDF xcall _DispHexValue
053C .dbline 269
053C .dbline 270
053C .dbline 255
053C .dbline 255
053C DBCF xjmp L128
053E X5:
053E .dbline -2
053E L127:
053E 2396 adiw R28,3
0540 .dbline 0 ; func end
0540 0895 ret
0542 .dbsym l FnKeyValue 2 c
0542 .dbsym l RepeatCnt 1 c
0542 .dbsym l KeyValue 0 c
0542 .dbend
0542 .dbfunc e main _main fV
0542 ; x -> R20
.even
0542 _main::
0542 2397 sbiw R28,3
0544 .dbline -1
0544 .dbline 274
0544 ; {
0544 ; if ( FlagINT ) //如果有键按下
0544 ; {
0544 ; //清除中断标志
0544 ; FlagINT = 0;
0544 ; //读取键值、连击计数器值、功能键值
0544 ; ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);
0544 ; ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);
0544 ; ZLG7290_ReadReg(ZLG7290_FunctionKey,&FnKeyValue);
0544 ; //显示键值、连击计数器值、功能键值
0544 ; DispValue(0,KeyValue);
0544 ; DispHexValue(3,RepeatCnt);
0544 ; DispHexValue(6,FnKeyValue);
0544 ; }
0544 ; }
0544 ; }
0544 ;
0544 ; void main()
0544 ; {
0544 .dbline 276
0544 ; uchar x;
0544 ; SystemInit(); //系统初始化
0544 B1DE xcall _SystemInit
0546 1AC0 xjmp L136
0548 L135:
0548 .dbline 284
0548 ; //Test_DispBuf(); //测试直接写显存
0548 ; //Test_Download(); //测试下载数据
0548 ; //Test_ScanNum(); //测试不同扫描位数
0548 ; //Test_Flash(); //测试闪烁功能
0548 ; //Test_SegOnOff(); //测试段寻址功能
0548 ; //Test_Key(); //测试键盘功能
0548 ; while (1)
0548 ; {
0548 .dbline 285
0548 ; for ( x=0; x<8; x++ )
0548 4427 clr R20
054A 08C0 xjmp L141
054C L138:
054C .dbline 286
054C .dbline 287
054C 85E0 ldi R24,5
054E 8A83 std y+2,R24
0550 2224 clr R2
0552 2882 std y+0,R2
0554 21E0 ldi R18,1
0556 042F mov R16,R20
0558 67DE xcall _ZLG7290_Download
055A .dbline 288
055A L139:
055A .dbline 285
055A 4395 inc R20
055C L141:
055C .dbline 285
055C 4830 cpi R20,8
055E B0F3 brlo L138
0560 .dbline 289
0560 ; {
0560 ; ZLG7290_Download(x,1,0,5);
0560 ; }
0560 ; delay1(100);
0560 04E6 ldi R16,100
0562 10E0 ldi R17,0
0564 8DDE xcall _delay1
0566 .dbline 292
0566 ; //Test_Key();
0566 ; //ZLG7290_Download(0,0,0,4);
0566 ; for ( x=0; x<6; x++ )
0566 4427 clr R20
0568 07C0 xjmp L145
056A L142:
056A .dbline 293
056A .dbline 294
056A 242F mov R18,R20
056C 0DE0 ldi R16,13
056E 16DE xcall _ZLG7290_WriteReg
0570 .dbline 295
0570 04E6 ldi R16,100
0572 10E0 ldi R17,0
0574 45DD xcall _delay
0576 .dbline 296
0576 L143:
0576 .dbline 292
0576 4395 inc R20
0578 L145:
0578 .dbline 292
0578 4630 cpi R20,6
057A B8F3 brlo L142
057C .dbline 297
057C L136:
057C .dbline 283
057C E5CF xjmp L135
057E X6:
057E .dbline -2
057E .dbline 298
057E ; {
057E ; ZLG7290_WriteReg(ZLG7290_ScanNum,x
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -