基于51单片机设计简单计算器,实现6位有效四则运算的程序设计(汇编调用C)

    技术2022-05-11  6

    #include <reg51.h>

    #include <absacc.h>          

    #include <math.h>

    #pragma NOREGPARMS

     

          

    #define a DBYTE[0x30]        

    #define b DBYTE[0x31]        

    #define cDBYTE[0x32]         

    #define dDBYTE[0x33]        

    #define e  DBYTE[0x34]     

    #define f  DBYTE[0x35]      

     

     

    #define ww  DBYTE[0x39]     

    #define flag DBYTE[0x20]      

     

    unsigned long data a0 _at_ 0x42;    

    unsigned long data a1 _at_ 0x48;    

    unsigned long data a2 _at_ 0x52; 

     

     

    voidcount()                   

    {

    unsigned int temp;              

    if(ww==1) 

          {

            a0=f*100000+e*10000+d*1000+c*100+b*10+a;

          }

    if((flag>0)&&(!ww))

          {

                 a1=f*100000+e*10000+d*1000+c*100+b*10+a;

     

     

                 if(flag==1)a2=a1+a0;

                 if(flag==2)a2=a0-a1;

                 if(flag==3)a2=a1*a0;

                 if(flag==4)a2=a0/a1;

                 a=a2;               

                 temp=a2/10;

                 b=temp;

                 temp=temp/10;

                 c=temp;

                 temp=temp/10;

         d=temp;

                 temp=temp/10;     

              e=temp;

             f=temp/10;

          }

    }

     

     

     

     

     

     

     

     

     

     

     

    EXTRN CODE(COUNT)

    ORG 0000H

    MAIN:

        MOV  R0,#30H

        MOV  R4,# 8

    CLEAR :

         MOV @R0,#00H

         INC  R0

         DJNZ  R4,CLEAR

    START:LCALL DISPLAY

         MOV P0,#0FH

         MOV A,P0

         CJNE A,#0FH,D1

         LJMP START

     

     

    D1:  MOV 40H,A

         MOV P0,#0F0H

         MOV A,P0

         MOV 41H,A

    D2:  MOV P0,#0F0H

         MOV A,P0

         CJNE A,41H,D3

         LCALL DISPLAY

         LJMP D2

    D3:  MOV A,41H

         ADD A,40H

         CJNE A,#0EEH,D4

         MOV 40H,#1

         LJMP D20

    D4:  CJNE A,#0DEH,D5

         MOV 40H,#2

         LJMP D20

    D5:  CJNE A,#0BEH,D6

         MOV 40H,#3

         LJMP D20

    D6: CJNE A,#7EH,D7

         MOV 40H,#4

         LJMP D20

    D7: CJNE A,#0EDH,D8

         MOV 40H,#5

         LJMP D20

    D8: CJNE A,#0DDH,D9

         MOV 40H,#6

         LJMP D20

    D9: CJNE A,#0BDH,D10

         MOV 40H,#7

            LJMP D20

    D10:    CJNE A,#7DH,D11

          MOV 40H,#8

         LJMP D20

    D11: CJNE A,#0EBH,D12

            MOV 40H,#9

            LJMP D20

    D12: CJNE A,#0DBH,D13

            MOV 40H,#0

            LJMP D20

    D13: CJNE A,#0BBH,D14  

        MOV 39H,#1

        MOV 20H,#1

        CALL D22

        MOV 39H,#0

    D14: CJNE A,#7BH,D15     

        MOV 39H,#1

        MOV 20H,#2

        CALL D22

        MOV 39H,#0

    D15: CJNE A,#0E7H,D16   

        MOV 39H,#1

        MOV 20H,#3

        CALL D22

        MOV 39H,#0

    D16: CJNE A,#0D7H,D17   

        MOV 39H,#1

        MOV 20H,#4

        CALL D22

        MOV 39H,#0

    D17: CJNE A,#0B7H,D18   

        CALL D22

        LJMP START

    D18: LJMP MAIN           

     

    D20: MOV R0,#30H

       MOV R1,#8

     MOV A,40H

    D21:XCH A,@R0

    INC R0

    DJNZ R1,D21

    LJMP START

     

    D22: PUSH PSW

    PUSH ACC

    LCALL COUNT  

    POP ACC

    POP PSW

    RET

     

    DISPLAY:CLR F0 

           MOV A,37H

           JZ  LED6

           SETB F0

           ADD A,#70H

           MOV P1,A

           CALL DELAY

    LED6:MOV A,36H

           JB  F0,DIS6

           JZ  LED5

           SETB F0

    DIS6: ADD A,#60H

           MOV P1,A

           CALL DELAY

    LED5:MOV A,35H 

           JB  F0,DIS5

           JZ  LED4

          SETB      F0

    DIS5:ADD A,#50H              

           MOV P1,A

           CALL DELAY

    LED4:MOV   A,34H

           JB  F0,DIS4

           JZ  LED3

           SETB F0

    DIS4:ADD A,#40H

           MOV P1,A

           CALL DELAY

    LED3:MOV   A,33H

           JB  F0,DIS3

           JZ  LED2

           SETB F0

    DIS3:ADD A,#30H

           MOV P1,A

           CALL DELAY

    LED2:MOV   A,32H

           JB  F0,DIS2

           JZ  LED1

           SETB F0

    DIS2:ADD A,#20H

           MOV P1,A

           CALL DELAY

    LED1:MOV   A,31H

           JB  F0,DIS1

           JZ  LED0

           SETB F0

    DIS1:ADD A,#10H

           MOV P1,A

           CALL DELAY

     

    LED0:MOV A,30H 

           MOV P1,A

           CALL DELAY

           RET

    DELAY: MOV R6,#02

    Dl1: MOV R7,#200

              DJNZ R7,$

              DJNZ R6,Dl1

              RET

     

            END

     


    最新回复(0)