单片机数字电压表程序求解答

单片机数字电压表程序求解答,第1张

数值扩大20倍,在电路输入的地方改,输入电路电阻增加就可改变量程

#include "reg52.h"

#include "intrins.h"

#define ad_con P2 //转换控制

#define addata P0 // 数据

#define disdata P1 // 显示

#define uchar unsigned char

#define uint unsigned int

uchar number=0x00

sbit ALE=P2^3

sbit START=P2^4

sbit OE=P2^5

sbit EOC=P3^7

sbit KEY1=P3^5//单路-循环

sbit KEY2=P3^6//通道选择

sbit DISX=disdata^7

sbit FLAG=PSW^5

uchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF}

uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}

uchar data ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}

uint data dis[5]={0x00,0x00,0x00,0x00,0x00}

////////////////////////////////////////////////////////////

delay1ms(uint t)//延时

{

uint i,j

for (i=0i<ti++)

for(j=0j<120j++)

}

/////////////////////////////////////////////////////////////////

keytest()//按键处理

{

if (KEY1==0)

{

FLAG=!FLAG//标志翻转

while (KEY1==0)

}

if (FLAG==1) //单路

{

if (KEY2==0)

{

number++ //通道选择

if (number==8) {number=0}

while (KEY2==0)

}

}

}

////////////////////////////////////////////////////////////////

scan()//扫描显示

{

uchar k,n

int h

if (FLAG==0) //循环

{

dis[3]=0x00 //显示通道 0

for (n=0n<8n++)

{

dis[2]=ad_data[n]/51 //百位 /51与转换值有关,调试时看实际值

dis[4]=ad_data[n]%51

dis[4]=dis[4]*10

dis[1]=dis[4]/51//十位

dis[4]=dis[4]%51

dis[4]=dis[4]*10

dis[0]=dis[4]/51//个位

for (h=0h<500h++)

{

for (k=0k<4k++)

{

disdata=dis_7[dis[k]]

if (k==2){DISX=0}

P3=scan_con[k]delay1ms(1)P3=0xff

}

}

dis[3]++ //通道显示+1

keytest()

}

}

if (FLAG==1)//单路

{

dis[3]=number //通道选择

dis[2]=ad_data[n]/51 //百位

dis[4]=ad_data[n]%51

dis[4]=dis[4]*10

dis[1]=dis[4]/51 //十位

dis[4]=dis[4]%51

dis[4]=dis[4]*10

dis[0]=dis[4]/51 //个位

for (k=0k<4k++)

{

disdata=dis_7[dis[k]]

if (k==2) {DISX=0}

P3=scan_con[k]delay1ms(1)P3=0xff

}

keytest()

}

}

/////////////////////////////////////////////////////////

test()//AD转换

{

uchar m

uchar s=0x00

ad_con=s

for (m=0m<8m++)

{

ALE=1_nop_()_nop_()ALE=0

START=1_nop_()_nop_()START=0

_nop_()_nop_()_nop_()_nop_()

while (EOC==0)

OE=1ad_data[m]=addataOE=0

s++ad_con=s

}

ad_con=0x00

}

///////////////////////////////////////////////////////

main()

{

P0=0xff

P2=0x00

P1=0xff

P3=0xff

while (1)

{

test()//AD转换

scan()//显示

}

}

这个容易的,你网上查一下7135AD芯片,利用它给的外围电路连接方式,就可以制作的,再有问题给我发邮件xwq34@126.com

1)原理图我博客上有

(2)程序清单:

名称:数字电压表

作者w418781840,日期:2008.6.12

功能:实验现0~~5V电压的测量,测量值用三位数管显示

CLK BIT P3.5定义CLK

ORG 0000H

LJMP MAIN 转入主程序

ORG 0013H

LJMP AGA 中断TNT1,用于读取转换后的数据

ORG 001BH

LJMP WQ T1中断入口,用于产生时钟和显示

主程序

ORG 0030H

MAIN: MOV TMOD,#10H 工作方式1

MOV TH1,#(65536-200)/256 产生500HZ

MOV TL1,#(65536-200)%256

SETB EA 开总中断.

SETB ET1 开T1中断

SETB TR1 启动T1

SETB EX1 开外部中断1

SETB IT1 边沿触发

MOV DPTR ,#1FFFH 指向通道INC0

MOVX @DPTR,A 启动转换

LOOP: LCALL DISPLAY 调用显示程序.

SJMP LOOP

外部1中断,;显示数据转为3位BCD码子程序

;显示数据转为3位BCD码存入33H,34H,35H(最大值约为5.00V)

AGA: MOV DPTR,#1FFFH

MOVX A,@DPTR 读取转换后的数据.

MOV B,#51 255÷51=5.00V运算

DIV AB

MOV 33H,A ;个位数放入33H

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 34H,A ;小数后第一位放入34H

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,#5H

LOOP3: MOV 35H,A ;小数后第二位放入35H

MOVX @DPTR,A 启动转换

RETI

显示程序

DISPLAY: MOV R1,#33H 指向显示数据首址

MOV R0,#0FEH 扫描控制字初值

PLAY: MOV A,R0 扫描字放入A

MOV P2,A 从P2口输出

MOV A,@R1 取显示数据到A

MOV DPTR,#TAB 取段码表地址

MOVC A,@A+DPTR 查显示数据对应段码

CJNE R0,#0FEH,PAP 查看是第一位否.

ORL A,#80H 是,则取小数点.

PAP: MOV P1,#0FFH 防闪烁.

MOV P1,A 段码放入P1口

LCALL DL1MS 显示1MS

INC R1 指向下一地址

MOV A,R0 扫描控制字放入A

JNB ACC.2,ENDOUT ACC.3=0时一次显示结束

RL A A中数据循环左移

MOV R0,A 放回R5内

AJMP PLAY 跳回PLAY循环

ENDOUT: RET

TAB: DB 3fH,06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH

延时程序

1MS延时程序,LED显示程序用

DL1MS: MOV R6,#14H

DL1: MOV R7,#19H

DL2: DJNZ R7,DL2

DJNZ R6,DL1

RET

T1定时器中断服务程序,用于给ADC0809产生时钟周期

WQ: MOV TH1,#(65536-200)/256

MOV TL1,#(65536-200)%256

CPL CLK 取反.

RE: RETI

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11148137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存