⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4x4key_main.lis

📁 16个单片机c语言实验程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -