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

📄 mian.lis

📁 通过单片机实现计算器的功能
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00E8           ; }
 00E8 CADF              xcall _LCD_en_write
 00EA                   .dbline 102
 00EA           ; 
 00EA 842F              mov R24,R20
 00EC 8F70              andi R24,#0x0F
 00EE 8295              swap R24
 00F0 482F              mov R20,R24
 00F2                   .dbline 103
 00F2           ; 
 00F2 8BB3              in R24,0x1b
 00F4 8F70              andi R24,15
 00F6 8BBB              out 0x1b,R24
 00F8                   .dbline 104
 00F8           ; 
 00F8 842F              mov R24,R20
 00FA 807F              andi R24,240
 00FC 2BB2              in R2,0x1b
 00FE 282A              or R2,R24
 0100 2BBA              out 0x1b,R2
 0102                   .dbline 105
 0102           ; void process_data(void)//数字处理函数
 0102 BDDF              xcall _LCD_en_write
 0104                   .dbline -2
 0104           L20:
 0104 0E940000          xcall pop_gset1
 0108                   .dbline 0 ; func end
 0108 0895              ret
 010A                   .dbsym r data 20 c
 010A                   .dbend
 010A                   .dbfunc e LCD_set_xy _LCD_set_xy fV
 010A           ;        address -> R20
 010A           ;              y -> R20
 010A           ;              x -> R22
                        .even
 010A           _LCD_set_xy::
 010A 0E940000          xcall push_gset2
 010E 422F              mov R20,R18
 0110 602F              mov R22,R16
 0112                   .dbline -1
 0112                   .dbline 124
 0112           ; {if(a1[3]!=32){data1=(a1[0]-48)*1000+(a1[1]-48)*100+(a1[2]-48)*10+(a1[3]-48);}
 0112           ;   else if(a1[2]!=32){data1=(a1[0]-48)*100+(a1[1]-48)*10+(a1[2]-48);}
 0112           ;    else if(a1[1]!=32){data1=(a1[0]-48)*10+(a1[1]-48);}
 0112           ;        else if(a1[0]!=32){data1=a1[0]-48;}
 0112           ;          else data1=0;//ASCII-48才是对应的数字
 0112           ;          
 0112           ; if(a2[3]!=32){data2=(a2[0]-48)*1000+(a2[1]-48)*100+(a2[2]-48)*10+(a2[3]-48);}
 0112           ;   else if(a2[2]!=32){data2=(a2[0]-48)*100+(a2[1]-48)*10+(a2[2]-48);}
 0112           ;    else if(a2[1]!=32){data2=(a2[0]-48)*10+(a2[1]-48);}
 0112           ;        else if(a2[0]!=32){data2=a2[0]-48;}
 0112           ;          else data2=0;
 0112           ;       
 0112           ; process_count();//数据处理完毕调用运算函数
 0112           ; }
 0112           ; 
 0112           ; void process_count(void)//运算函数
 0112           ; {if(flag_count=='+')result=data1+data2;
 0112           ; if(flag_count=='-')result=data1-data2;
 0112           ; if(flag_count=='*')result=data1*data2;
 0112                   .dbline 126
 0112           ; if(flag_count=='/')result=data1/data2;
 0112           ; display_result();//运算完毕调用结果处理函数
 0112 4423              tst R20
 0114 19F4              brne L22
 0116                   .dbline 126
 0116 462F              mov R20,R22
 0118 4058              subi R20,128    ; addi 128
 011A 02C0              xjmp L23
 011C           L22:
 011C                   .dbline 127
 011C           ; }
 011C 462F              mov R20,R22
 011E 4054              subi R20,64    ; addi 192
 0120           L23:
 0120                   .dbline 128
 0120           ; 
 0120 042F              mov R16,R20
 0122 B3DF              xcall _LCD_write_command
 0124                   .dbline -2
 0124           L21:
 0124 0E940000          xcall pop_gset2
 0128                   .dbline 0 ; func end
 0128 0895              ret
 012A                   .dbsym r address 20 c
 012A                   .dbsym r y 20 c
 012A                   .dbsym r x 22 c
 012A                   .dbend
 012A                   .dbfunc e LCD_write_string _LCD_write_string fV
 012A           ;              s -> R20,R21
 012A           ;              Y -> R10
 012A           ;              X -> R22
                        .even
 012A           _LCD_write_string::
 012A 0E940000          xcall push_gset3
 012E A22E              mov R10,R18
 0130 602F              mov R22,R16
 0132 4E81              ldd R20,y+6
 0134 5F81              ldd R21,y+7
 0136                   .dbline -1
 0136                   .dbline 132
 0136           ; void display_result(void)//结果处理函数
 0136           ; {if(result>9999)error=1;//溢出
 0136           ; if(result<0&&flag_count=='-'){result_dp[0]='-';result=result*(-1);}//符号处理
 0136           ; if(result<0&&flag_count!='-')error=1; //只有减法有可能出现负数
 0136                   .dbline 133
 0136           ; if(flag_count=='/'&&data2==0)error=1;//除法时除数不能为0
 0136 2A2D              mov R18,R10
 0138 062F              mov R16,R22
 013A E7DF              xcall _LCD_set_xy
 013C 05C0              xjmp L26
 013E           L25:
 013E                   .dbline 135
 013E                   .dbline 136
 013E FA01              movw R30,R20
 0140 0081              ldd R16,z+0
 0142 C3DF              xcall _LCD_write_data
 0144                   .dbline 137
 0144 4F5F              subi R20,255  ; offset = 1
 0146 5F4F              sbci R21,255
 0148                   .dbline 138
 0148           L26:
 0148                   .dbline 134
 0148           ; 
 0148 FA01              movw R30,R20
 014A 2080              ldd R2,z+0
 014C 2220              tst R2
 014E B9F7              brne L25
 0150                   .dbline -2
 0150           L24:
 0150 0E940000          xcall pop_gset3
 0154                   .dbline 0 ; func end
 0154 0895              ret
 0156                   .dbsym r s 20 pc
 0156                   .dbsym r Y 10 c
 0156                   .dbsym r X 22 c
 0156                   .dbend
 0156                   .dbfunc e LCD_write_char _LCD_write_char fV
 0156           ;           data -> y+4
 0156           ;              Y -> R22
 0156           ;              X -> R20
                        .even
 0156           _LCD_write_char::
 0156 0E940000          xcall push_gset2
 015A 622F              mov R22,R18
 015C 402F              mov R20,R16
 015E                   .dbline -1
 015E                   .dbline 143
 015E           ; 
 015E           ; result_dp[1]=result/10000+48;//显示处理
 015E           ; result_dp[2]=result/1000%10+48;
 015E           ; result_dp[3]=result/100%10+48;
 015E           ; result_dp[4]=result/10%10+48;
 015E           ; result_dp[5]=result%10+48;
 015E           ;  if(result_dp[1]==48)//显示修正,首位不能显示0
 015E           ;  {result_dp[1]=32;
 015E           ;  if(result_dp[2]==48)
 015E                   .dbline 144
 015E           ;    {result_dp[2]=32;
 015E 262F              mov R18,R22
 0160 042F              mov R16,R20
 0162 D3DF              xcall _LCD_set_xy
 0164                   .dbline 145
 0164           ;     if(result_dp[3]==48)
 0164 0C81              ldd R16,y+4
 0166 B1DF              xcall _LCD_write_data
 0168                   .dbline -2
 0168           L28:
 0168 0E940000          xcall pop_gset2
 016C                   .dbline 0 ; func end
 016C 0895              ret
 016E                   .dbsym l data 4 c
 016E                   .dbsym r Y 22 c
 016E                   .dbsym r X 20 c
 016E                   .dbend
 016E                   .dbfile D:\avr\+++精华+++\计算器/key.h
 016E                   .dbfunc e key_read _key_read fc
 016E           ;              i -> R20
                        .even
 016E           _key_read::
 016E 0E940000          xcall push_gset1
 0172                   .dbline -1
 0172                   .dbline 7
 0172                   .dbline 10
 0172 80EF              ldi R24,240
 0174 87BB              out 0x17,R24
 0176                   .dbline 11
 0176 8FE0              ldi R24,15
 0178 88BB              out 0x18,R24
 017A                   .dbline 12
 017A 01E0              ldi R16,1
 017C 10E0              ldi R17,0
 017E 5BDF              xcall _delay_nms
 0180                   .dbline 14
 0180 46B3              in R20,0x16
 0182 4F70              andi R20,15
 0184                   .dbline 17
 0184 8FE0              ldi R24,15
 0186 87BB              out 0x17,R24
 0188                   .dbline 18
 0188 80EF              ldi R24,240
 018A 88BB              out 0x18,R24
 018C                   .dbline 19
 018C 01E0              ldi R16,1
 018E 10E0              ldi R17,0
 0190 52DF              xcall _delay_nms
 0192                   .dbline 21
 0192 86B3              in R24,0x16
 0194 807F              andi R24,240
 0196 482B              or R20,R24
 0198                   .dbline 23
 0198 5527              clr R21
 019A 473D              cpi R20,215
 019C E0E0              ldi R30,0
 019E 5E07              cpc R21,R30
 01A0 09F4              brne X1
 01A2 75C0              xjmp L47
 01A4           X1:
 01A4 4B3D              cpi R20,219
 01A6 E0E0              ldi R30,0
 01A8 5E07              cpc R21,R30
 01AA 09F4              brne X2
 01AC 68C0              xjmp L43
 01AE           X2:
 01AE 4D3D              cpi R20,221
 01B0 E0E0              ldi R30,0
 01B2 5E07              cpc R21,R30
 01B4 09F4              brne X3
 01B6 5BC0              xjmp L39
 01B8           X3:
 01B8 4E3D              cpi R20,222
 01BA E0E0              ldi R30,0
 01BC 5E07              cpc R21,R30
 01BE 09F4              brne X4
 01C0 4EC0              xjmp L35
 01C2           X4:
 01C2 8EED              ldi R24,222
 01C4 90E0              ldi R25,0
 01C6 8417              cp R24,R20
 01C8 9507              cpc R25,R21
 01CA 64F1              brlt L51
 01CC           L50:
 01CC 4737              cpi R20,119
 01CE E0E0              ldi R30,0
 01D0 5E07              cpc R21,R30
 01D2 09F4              brne X5
 01D4 60C0              xjmp L49
 01D6           X5:
 01D6 4B37              cpi R20,123
 01D8 E0E0              ldi R30,0
 01DA 5E07              cpc R21,R30
 01DC 09F4              brne X6
 01DE 53C0              xjmp L45
 01E0           X6:
 01E0 4D37              cpi R20,125
 01E2 E0E0              ldi R30,0
 01E4 5E07              cpc R21,R30
 01E6 09F4              brne X7
 01E8 46C0              xjmp L41
 01EA           X7:
 01EA 4E37              cpi R20,126
 01EC E0E0              ldi R30,0
 01EE 5E07              cpc R21,R30
 01F0 09F4              brne X8
 01F2 39C0              xjmp L37
 01F4           X8:
 01F4 4737              cpi R20,119
 01F6 E0E0              ldi R30,0
 01F8 5E07              cpc R21,R30
 01FA 0CF4              brge X9
 01FC 4EC0              xjmp L30
 01FE           X9:
 01FE           L52:
 01FE 473B              cpi R20,183
 0200 E0E0              ldi R30,0
 0202 5E07              cpc R21,R30
 0204 09F4              brne X10
 0206 45C0              xjmp L48
 0208           X10:
 0208 4B3B              cpi R20,187
 020A E0E0              ldi R30,0
 020C 5E07              cpc R21,R30
 020E 09F4              brne X11
 0210 38C0              xjmp L44
 0212           X11:
 0212 4D3B              cpi R20,189
 0214 E0E0              ldi R30,0
 0216 5E07              cpc R21,R30
 0218 61F1              breq L40
 021A 4E3B              cpi R20,190
 021C E0E0              ldi R30,0
 021E 5E07              cpc R21,R30
 0220 01F1              breq L36
 0222 3BC0              xjmp L30
 0224           L51:
 0224 473E              cpi R20,231
 0226 E0E0              ldi R30,0
 0228 5E07              cpc R21,R30
 022A 79F1              breq L46
 022C 4B3E              cpi R20,235
 022E E0E0              ldi R30,0
 0230 5E07              cpc R21,R30
 0232 19F1              breq L42
 0234 4D3E              cpi R20,237
 0236 E0E0              ldi R30,0
 0238 5E07              cpc R21,R30
 023A B9F0              breq L38
 023C 4E3E              cpi R20,238
 023E E0E0              ldi R30,0
 0240 5E07              cpc R21,R30
 0242 59F0              breq L34
 0244 473E              cpi R20,231
 0246 E0E0              ldi R30,0
 0248 5E07              cpc R21,R30
 024A 3CF1              brlt L30
 024C           L53:
 024C 4F3F              cpi R20,255
 024E E0E0              ldi R30,0
 0250 5E07              cpc R21,R30
 0252 09F0              breq L33
 0254 22C0              xjmp L30
 0256           X0:
 0256                   .dbline 24
 0256           L33:
 0256                   .dbline 25
 0256 0027              clr R16
 0258 21C0              xjmp L29
 025A           L34:
 025A                   .dbline 26
 025A 0FE2              ldi R16,47
 025C 1FC0              xjmp L29
 025E           L35:
 025E                   .dbline 27
 025E 0DE3              ldi R16,61
 0260 1DC0              xjmp L29
 0262           L36:
 0262                   .dbline 28
 0262 00E3              ldi R16,48
 0264 1BC0              xjmp L29
 0266           L37:
 0266                   .dbline 29
 0266 02E5              ldi R16,82
 0268 19C0              xjmp L29
 026A           L38:
 026A                   .dbline 30

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -