|
51單片機的完整計算器程序
單片機源程序如下:
- ;$$$$變量定義區(30H-)$$$$$
- OUTBIT EQU P2 ; 位控制口
- OUTSEG EQU P0 ; 段控制口
- ROW_COLUMN EQU P1 ; 讀鍵盤行線口
- VARIABLE_DELAY1 EQU 30H ;延時變量
- VARIABLE_DELAY2 EQU 31H
- VARIABLE_STORE1 EQU 32H ;存儲第一個輸入數
- VARIABLE_STORE2 EQU 33H
- VARIABLE_STORE3 EQU 34H ;存儲第二個輸入數
- VARIABLE_STORE4 EQU 35H
- VARIABLE_STORE5 EQU 36H ;存儲最后結果
- VARIABLE_STORE6 EQU 37H
- VARIABLE_INPUT1A EQU 38H ;第一個輸入數保存地址
- VARIABLE_INPUT1B EQU 39H
- VARIABLE_INPUT1C EQU 3AH
- VARIABLE_INPUT1D EQU 3BH
- VARIABLE_INPUT2A EQU 3CH ;第二個輸入數保存地址
- VARIABLE_INPUT2B EQU 3DH
- VARIABLE_INPUT2C EQU 3EH
- VARIABLE_INPUT2D EQU 3FH
- VARIABLE_REPLACE_POINT EQU 40H ;結果顯示位置指針
- ;VARIABLE_RESULTB EQU 41H
- ;VARIABLE_RESULTC EQU 42H
- ;VARIABLE_RESULTD EQU 43H
- VARIABLE_SIGN1 EQU 44H ;保存第一個符號位
- VARIABLE_SIGN2 EQU 45H ;保存第二個符號位
- VARIABLE_INPUT1_POINT EQU 46H ;第一個輸入數狀態指針,記錄輸入的位數
- VARIABLE_INPUT2_POINT EQU 47H ;第二個輸入數狀態指針,記錄輸入的位數
- VARIABLE_RESULT_POINT EQU 48H ;第二個輸入數狀態指針,記錄輸入的位數
- VARIABLE_PLACE1_POINT EQU 49H ;第一個輸入數位置指針
- VARIABLE_PLACE2_POINT EQU 4AH ;第一個輸入數位置指針
- VARIABLE_LEDBUF_POINT EQU 4BH ;第一個輸入數位置指針
- VARIABLE_LEDBUF EQU 4CH ; 顯示緩沖
- S1 EQU 50H ;自定義數字電路入口與出口
- S2 EQU 51H ;功能1實現:將分離個位數字(S1-S5),轉化為十進制,存儲在S6,S7
- S3 EQU 52H ;功能2實現:將十進制位數字(S6-S7),轉化為個位數字,存儲在(S1-S5)
- S4 EQU 53H ;S1(最高位),S5(最低位)
- S5 EQU 54H
- S6 EQU 55H
- S7 EQU 56H
- KEY1 BIT P3.2
- KEY2 BIT P3.3
- KEY3 BIT P3.4
- KEY4 BIT P3.5
- ;****************************************************進入主程序*****************************************************************************
- ORG 0000H
- AJMP STABLE
- ORG 0100H
- ; *****************************************************鍵碼定義和鍵值定義*******************************************************************
- LEDMAP: ; 八段管顯示碼(共陽極)
- DB 0C0h, 0F9h, 0A4h, 0B0h, 099h, 092h, 082h, 0F8h,080h, 090h, 088h, 083h,0C6H
- KEYTABLE:
- DB 00h, 04h, 08h
- DB 01h, 05h, 09h
- DB 02h, 06h, 0Ah
- DB 03h, 07h, 0Bh
- ;$$$$子程序區$$$
- $$$
- ;****************************************************延時程序(30H,31H)**********************************************************************
- DELAY:
- MOV VARIABLE_DELAY1,#10H
- DE1:
- MOV VARIABLE_DELAY2,#06FH
- DE:
- DJNZ VARIABLE_DELAY2,DE
- DJNZ VARIABLE_DELAY1 ,DE1
- RET
- ;***************************************************掃描按鍵程序*****************************************************************************
- SCANNING:
- JNB KEY1,FUNCTION1_SIGN1
- JNB KEY2,FUNCTION2_SIGN1
- JNB KEY3,FUNCTION3_SIGN1
- JNB KEY4,FUNCTION4_SIGN1
- RET
- ;****************************************************第一個符號位保存程序*****************************************************************
- FUNCTION1_SIGN1:
- MOV VARIABLE_SIGN1,#1
- SJMP SCANNING
- FUNCTION2_SIGN1:
- MOV VARIABLE_SIGN1,#2
- SJMP SCANNING
- FUNCTION3_SIGN1:
- MOV VARIABLE_SIGN1,#3
- SJMP SCANNING
- FUNCTION4_SIGN1:
- MOV VARIABLE_SIGN1,#4
- SJMP SCANNING
- ;****************************************************LED顯示程序****************************************************************************
- DISPLAYLED:
- MOV R0, #VARIABLE_LEDBUF
- MOV R1, #4 ; 共4個八段管
- MOV R2, #11111110B ; 從左邊開始顯示
- LOOP:
- MOV OUTBIT, #0FFH ; 關所有八段管
- MOV OUTSEG, @R0
- MOV OUTBIT, R2 ; 顯示一位八段管
- ACALL DELAY ;
- MOV A, R2 ; 位選選中下一位
- RL A ;
- MOV R2, A ;
- INC R0
- DJNZ R1, LOOP
- RET
- ;**************************************************行值局部程序*****************************************************************************
- GET_ROW1:
- MOV A,ROW_COLUMN ; 讀入鍵狀態
- ORL A, #0f8h ; 高5位不用,變為11111
- CPL A ;11111110->00000001,11111101->00000010,11111011->00000100, 1,2,4
- RET
- ;*******************************得到行值程序,出口參數R3(行值)**********************************************************************************
- GET_ROW:
- MOV ROW_COLUMN,#07H ;將行線置1.列線置0
- MOV R3,#0FFH
- ACALL GET_ROW1
- GE1:
- RRC A
- INC R3
- JC GE2
- SJMP GE1
- GE2:
- RET
- ;***************************得到列值程序,出口參數R4(列值),所用寄存器R1,R2******************************************** ***************
- GET_COLUMN:
- MOV ROW_COLUMN,#07H ;將行線置1.列線置0
- MOV R2, #4
- KLoop:
- CJNE R2,#4,NEXT1
- MOV A,#01FH
- AJMP NEXT5
- NEXT1:
- CJNE R2,#3,NEXT2
- MOV A,#02FH
- AJMP NEXT5
- NEXT2:
- CJNE R2,#2,NEXT3
- MOV A,#04FH
- AJMP NEXT5
- NEXT3:
- CJNE R2,#1,NEXT5
- MOV A,#08FH
- NEXT5:
- MOV ROW_COLUMN, a
- ACALL GET_ROW1 ;調用得到行值時需要給出列值的狀態
- JZ GOON1 ;當
- A為零時,說明本列有鍵按下
- DJNZ R2, KLoop ;掃描四次直至將全部列掃描完畢
- GOON1:
- MOV A, #4 ;列值減1
- SUBB A,R2
- MOV R4,A
- RET
- ;************鍵值計算程序,入口參數,R3(行值),R4(列值),出口參數R5(鍵值)******************************************************************
- CALCULATE_KEY: ;鍵值 = 列 X 3 + 行
- MOV A,R4
- MOV B,#3
- MUL AB
- ADD A,R3
- MOV DPTR,#KEYTABLE
- ACALL LOOK_UP_TABLE
- MOV R5,A
- RET
- ;**************************************************按鍵抖動去除程序**********************************************************************
- WAIT_RELEASE:
- ACALL TEST_KEY
- JNZ WAIT_RELEASE
- RET
- ;************************************************得到鍵值總程序,出口參數R5(鍵值)********************************************************************
- GET_KEY:
- ACALL GET_ROW
- ACALL GET_COLUMN
- ACALL CALCULATE_KEY
- ACALL WAIT_RELEASE
- RET
- ;*****************************************************測試按鍵是否按下程序,出口參數A***********************************************
- TEST_KEY:
- MOV ROW_COLUMN,#07H ;將行線置1.列線置0
- ACALL GET_ROW1
- RET
- ;**********************************************計算器輸入第一個數程序****************************************************************
- CALCULATOR_INPUT1: ;USE:R0,R1,R2;出口參數R5
- MOV R1,VARIABLE_PLACE1_POINT ;將所得鍵碼送入相應存儲區
- MOV A,R5
- MOV @R1,A
- INC VARIABLE_PLACE1_POINT
- ACALL LOOK_UP_TABLE1 ;將所得段碼送入相應緩沖區
- MOV R0,VARIABLE_LEDBUF_POINT
- MOV @R0,A
- INC VARIABLE_LEDBUF_POINT
- RET
- ;**********************************************計算器輸入第二個數程序****************************************************************
- CALCULATOR_INPUT2: ;USE:R0,R1,R2;出口參數R5
- CLR C
- MOV A,R5
- CAL1:
- INC VARIABLE_INPUT2_POINT
- MOV R2,VARIABLE_INPUT2_POINT
- CJNE R2,#5,CAL4
- SJMP CAL5 ;輸入四個數后,第五個數一定為符號位
- CAL4:
- SUBB A,#8
- JC CAL2 ;符號位應大等于8
- SJMP CAL3
- CAL2:
- ADDC A,#8
- MOV R1,VARIABLE_PLACE2_POINT ;將所得鍵碼送入相應存儲區
- MOV @R1,A
- INC VARIABLE_PLACE2_POINT
- ACALL LOOK_UP_TABLE1 ;將所得段碼送入相應緩沖區
- MOV R0,VARIABLE_LEDBUF_POINT
- MOV @R0,A
- INC VARIABLE_LEDBUF_POINT
- SJMP CAL5
- CAL3:
- ADD A,#8
- CAL5:
- RET
- ;************************************************************整合程序1***********************************************************************
- INTEGRATE1:
- MOV R7, VARIABLE_INPUT1_POINT
- CJNE R7,#1,FF1
- MOV S5,VARIABLE_INPUT1A
- MOV S1,#0
- MOV S2,#0
- MOV S3,#0
- MOV S4,#0
- LCALL CALCULATOR_INTEGRATE
- AJMP NEXT22
- FF1:
- CJNE R
- 7,#2,FF2
- MOV S4,VARIABLE_INPUT1A
- MOV S5,VARIABLE_INPUT1B
- MOV S2,#0
- MOV S3,#0
- MOV S1,#0
- LCALL CALCULATOR_INTEGRATE
- AJMP NEXT22
- FF2:
- CJNE R7,#3,FF3
- MOV S3,VARIABLE_INPUT1A
- MOV S4,VARIABLE_INPUT1B
- MOV S5,VARIABLE_INPUT1C
- MOV S1,#0
- MOV S2,#0
- LCALL CALCULATOR_INTEGRATE
- AJMP NEXT22
- FF3:
- MOV S2,VARIABLE_INPUT1A
- MOV S3,VARIABLE_INPUT1B
- MOV S4,VARIABLE_INPUT1C
- MOV S5,VARIABLE_INPUT1D
- MOV S1,#0
- LCALL CALCULATOR_INTEGRATE
- NEXT22:
- MOV VARIABLE_STORE1,S6 ;將轉化后的值存在S8和S9中
- MOV VARIABLE_STORE2,S7
- LCALL QL
- MOV VARIABLE_LEDBUF+0, #0FFH ; 顯示管輸完符號位后顯示全滅
- MOV VARIABLE_LEDBUF+1, #0FFH
- MOV VARIABLE_LEDBUF+2, #0FFH
- MOV VARIABLE_LEDBUF+3, #0FFH
- MOV VARIABLE_LEDBUF_POINT,#VARIABLE_LEDBUF
- RET
- ;************************************************************整合程序2***********************************************************************
- INTEGRATE2:
- DEC VARIABLE_INPUT2_POINT
- MOV R7, VARIABLE_INPUT2_POINT
- CJNE R7,#1,FFI1
- MOV S5,VARIABLE_INPUT2A
- MOV S1,#0
- MOV S2,#0
- MOV S3,#0
- MOV S4,#0
- LCALL CALCULATOR_INTEGRATE
- AJMP NEXTI22
- FFI1:
- CJNE R7,#2,FFI2
- MOV S4,VARIABLE_INPUT2A
- MOV S5,VARIABLE_INPUT2B
- MOV S2,#0
- MOV S3,#0
- MOV S1,#0
- LCALL CALCULATOR_INTEGRATE
- AJMP NEXTI22
- FFI2:
- CJNE R7,#3,FFI3
- MOV S3,VARIABLE_INPUT2A
- MOV S4,VARIABLE_INPUT2B
- MOV S5,VARIABLE_INPUT2C
- MOV S1,#0
- MOV S2,#0
- LCALL CALCULATOR_INTEGRATE
- AJMP NEXTI22
- FFI3:
- MOV S2,VARIABLE_INPUT2A
- MOV S3,VARIABLE_INPUT2B
- MOV S4,VARIABLE_INPUT2C
- MOV S5,VARIABLE_INPUT2D
- MOV S1,#0
- LCALL CALCULATOR_INTEGRATE
- NEXTI22:
- MOV VARIABLE_STORE3,S6 ;將轉化后的值存在S8和S9中
- MOV VARIABLE_STORE4,S7
- LCALL QL
- MOV VARIABLE_LEDBUF+0, #0FFH ; 顯示管輸完符號位后顯示全滅
- MOV VARIABLE_LEDBUF+1, #0FFH
- MOV VARIABLE_LEDBUF+2, #0FFH
- MOV VARIABLE_LEDBUF+3, #0FFH
- MOV VARIABLE_LEDBUF_POINT,#VARIABLE_LEDBUF
- RET
- ;**********************************************計算器運算程序*****************************************************************************
- ;***********************************************計算器加法**********************************************************************************
- CALCULATOR_ADDITION:
- MOV R1,VARIABLE_STORE2 ;入口:R1(H),R0,R3(H),R2,出口:和R1(H),R0(L)
- MOV R0,VARIABLE_STORE1
- MOV R3,VARIABLE_STORE4
- MOV R2,VARIABLE_STORE3
- LCALL ADDITION
- MOV VARIABLE_STORE6,R1
- MOV VARIABLE_STORE5,R0
- MOV S7,VARIABLE_STORE6
- MOV S6,VARIABLE_STORE5
- LCALL CALCULATOR_SEPARATE
- RET
- ;*********************************************計算器減法***********************************************************************************
- CALCULATOR_SUBTRACTION:
- MOV R1,VARIABLE_STORE2
- MOV R0,VARIABLE_STORE1
- MOV R3,VARIABLE_STORE4
- MOV R2,VARIABLE_STORE3
- LCALL SUBTRACTION ;入口:減數R3(H),R2(L),被減數R1(H),R0(L),出口:差R1(H),R0(L)
- MOV VARIABLE_STORE6,R1
- MOV VARIABLE_STORE5,R0
- MOV S7,VARIABLE_STORE6
- MOV S6,VARIABLE_STORE5
- LCALL CALCULATOR_SEPARATE
- RET
- ;*********************************************計算器乘法***********************************************************************************
- CALCULATOR_MULTIPLICATION:
- MOV R1,VARIABLE_STORE2
- MOV R0,VARIABLE_STORE1
- MOV R3,VARIABLE_STORE4
- MOV R2,VARIABLE_STORE3
- LCALL MULTIPLICATION ;入口:被乘數R3,R2,乘數R1,R0,結果R7,R6,R5,R4
- MOV VARIABLE_STORE6,R5
- MOV VARIABLE_STORE5,R4
- MOV S7,VARIABLE_STORE6
- MOV S6,VARIABLE_STORE5
- LCALL CALCULATOR_SEPARATE
- RET
- ;*********************************************計算器除法***********************************************************************************
- CALCULATOR_DIVISION:
- MOV R6,VARIABLE_STORE2 ;入口:R6(H),R7(L),被除數,R4(H),R5(L),除數,出口:商R6(H),R7(L),余R4(H),R5(L
- MOV R7,VARIABLE_STORE1
- MOV R4,VARIABLE_STORE4
- MOV R5,VARIABLE_STORE3
- LCALL DIVISION
- MOV VARIABLE_STORE6,R6
- MOV VARIABLE_STORE5,R7
- MOV S7,VARIABLE_STORE6
- MOV S6,VARIABLE_STORE5
- LCALL CALCULATOR_SEPARATE
- RET
- ;*********************************************設立最后計算器顯示的位數和位置***********************************************************************************
- CALCULATOR_RESULT_DESIGN: ;設立最后顯示的位數
- MOV A,S1
- CJNE A,#0,H1
- MOV A,S2
- CJNE A,#0,H2
- MOV A,S3
- CJNE A,#0,H3
- MOV A,S4
- CJNE A,#0,H4
- MOV A,S5
- CJNE A,#0,H5
- RET
- H1:
- MOV VARIABLE_REPLACE_POINT,#S1 ;最后顯示位置指針
- MOV VARIABLE_RESULT_POINT,#5
- RET
- H2:
- MOV VARIABLE_REPLACE_POINT,#S2
- MOV VARIABLE_RESULT_POINT,#4
- RET
- H3:
- MOV VARIABLE_REPLACE_POINT,#S3
- MOV VARIABLE_RESULT_POINT,#3
- RET
- H4:
- MOV VARIABLE_REPLACE_POINT,#S4
- MOV VARIABLE_RESULT_POINT,#2
- RET
- H5:
- MOV VARIABLE_REPLACE_POINT,#S5
- MOV VARIABLE_RESULT_POINT,#1
- RET
- ;***********************************************************顯示結果送入緩沖區************************************************************
- RESULT_LEDBUF:
- MOV R7,#0
- NEXTR77:
- MOV A,R7
- CJNE A,VARIABLE_RESULT_POINT,NEXTR8 ;控制顯示位數
- RET
- NEXTR8:
- INC R7
- MOV R1,VARIABLE_REPLACE_POINT ;將顯示位置的數字送給A寄存器
- MOV A,@R1
- LCALL LOOK_UP_TABLE1
- INC VARIABLE_REPLACE_POINT ;顯示位置后移
- MOV R0,VARIABLE_LEDBUF_POINT ;將要顯示段碼送給緩沖區
- MOV @R0,A
- INC VARIABLE_LEDBUF_POINT
- SJMP NEXTR77
- ;;**********************************************************數字電路整合功能***************************************************************
- CALCULATOR_INTEGRATE: ;出口參數S6,S7,入口參數,S1,S2,S3,S4,S5
- ACALL QL
- MOV R0,S1
- MOV R1,#0
- MOV DPTR, #10000
- MOV R3, DPH
- MOV R2, DPL
- ACALL MULTIPLICATION
- MOV S7, R5
- MOV S6, R4
- ACALL QL
- MOV R0,S2
- MOV R1,#0
- MOV DPTR, #1000
- MOV R3, DPH
- MOV R2,DPL
- ACALL MULTIPLICATION
- MOV A,R5
- MOV R1,A
- MOV A,R4
- MOV R0,A
- MOV R3,S7
- MOV R2,S6
- ACALL ADDITION
- MOV S7, R1
- MOV S6 ,R0
- ACALL QL
- MOV R0,S3
- MOV R1,#0
- MOV DPTR, #100
- MOV R3, DPH
- MOV R2, DPL
- ACALL MULTIPLICATION
- MOV A,R5
- MOV R1,A
- MOV A,R4
- MOV R0,A
- MOV R3,S7
- MOV R2,S6
- ACALL ADDITION
- MOV S7, R1
- MOV S6 ,R0
- ACALL QL
- MOV R0,S4
- MOV R1,#0
- MOV DPTR, #10
- MOV R3, DPH
- MOV R2, DPL
- ACALL MULTIPLICATION
- MOV A,R5
- MOV R1,A
- MOV A,R4
- MOV R0,A
- MOV R3,S7
- MOV R2,S6
- ACALL ADDITION
- MOV S7, R1
- MOV S6 ,R0
- ACALL QL
- MOV R0,S5
- MOV R1,#0
- MOV DPTR, #1
- MOV R3, DPH
- MOV R2, DPL
- ACALL MULTIPLICATION
- MOV A,R5
- MOV R1,A
- MOV A,R4
- MOV R0,A
- MOV R3,S7
- MOV R2,S6
- ACALL ADDITION
- MOV S7, R1
- MOV S6 ,R0
- RET
- ;************************************************************數字電路分離功能**************************************************************
- CALCULATOR_SEPARATE: ;入口參數S6,S7,出口參數,S1,S2,S3,S4,S5
- ACALL QL
- MOV R6,S7
- MOV R7,S6
- MOV DPTR, #10000
- MOV R4, DPH
- MOV R5, DPL
- ACALL DIVISION
- MOV S1,R7
- MOV S7,R4
- MOV S6,R5
- ACALL QL
- MOV R6,S7
- MOV R7,S6
- MOV DPTR, #1000
- MOV R4, DPH
- MOV R5, DPL
- ACALL DIVISION
- MOV S2,R7
- MOV S7,R4
- MOV S6,R5
- ACALL QL
- MOV R6,S7
- MOV R7,S6
- MOV DPTR, #100
- MOV R4, DPH
- MOV R5, DPL
- ACALL DIVISION
- MOV S3,R7
- MOV S7,R4
- MOV S6,R5
- ACALL QL
- MOV R6,S7
- MOV R7,S6
- MOV DPTR, #10
- MOV R4, DPH
- MOV R5, DPL
- ACALL DIVISION
- MOV S4,R7
- MOV S7,R4
- MOV S6,R5
- ACALL QL
- MOV R6,S7
- MOV R7,S6
- MOV DPTR, #1
- MOV R4, DPH
- MOV R5, DPL
- ACALL DIVISION
- MOV S5,R7
- RET
- ;****************************************************0—-65535之內加減乘除*******************************************************************
- ;**********************************************************加法******************************************************************************
- ADDITION: ;入口:R1(H),R0,R3(H),R2,出口:和R1(H),R0(L)
- MOV A,R0
- ADD A,R2
- MOV R0,A
- MOV A,R1
- ADDC A,R3
- MOV R1,A
- RET
- ;**********************************************************減法******************************************************************************
- SUBTRACTION: ;入口:減數R3(H),R2(L),被減數R1(H),R0(L),出口:差R1(H),R0(L)
- CLR C
- MOV A,R0
- SUBB A,R2
- MOV R0,A
- MOV A,R1
- SUBB A,R3
- MOV R1,A
- RET
- ;**********************************************************乘法******************************************************************************
- MULTIPLICATION: ;入口:被乘數R3,R2,乘數R1,R0,結果R7,R6,R5,R4
- CLR A
- MOV
- R7, A
- MOV R6, A
- MOV R5, A
- MOV R4, A
- MOV 46H, #10H
- MULLOOP1:
- CLR C
- MOV A, R4
- RLC A
- MOV R4, A
- MOV A, R5
- RLC A
- MOV R5, A
- MOV A, R6
- RLC A
- MOV R6, A
- MOV A, R7
- RLC A
- MOV R7, A
- MOV A, R0
- RLC A
- MOV R0, A
- MOV A, R1
- RLC A
- MOV R1,A
- JNC MULLOOP2
- CLR C
- MOV A, R4
- ADDC A, R2
- MOV R4, A
- MOV A, R5
- ADDC A, R3
- MOV R5, A
- MOV A, R6
- ADDC A, #00H
- MOV R6, A
- MOV A, R7
- ADDC A, #00H
- MOV R7, A
- MULLOOP2: DJNZ 46H,MULLOOP1
- RET
- ;**********************************************************除法******************************************************************************
- DIVISION: ;入口:R6(H),R7(L),被除數,R4(H),R5(L),除數,出口:商R6(H),R7(L),余R4(H),R5(L)
- UDIV:
- CLR C
- CLR A
- MOV R2,A
- MOV R3,A
- MOV B,#10H
- MOVBIT: MOV A,R7;R6、R7中數據左移一位到R2、R3中,C到R7
- RLC A
- MOV R7,A
- MOV A,R6
- RLC A
- MOV R6,A
- MOV A,R3
- RLC A
- MOV R3,A
- MOV A,R2
- RLC A
- MOV R2,A
- CLR C ;R2R3-R4R5
- MOV A,R3
- SUBB A,R5
- PUSH Acc
- MOV A,R2
- SUBB A,R4
- JBC Cy,MOVBIT0;不夠減,清C繼續左移
- MOV R2,A;夠減,存回余數并置位C
- POP Acc
- MOV R3,A
- SETB C
- SJMP MOVBIT1
- MOVBIT0: POP Acc
- MOVBIT1: DJNZ B,MOVBIT
- MOV A,R7
- RLC A
- MOV R7,A
- MOV A,R6
- RLC A
- MOV R6,A
- MOV A,R2
- MOV R4,A
- MOV A,R3
- MOV R5,A
- RET
- ;**********************************************************寄存器清零******************************************************************************
- QL:
- MOV R0,#0
- MOV R1,#0
- MOV R2,#0
- MOV R3,#0
- MOV R4,#0
- MOV R5,#0
- MOV R6,#0
- MOV R7,#0
- RET
- ;###################################################查表源程序,入口參數A,DPTR#############################################################
- LOOK_UP_TABLE:
- MOVC A, @A+DPTR
- RET
- ;***************************************************查表程序1,入口參數A********************************************************************************
- LOOK_UP_TABLE1:
- MOV DPTR,#LEDMAP
- MOVC A, @A+DPTR
- RET
- ;###################################################初始化顯示緩沖區程序###################################################################
- INIT_LEDBUF:
- MOV VARIABLE_LEDBUF+0,#0FFH
- MOV VARIABLE_LEDBUF+1,#0FFH
- MOV VARIABLE_LEDBUF+2,#0FFH
- MOV VARIABLE_LEDBUF+3,#0FFH
- MOV ROW_COLUMN,#07H
- ;###################################################變量初始化程序##########################################################################
- INIT_VARIABLE:
- MOV VARIABLE_STORE1,#0
- MOV VARIABLE_STORE2,#0
- MOV VARIABLE_STORE3,#0
- MOV VARIABLE_STORE4,#0
- MOV VARIABLE_STORE5,#0
- MOV VARIABLE_STORE6,#0
- MOV VARIABLE_INPUT1A,#0
- MOV VARIABLE_INPUT1B,#0
- MOV VARIABLE_INPUT1C,#0
- MOV VARIABLE_INPUT1D,#0
- MOV VARIABLE_INPUT2A,#0
- MOV VARIABLE_INPUT2B,#0
- MOV VARIABLE_INPUT2C,#0
- MOV
- VARIABLE_INPUT2D,#0
- MOV VARIABLE_REPLACE_POINT,#0
- ;MOV VARIABLE_RESULTB,#0
- ;MOV VARIABLE_RESULTC,#0
- ;MOV VARIABLE_RESULTD,#0
- MOV VARIABLE_SIGN1,#0
- MOV VARIABLE_SIGN2,#0
- MOV VARIABLE_INPUT1_POINT,#0
- MOV VARIABLE_INPUT2_POINT,#0
- MOV VARIABLE_RESULT_POINT,#0
- MOV VARIABLE_PLACE1_POINT,#VARIABLE_INPUT1A
- MOV VARIABLE_PLACE2_POINT,#VARIABLE_INPUT2A
- MOV VARIABLE_LEDBUF_POINT,#VARIABLE_LEDBUF
- MOV S1,#0
- MOV S2,#0
- MOV S3,#0
- MOV S4,#0
- MOV S5,#0
- MOV S6,#0
- MOV S7,#0
- SETB KEY1
- SETB KEY2
- SETB KEY3
- SETB KEY4
- RET
- ;***************************************************初始化程序******************************************************************************
- INIT:
- ACALL INIT_VARIABLE
- ACALL INIT_LEDBUF
- RET
- ;$$$$主程序區$$$$$
- STABLE:
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
51單片機的完整計算器程序.rar
(4.21 KB, 下載次數: 69)
2017-5-31 12:09 上傳
點擊文件名下載附件
51單片機的完整計算器程序
|
|