📄 4x4key_main.lis
字号:
00E0 ; s_ms(1);
00E0 01E0 ldi R16,1
00E2 10E0 ldi R17,0
00E4 8DDF xcall _s_ms
00E6 .dbline 9
00E6 ; tem1=PINB; //读取端口B
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 102F mov R17,R16
012E 04E6 ldi R16,100
0130 0103 mulsu R16,R17
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 10910000 lds R17,_a3
0144 04E6 ldi R16,100
0146 0103 mulsu R16,R17
0148 2A2C mov R2,R10
014A 2018 sub R2,R0
014C 10910100 lds R17,_a2
0150 0AE0 ldi R16,10
0152 0103 mulsu R16,R17
0154 2018 sub R2,R0
0156 20920200 sts _a1,R2
015A .dbline -2
015A L32:
015A .dbline 0 ; func end
015A A990 ld R10,y+
015C 0895 ret
015E .dbsym r data 10 c
015E .dbend
015E .dbfunc e disp _disp fV
015E ; bb -> R12,R13
015E ; aa -> R10
.even
015E _disp::
015E 0E940000 xcall push_xgset003C
0162 A02E mov R10,R16
0164 .dbline -1
0164 .dbline 16
0164 ; }
0164 ;
0164 ; void disp(uchar aa)
0164 ; {
0164 .dbline 17
0164 ; uint bb=0;
0164 CC24 clr R12
0166 DD24 clr R13
0168 .dbline 18
0168 ; DDRA=0xff; //初始化端口A
0168 8FEF ldi R24,255
016A 8ABB out 0x1a,R24
016C .dbline 19
016C ; PORTA=0xff;
016C 8BBB out 0x1b,R24
016E .dbline 20
016E ; disa(aa);//提取aa的各位
016E 0A2D mov R16,R10
0170 D5DF xcall _disa
0172 .dbline 21
0172 ; sendbyte(a1);//数码管1
0172 00910200 lds R16,_a1
0176 4DDF xcall _sendbyte
0178 .dbline 22
0178 ; PORTA=0X1F;
0178 8FE1 ldi R24,31
017A 8BBB out 0x1b,R24
017C .dbline 26
017C ; //PORTA&=~(1<<ls138a);
017C ; //PORTA&=~(1<<ls138b);
017C ; //PORTA&=~(1<<ls138c);
017C ; s_ms(600);
017C 08E5 ldi R16,600
017E 12E0 ldi R17,2
0180 3FDF xcall _s_ms
0182 .dbline 27
0182 ; sendbyte(a2);//数码管2
0182 00910100 lds R16,_a2
0186 45DF xcall _sendbyte
0188 .dbline 28
0188 ; PORTA=0X9F;
0188 8FE9 ldi R24,159
018A 8BBB out 0x1b,R24
018C .dbline 32
018C ; //PORTA|=(1<<ls138a);
018C ; //PORTA&=~(1<<ls138b);
018C ; //PORTA&=~(1<<ls138c);
018C ; s_ms(600);
018C 08E5 ldi R16,600
018E 12E0 ldi R17,2
0190 37DF xcall _s_ms
0192 .dbline 33
0192 ; sendbyte(a3);//数码管3
0192 00910000 lds R16,_a3
0196 3DDF xcall _sendbyte
0198 .dbline 34
0198 ; PORTA&=~(1<<ls138a);
0198 DF98 cbi 0x1b,7
019A .dbline 35
019A ; PORTA|=(1<<ls138b);
019A DE9A sbi 0x1b,6
019C .dbline 36
019C ; PORTA&=~(1<<ls138c);
019C DD98 cbi 0x1b,5
019E .dbline 37
019E ; s_ms(600);
019E 08E5 ldi R16,600
01A0 12E0 ldi R17,2
01A2 2EDF xcall _s_ms
01A4 .dbline 38
01A4 ; sendbyte(0);//数码管4
01A4 0027 clr R16
01A6 35DF xcall _sendbyte
01A8 .dbline 39
01A8 ; PORTA|=(1<<ls138a);
01A8 DF9A sbi 0x1b,7
01AA .dbline 40
01AA ; PORTA|=(1<<ls138b);
01AA DE9A sbi 0x1b,6
01AC .dbline 41
01AC ; PORTA&=~(1<<ls138c);
01AC DD98 cbi 0x1b,5
01AE .dbline 42
01AE ; s_ms(600);
01AE 08E5 ldi R16,600
01B0 12E0 ldi R17,2
01B2 26DF xcall _s_ms
01B4 .dbline 43
01B4 ; sendbyte(0);//数码管5
01B4 0027 clr R16
01B6 2DDF xcall _sendbyte
01B8 .dbline 44
01B8 ; PORTA&=~(1<<ls138a);
01B8 DF98 cbi 0x1b,7
01BA .dbline 45
01BA ; PORTA&=~(1<<ls138b);
01BA DE98 cbi 0x1b,6
01BC .dbline 46
01BC ; PORTA|=(1<<ls138c);
01BC DD9A sbi 0x1b,5
01BE .dbline 47
01BE ; s_ms(600);
01BE 08E5 ldi R16,600
01C0 12E0 ldi R17,2
01C2 1EDF xcall _s_ms
01C4 .dbline 48
01C4 ; sendbyte(0);//数码管6
01C4 0027 clr R16
01C6 25DF xcall _sendbyte
01C8 .dbline 49
01C8 ; PORTA|=(1<<ls138a);
01C8 DF9A sbi 0x1b,7
01CA .dbline 50
01CA ; PORTA&=~(1<<ls138b);
01CA DE98 cbi 0x1b,6
01CC .dbline 51
01CC ; PORTA|=(1<<ls138c);
01CC DD9A sbi 0x1b,5
01CE .dbline 52
01CE ; s_ms(600);
01CE 08E5 ldi R16,600
01D0 12E0 ldi R17,2
01D2 16DF xcall _s_ms
01D4 .dbline 53
01D4 ; sendbyte(0);//数码管7
01D4 0027 clr R16
01D6 1DDF xcall _sendbyte
01D8 .dbline 54
01D8 ; PORTA&=~(1<<ls138a);
01D8 DF98 cbi 0x1b,7
01DA .dbline 55
01DA ; PORTA|=(1<<ls138b);
01DA DE9A sbi 0x1b,6
01DC .dbline 56
01DC ; PORTA|=(1<<ls138c);
01DC DD9A sbi 0x1b,5
01DE .dbline 57
01DE ; s_ms(600);
01DE 08E5 ldi R16,600
01E0 12E0 ldi R17,2
01E2 0EDF xcall _s_ms
01E4 .dbline 58
01E4 ; sendbyte(0);//数码管8
01E4 0027 clr R16
01E6 15DF xcall _sendbyte
01E8 .dbline 59
01E8 ; PORTA|=(1<<ls138a);
01E8 DF9A sbi 0x1b,7
01EA .dbline 60
01EA ; PORTA|=(1<<ls138b);
01EA DE9A sbi 0x1b,6
01EC .dbline 61
01EC ; PORTA|=(1<<ls138c);
01EC DD9A sbi 0x1b,5
01EE .dbline 62
01EE ; s_ms(600);
01EE 08E5 ldi R16,600
01F0 12E0 ldi R17,2
01F2 06DF xcall _s_ms
01F4 .dbline -2
01F4 L33:
01F4 .dbline 0 ; func end
01F4 0C940000 xjmp pop_xgset003C
01F8 .dbsym r bb 12 i
01F8 .dbsym r aa 10 c
01F8 .dbend
01F8 .dbfile E:\16实验程序\4x4键盘\4x4key_main.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -