STc-12C5A60S2-LCD1602顯示屏-18650充電便攜式電壓電流功率表
制作出來的實物圖如下:
IMG_20210201_105726.jpg (3.38 MB, 下載次數: 66)
下載附件
實物2
2021-2-1 15:43 上傳
IMG_20210201_105716.jpg (1.97 MB, 下載次數: 58)
下載附件
實物1
2021-2-1 15:43 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
圖片一張.png (26.66 KB, 下載次數: 56)
下載附件
pcb
2021-2-1 15:43 上傳
原理圖.png (28.52 KB, 下載次數: 55)
下載附件
2021-2-1 15:43 上傳
單片機匯編語言源程序如下:
- ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
- ;字節地址分配
- ;0C\0D\0E\4位分別對應電流的3位由高位到底位
- ;10H,11H,12H對應電壓的3個數值
- ;13H,14H,15H,16H,17H對應功率的5個數值
- ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
- P1ASF EQU 9DH ;P1口設置寄存器
- ADC_CONTOR EQU BCH ;ADC控制寄存器
- ADC_RES EQU BDH ;ADC輸出高8位
- ADC_RESL EQU BEH ;ADC低8為輸出
- AUXR1 EQU A2H ;設置寄存器
- IJISHU EQU 30H ;電流比較次數計數
- UJISHU EQU 31H ;電壓比較次數計數
- IL EQU 32H ;電流低位
- IH EQU 33H ;電流高位
- UL EQU 34H ;電壓低位
- UH EQU 35H ;電壓高位
- RS BIT P2.5 ;定義RS為P2.5
- RW BIT P2.6 ;定義RW為P2.6
- E BIT P2.7 ;定義E為P2.7
- ORG 0000H
- LJMP START
- ORG 002BH
- START: MOV P1ASF,#00000011B ;開啟P1.0和P1.1作為AD的輸入端口
- MOV AUXR1,#04H ;設置AD輸出方式
- MOV SP,#5FH ;設置棧底
- MOV IJISHU,#00H
- MOV UJISHU,#00H
- ;×××××××××××××××××××××××××
- LCD: MOV P0,#38H ;設置功能
- LCALL XML
- MOV P0,#38H ;設置功能
- LCALL XML
- MOV P0,#01H ;清除屏幕
- LCALL XML
- MOV P0,#0CH ;設置顯示屏開,光標關
- LCALL XML
- MOV P0,#1CH ;設置
- LCALL XML
- ;×××××××××××××××××××××××××××
- ;主程序
- ;--------------------------------------------------------------------------------------------------
- MAIN: MOV ADC_CONTOR,#11001001B ;開啟P1.1的AD轉換,電流
- LCALL AD ;調用AD子程序
- MOV A,ADC_RES
- CJNE A,IH,MAINI
- MOV A,ADC_RESL
- CJNE A,IL,MAINI
- MOV IJISHU,#00H
- SJMP MAINI1
- MAINI: INC IJISHU
- MOV A,#20
- CJNE A,IJISHU,MAINI1
- MOV IJISHU,#00H
- MOV IH,ADC_RES ;保存電流數據
- MOV IL,ADC_RESL
- MAINI1: MOV 0AH,IH
- MOV 0BH,IL
- LCALL 2TO10
- MOV 0CH,18H
- MOV 0DH,19H
- MOV 0EH,1AH
- MOV A,0AH
- RRC A
- MOV 0AH,A
- MOV A,0BH
- RRC A
- MOV 0BH,A
- MOV A,0AH
- RRC A
- MOV A,0BH
- RRC A
- MOV 09H,A ;09H保存8位電流數據
- MOV ADC_CONTOR,#11001000B ;開啟P1.0的AD轉換 電壓
- LCALL AD ;調用AD子程序
- MOV A,ADC_RES
- CJNE A,UH,MAINU
- MOV A,ADC_RESL
- CJNE A,UL,MAINU
- MOV UJISHU,#00H
- SJMP MAINU1
- MAINU: INC UJISHU
- MOV A,#20
- CJNE A,UJISHU,MAINU1
- MOV UJISHU,#00H
- MOV UH,ADC_RES ;保存電壓數據
- MOV UL,ADC_RESL
- MAINU1: MOV 0AH,UH
- MOV 0BH,UL
- LCALL 2TO10
- MOV 10H,18H
- MOV 11H,19H
- MOV 12H,1AH
- MOV A,0AH
- RRC A
- MOV 0AH,A
- MOV A,0BH
- RRC A
- MOV 0BH,A
- MOV A,0AH
- RRC A
- MOV A,0BH
- RRC A
- MOV 08H,A ;08H保存8位電壓數據
- MOV B,09H
- MUL AB
- MOV R2,B
- MOV R3,A
- MOV R4,#61H ;/25000
- MOV R5,#A8H
- LCALL DIVD
- MOV A,R7
- ADD A,#30H
- MOV 13H,A
- MOV R4,#09H
- MOV R5,#C4H ;/2500
- LCALL DIVD
- MOV A,R7
- ADD A,#30H
- MOV 14H,A
- MOV R4,#00H
- MOV R5,#250 ;/250
- LCALL DIVD
- MOV A,R7
- ADD A,#30H
- MOV 15H,A
- MOV R4,#00H
- MOV R5,#25 ;/25
- LCALL DIVD
- MOV A,R7
- ADD A,#30H
- MOV 16H,A
- MOV A,R3
- CLR C
- RLC A
- CLR C
- RLC A
- MOV R3,A
- MOV R5,#10
- LCALL DIVD
- MOV A,R7
- ADD A,#30H
- MOV 17H,A
- LCALL XIANSHI
- LJMP MAIN
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- ;AD轉換子程序
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- AD: MOV A,ADC_CONTOR
- JNB E4H,AD
- CLR E4H
- MOV ADC_CONTOR,A
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- ;二-十進制轉換子程序,同時加便宜量完成1602的0-9字模地址的轉換 輸出結果18H 19H 1AH
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- 2TO10: MOV R2,0AH
- MOV R3,0BH
- MOV R4,#0
- MOV R5,#2
- LCALL DIVD
- MOV A,R6
- MOV R2,A
- MOV A,R7
- MOV R3,A
- MOV R4,#00H
- MOV R5,#100
- LCALL DIVD
- MOV 18H,R7
- MOV A,#30H
- ADD A,18H
- MOV 18H,A
- MOV R5,#10
- LCALL DIVD
- MOV 19H,R7
- MOV A,#30H
- ADD A,19H
- MOV 19H,A
- MOV 1AH,R3
- MOV A,#30H
- ADD A,1AH
- MOV 1AH,A
- RET
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××
- ;雙字節除法運算子程序
- ;入口條件: 被除數在R2、R3、除數在R4、R5中,商在R6、R7中。R1用于計數位移量
- ;出口信息: 余數在R2、R3中,雙字節商在R4、R5中,OV=1 時溢出。
- ;影響資源: PSW、A、R1~R7
- ;××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- DIVD: PUSH A
- PUSH PSW
- MOV R1,#00H ;計數器清零
- MOV R6,#00H
- MOV R7,#00H
- LCALL SUBBD ;判斷夠不夠減
- JC DIVDE
- DIVD1: MOV A,R4
- JB ACC.7,DIVD3 ;判斷最高位是不是1
- CLR C ;除數左移一位
- MOV A,R5
- RLC A
- MOV R5,A
- MOV A,R4
- RLC A
- MOV R4,A
- INC R1 ;左移計數器計數
- LCALL SUBBD ;比較左移后夠不夠減
- JNC DIVD1 ;夠減轉移,不夠減繼續
- LCALL DIVDR ;除數右移一位
- DEC R1 ;右移了,所以要-1
- DIVD3: CLR C
- MOV A,R3 ;開始減法
- SUBB A,R5
- MOV R3,A
- MOV A,R2
- SUBB A,R4
- MOV R2,A
- INC R7
- DIVD4: CJNE R1,#00H,DIVD5 ;判斷是不是到最后一位了
- SJMP DIVDE
- DIVD5: LCALL DIVDR ;除數右移一位
- MOV A,R7
- CLR C
- RLC A
- MOV R7,A
- MOV A,R6
- RLC A
- MOV R6,A
- DEC R1 ;位置計數器-1
- LCALL SUBBD ;比較夠不夠減
- JC DIVD4
- SJMP DIVD3
- SUBBD: CLR C ;判斷夠不夠減子程序
- MOV A,R3
- SUBB A,R5
- MOV A,R2
- SUBB A,R4
- RET
- DIVDR: CLR C
- MOV A,R4
- RRC A
- MOV R4,A
- MOV A,R5
- RRC A
- MOV R5,A
- RET
- DIVDE: SETB OV
- POP PSW
- POP A
- RET
- ;××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- ;顯示驅動
- ;××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- XIANSHI: MOV P0,#80H
- LCALL XML
- MOV P0,#55H ;電壓部分(10H,11H,12H為電壓的三位數值)
- LCALL XSJ
- MOV P0,#3DH
- LCALL XSJ
- MOV A,#30H
- CJNE A,10H,DYXY
- MOV P0,#20H
- SJMP DYXY1
- DYXY: MOV P0,10H ;電壓最高位顯示0時消隱
- DYXY1: LCALL XSJ
- MOV P0,11H
- LCALL XSJ
- MOV P0,#2EH
- LCALL XSJ
- MOV P0,12H
- LCALL XSJ
- MOV P0,#76H
- LCALL XSJ
- MOV P0,#20H ;電流部分(0CH,0DH,0EH對應電流的3個數值)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼 |