📄 4x4key_main.lis
字号:
00E6 66B3 in R22,0x16
00E8 .dbline 10
00E8 ; tem1=tem1&0x0f;
00E8 6F70 andi R22,15
00EA .dbline 11
00EA ; if(tem1!=0x0f) //判断是否有键被按下
00EA 6F30 cpi R22,15
00EC A1F0 breq L28
00EE X13:
00EE .dbline 12
00EE ; {
00EE .dbline 13
00EE ; s_ms(200); //延时
00EE 08EC ldi R16,200
00F0 10E0 ldi R17,0
00F2 86DF xcall _s_ms
00F4 .dbline 14
00F4 ; tem2=PINB; //读取端口B
00F4 A6B2 in R10,0x16
00F6 .dbline 15
00F6 ; tem2=tem2&0x0f;
00F6 8A2D mov R24,R10
00F8 8F70 andi R24,15
00FA A82E mov R10,R24
00FC .dbline 16
00FC ; if(tem1==tem2) //判断是否为干扰
00FC 6817 cp R22,R24
00FE 59F4 brne L30
0100 X14:
0100 .dbline 17
0100 ; {
0100 .dbline 18
0100 ; DDRB=0x0f; //B口高四位输入 低四位输出
0100 8FE0 ldi R24,15
0102 87BB out 0x17,R24
0104 .dbline 19
0104 ; PORTB=0xf0; //反相输出
0104 80EF ldi R24,240
0106 88BB out 0x18,R24
0108 .dbline 20
0108 ; s_ms(50); //换向后要延时
0108 02E3 ldi R16,50
010A 10E0 ldi R17,0
010C 79DF xcall _s_ms
010E .dbline 21
010E ; rem=PINB; //读取端口B
010E 46B3 in R20,0x16
0110 .dbline 22
0110 ; rem=rem&0xf0; //取高四位
0110 407F andi R20,240
0112 .dbline 23
0112 ; rem=rem+tem1; //合并
0112 460F add R20,R22
0114 .dbline 24
0114 ; rem=~rem; //反向输出
0114 4095 com R20
0116 .dbline 31
0116 ; //do //判断按键是否被释放
0116 ; //{
0116 ; // PORTB=0xf0;
0116 ; //s_ms(200);
0116 ; //}
0116 ; //while(PINB!=0xf0);
0116 ; }
0116 L30:
0116 .dbline 32
0116 ; }
0116 L28:
0116 .dbline 33
0116 ; return(rem);
0116 042F mov R16,R20
0118 .dbline -2
0118 L27:
0118 .dbline 0 ; func end
0118 0C940000 xjmp pop_xgsetF00C
011C .dbsym l i 1 c
011C .dbsym r tem2 10 c
011C .dbsym r rem 20 c
011C .dbsym r tem1 22 c
011C .dbend
011C .dbfile E:\产品\开发板\光盘\16实验程序\4x4键盘\disp.h
011C .dbfunc e disa _disa fV
011C ; data -> R10
.even
011C _disa::
011C AA92 st -y,R10
011E A02E mov R10,R16
0120 .dbline -1
0120 .dbline 9
0120 ; //数码管显示子程序
0120 ;
0120 ; #define ls138a 7
0120 ; #define ls138b 6
0120 ; #define ls138c 5
0120 ; #define ls138en 4
0120 ; uchar a1,a2,a3;
0120 ; void disa(uchar data)
0120 ; {
0120 .dbline 10
0120 ; a3=data/100;
0120 14E6 ldi R17,100
0122 0A2D mov R16,R10
0124 0E940000 xcall div8u
0128 00930000 sts _a3,R16
012C .dbline 11
012C ; a2=(data-a3*100)/10;
012C 202E mov R2,R16
012E 84E6 ldi R24,100
0130 829D mul R24,R2
0132 0A2D mov R16,R10
0134 0019 sub R16,R0
0136 1AE0 ldi R17,10
0138 0E940000 xcall div8u
013C 00930100 sts _a2,R16
0140 .dbline 12
0140 ; a1=(data-a3*100-a2*10);
0140 20900000 lds R2,_a3
0144 84E6 ldi R24,100
0146 829D mul R24,R2
0148 2A2C mov R2,R10
014A 2018 sub R2,R0
014C 302E mov R3,R16
014E 8AE0 ldi R24,10
0150 839D mul R24,R3
0152 2018 sub R2,R0
0154 20920200 sts _a1,R2
0158 .dbline -2
0158 L32:
0158 .dbline 0 ; func end
0158 A990 ld R10,y+
015A 0895 ret
015C .dbsym r data 10 c
015C .dbend
015C .dbfunc e disp _disp fV
015C ; bb -> R12,R13
015C ; aa -> R10
.even
015C _disp::
015C 0E940000 xcall push_xgset003C
0160 A02E mov R10,R16
0162 .dbline -1
0162 .dbline 16
0162 ; }
0162 ;
0162 ; void disp(uchar aa)
0162 ; {
0162 .dbline 17
0162 ; uint bb=0;
0162 CC24 clr R12
0164 DD24 clr R13
0166 .dbline 18
0166 ; DDRA=0xff; //初始化端口A
0166 8FEF ldi R24,255
0168 8ABB out 0x1a,R24
016A .dbline 19
016A ; PORTA=0xff;
016A 8BBB out 0x1b,R24
016C .dbline 20
016C ; disa(aa);//提取aa的各位
016C 0A2D mov R16,R10
016E D6DF xcall _disa
0170 .dbline 21
0170 ; sendbyte(a1);//数码管1
0170 00910200 lds R16,_a1
0174 4EDF xcall _sendbyte
0176 .dbline 22
0176 ; PORTA&=~(1<<ls138a);
0176 DF98 cbi 0x1b,7
0178 .dbline 23
0178 ; PORTA&=~(1<<ls138b);
0178 DE98 cbi 0x1b,6
017A .dbline 24
017A ; PORTA&=~(1<<ls138c);
017A DD98 cbi 0x1b,5
017C .dbline 25
017C ; s_ms(600);
017C 08E5 ldi R16,600
017E 12E0 ldi R17,2
0180 3FDF xcall _s_ms
0182 .dbline 26
0182 ; sendbyte(a2);//数码管2
0182 00910100 lds R16,_a2
0186 45DF xcall _sendbyte
0188 .dbline 27
0188 ; PORTA|=(1<<ls138a);
0188 DF9A sbi 0x1b,7
018A .dbline 28
018A ; PORTA&=~(1<<ls138b);
018A DE98 cbi 0x1b,6
018C .dbline 29
018C ; PORTA&=~(1<<ls138c);
018C DD98 cbi 0x1b,5
018E .dbline 30
018E ; s_ms(600);
018E 08E5 ldi R16,600
0190 12E0 ldi R17,2
0192 36DF xcall _s_ms
0194 .dbline 31
0194 ; sendbyte(a3);//数码管3
0194 00910000 lds R16,_a3
0198 3CDF xcall _sendbyte
019A .dbline 32
019A ; PORTA&=~(1<<ls138a);
019A DF98 cbi 0x1b,7
019C .dbline 33
019C ; PORTA|=(1<<ls138b);
019C DE9A sbi 0x1b,6
019E .dbline 34
019E ; PORTA&=~(1<<ls138c);
019E DD98 cbi 0x1b,5
01A0 .dbline 35
01A0 ; s_ms(600);
01A0 08E5 ldi R16,600
01A2 12E0 ldi R17,2
01A4 2DDF xcall _s_ms
01A6 .dbline 36
01A6 ; sendbyte(0);//数码管4
01A6 0027 clr R16
01A8 34DF xcall _sendbyte
01AA .dbline 37
01AA ; PORTA|=(1<<ls138a);
01AA DF9A sbi 0x1b,7
01AC .dbline 38
01AC ; PORTA|=(1<<ls138b);
01AC DE9A sbi 0x1b,6
01AE .dbline 39
01AE ; PORTA&=~(1<<ls138c);
01AE DD98 cbi 0x1b,5
01B0 .dbline 40
01B0 ; s_ms(600);
01B0 08E5 ldi R16,600
01B2 12E0 ldi R17,2
01B4 25DF xcall _s_ms
01B6 .dbline 41
01B6 ; sendbyte(0);//数码管5
01B6 0027 clr R16
01B8 2CDF xcall _sendbyte
01BA .dbline 42
01BA ; PORTA&=~(1<<ls138a);
01BA DF98 cbi 0x1b,7
01BC .dbline 43
01BC ; PORTA&=~(1<<ls138b);
01BC DE98 cbi 0x1b,6
01BE .dbline 44
01BE ; PORTA|=(1<<ls138c);
01BE DD9A sbi 0x1b,5
01C0 .dbline 45
01C0 ; s_ms(600);
01C0 08E5 ldi R16,600
01C2 12E0 ldi R17,2
01C4 1DDF xcall _s_ms
01C6 .dbline 46
01C6 ; sendbyte(0);//数码管6
01C6 0027 clr R16
01C8 24DF xcall _sendbyte
01CA .dbline 47
01CA ; PORTA|=(1<<ls138a);
01CA DF9A sbi 0x1b,7
01CC .dbline 48
01CC ; PORTA&=~(1<<ls138b);
01CC DE98 cbi 0x1b,6
01CE .dbline 49
01CE ; PORTA|=(1<<ls138c);
01CE DD9A sbi 0x1b,5
01D0 .dbline 50
01D0 ; s_ms(600);
01D0 08E5 ldi R16,600
01D2 12E0 ldi R17,2
01D4 15DF xcall _s_ms
01D6 .dbline 51
01D6 ; sendbyte(0);//数码管7
01D6 0027 clr R16
01D8 1CDF xcall _sendbyte
01DA .dbline 52
01DA ; PORTA&=~(1<<ls138a);
01DA DF98 cbi 0x1b,7
01DC .dbline 53
01DC ; PORTA|=(1<<ls138b);
01DC DE9A sbi 0x1b,6
01DE .dbline 54
01DE ; PORTA|=(1<<ls138c);
01DE DD9A sbi 0x1b,5
01E0 .dbline 55
01E0 ; s_ms(600);
01E0 08E5 ldi R16,600
01E2 12E0 ldi R17,2
01E4 0DDF xcall _s_ms
01E6 .dbline 56
01E6 ; sendbyte(0);//数码管8
01E6 0027 clr R16
01E8 14DF xcall _sendbyte
01EA .dbline 57
01EA ; PORTA|=(1<<ls138a);
01EA DF9A sbi 0x1b,7
01EC .dbline 58
01EC ; PORTA|=(1<<ls138b);
01EC DE9A sbi 0x1b,6
01EE .dbline 59
01EE ; PORTA|=(1<<ls138c);
01EE DD9A sbi 0x1b,5
01F0 .dbline 60
01F0 ; s_ms(600);
01F0 08E5 ldi R16,600
01F2 12E0 ldi R17,2
01F4 05DF xcall _s_ms
01F6 .dbline -2
01F6 L33:
01F6 .dbline 0 ; func end
01F6 0C940000 xjmp pop_xgset003C
01FA .dbsym r bb 12 i
01FA .dbsym r aa 10 c
01FA .dbend
01FA .dbfile E:\产品\开发板\光盘\16实验程序\4x4键盘\4x4key_main.c
01FA .dbfunc e turn _turn fI
01FA ; key -> R16
.even
01FA _turn::
01FA 4A93 st -y,R20
01FC 5A93 st -y,R21
01FE .dbline -1
01FE .dbline 17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -