|
单片机小工具:
单片机源程序如下:
- ;************************;
- ; ;
- ; 八路电压测量显示电路 ;
- ; ;
- ;************************;
- ;测量电压最大为5V,显示最大值为5.00V
- ;70H—77H存放采样值,78H—7BH存放显示数据,依次为个位、十位、百位、通道标志
- ;P3.5作单路显示-循环显示转换用,P3.6作单路显示时选择通道用。?
- ;
- ;*************************************
- ;* *
- ;* 主程序和中断程序入口 *
- ;* *
- ;*************************************
- ORG 0000H
- LJMP START
- ORG 0003H
- RETI
- ORG 000BH
- RETI
- ORG 0013H
- RETI
- ORG 001BH
- RETI
- ORG 0023H
- RETI
- ORG 002BH
- RETI
- ;
- ;*************************************
- ;* *
- ;* 初始化程序中的各变量 *
- ;* *
- ;*************************************
- CLEARMEMIO:
- CLR A
- MOV P2,A
- MOV R0,#70H
- MOV R2,#0DH
- LOOPMEM: MOV @R0,A
- INC R0
- DJNZ R2,LOOPMEM
- MOV 20H,#00H
- MOV A,#0FFH
- MOV P0,A
- MOV P1,A
- MOV P3,A
- RET
- ;
- ;*************************************
- ;* *
- ;* 主 程 序 *
- ;* *
- ;*************************************
- START:
- clr p3.3
- mov p1,#01h
- mov p1,#02h
- mov p1,#04h
- mov p1,#08h
- mov p1,#10h
- mov p1,#20h
- mov p1,#40h
- mov p1,#80h
- LCALL CLEARMEMIO ;初始化
- MAIN: LCALL TEST ;测量一次
- LCALL DISPLAY ;显示数据一次
- AJMP MAIN
- NOP ;PC值出错处理
- NOP
- NOP
- LJMP START
- ;
- ;*************************************
- ;* 显 示 控 制 程 序 *
- ;*************************************
- ;
- DISPLAY: JB 00H,DISP11 ;
- MOV R3,#08H ;8路信号循环显示控制
- MOV R0,#70H ;显示数据初址70H~77H
- MOV 7BH,#00H ;显示通道路数初值
- DISLOOP1: LCALL TUNBCD ;显示数据转为三位BCD码存入7AH、79H、78H(最大5.00v)
- MOV R2,#0FFH ;每路显示时间控制 4MS*255
- DISLOOP2: LCALL DISP ;调四位显示程序
- LCALL KEYWORK1 ;
- DJNZ R2,DISLOOP2 ;
- INC R0 ;显示下一路
- INC 7BH ;通道显示数加一
- DJNZ R3,DISLOOP1
- RET
- ;
- DISP11: MOV A,7BH ;
- SUBB A,#01H ;
- MOV 7BH,A ;
- ADD A,#70H ;
- MOV R0,A ;
- DISLOOP11: LCALL TUNBCD ;显示数据转为三位BCD码存入7AH、79H、78H(最大5.00v)
- MOV R2,#0FFH ;每路显示时间控制 4MS*25
- DISLOOP22: LCALL DISP ;调四位显示程序
- LCALL KEYWORK2 ;
- DJNZ R2,DISLOOP22
- INC 7BH ;通道显示数加一
- RET
- ;
- ;*************************************
- ;* 显示数据转为三位BCD码程序 *
- ;*************************************
- ;显示数据转为三位BCD码存入7AH、79H、78H(最大值5.00v)
- ;
- TUNBCD: MOV A,@R0 ;255/51=5.00V运算
- MOV B,#51 ;
- DIV AB ;
- MOV 7AH,A ;个位数放入7AH
- MOV A,B ;余数大于19H,F0为1,乘法溢出,结果加5
- CLR F0
- SUBB A,#1AH
- MOV F0,C
- MOV A,#10 ;
- MUL AB ;
- MOV B,#51 ;
- DIV AB
- JB F0,LOOP2 ;
- ADD A,#5
- LOOP2: MOV 79H,A ;小数后第一位放入79H
- MOV A,B
- CLR F0
- SUBB A,#1AH
- MOV F0,C
- MOV A,#10 ;
- MUL AB ;
- MOV B,#51 ;
- DIV AB
- JB F0,LOOP3 ;
- ADD A,#5
- LOOP3: MOV 78H,A ;小数后第二位放入78H
- RET
- ;
- ;*************************************
- ;* ? 显?示 程 序 *
- ;*************************************
- ;共阳显示子程序,显示内容在78H—7BH
- ;
- DISP: MOV R1,#78H ;共阳显示子程序,显示内容在78H—7BH
- MOV R5,#0FEH ;数据在P1输出,列扫描在P3.0-P3.3
- PLAY: MOV P1,#0FFH
- MOV A,R5
- ANL P3,A
- MOV A,@R1
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV P1,A
- JB P3.2,PLAY1 ;小数点处理
- CLR P1.7 ;小数点显示(显示格式为XX.XX)
- PLAY1: LCALL DL1MS
- INC R1
- MOV A,P3
- JNB ACC.3,ENDOUT
- RL A
- MOV R5,A
- MOV P3,#0FFH
- AJMP PLAY
- ENDOUT: MOV P3,#0FFH
- MOV P1,#0FFH
- RET
- ;TAB: DB 030H,0F9H,052H,0d0H,99H,94H,14H,0F1H,10H,090H,0FFH
- TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
- ;
- ;*************************************
- ;* ? ? 延时程序 *
- ;*************************************
- ;
- DL10MS: MOV R6,#0D0H ;10MS延时子程序
- DL1: MOV R7,#19H
- DL2: DJNZ R7,DL2
- DJNZ R6,DL1
- RET
- ;
- DL1MS: MOV R4,#0FFH ;513+513=1MS
- LOOP11: DJNZ R4,LOOP11
- MOV R4,#0FFH
- LOOP22: DJNZ R4,LOOP22
- RET
- ;
- ;*************************************
- ;* ? 电压测量(A/D)子程序 *
- ;*************************************
- ; 一次测量数据8个,依次放入70H-77H单元中
- ;
- TEST: CLR A ;模数转换子程序
- MOV P2,A
- MOV R0,#70H ;转换值存放首址
- MOV R7,#08H ;转换8次控制
- LCALL TESTART ;启动测试
- WAIT: JB P3.7,MOVD ;等A/D转换结束信号
- AJMP WAIT
- ;
- TESTART: SETB P2.3 ;测试启动
- NOP
- NOP
- CLR P2.3
- SETB P2.4
- NOP
- NOP
- CLR P2.4
- NOP
- NOP
- NOP
- NOP
- RET
- ;
- MOVD: SETB P2.5 ;取A/D转换数据
- MOV A,P0
- MOV @R0,A
- CLR P2.5
- INC R0
- MOV A,P2 ;通道地址加1
- INC A
- MOV P2,A
- CJNE A,#08H,TESTEND ;等8路A/D转换结束
- TESTEND: JC TESTCON
- CLR A ;结束恢复端口
- MOV P2,A
- MOV A,#0FFH
- MOV P0,A
- MOV P1,A
- MOV P3,A
- RET
- ;
- TESTCON: LCALL TESTART
- LJMP WAIT
- ;
- ;*************************************
- ;* ? 按键检测子程序 *
- ;*************************************
- ;
- KEYWORK1: JNB P3.5,KEY1
- KEYOUT: RET
- ;
- KEY1: LCALL DISP ;延时消抖
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
8路模数转换STC89C51、ADC0809.zip
(9.43 MB, 下载次数: 37)
|
|