分享

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

 NS 2015-04-12

#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%10;               

             temp=a2/10;

             b=temp%10;

             temp=temp/10;

             c=temp%10;

             temp=temp/10;

     d=temp%10;

             temp=temp/10;     

          e=temp%10;

         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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多