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

单片机数字电压表程序求解答,第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()//显示

}

}

temp=getdata*235

temp=temp/128

应该是修正数值所用的, x = x*235/128 = x * 1.8359375

如果AD的参考电压为 1.089V (2V/(235/128))的话,

那乘上的因子可以使得

x 电压值

0 -- 0V

255 -- 2V

dispbuf[0]=10等内容对应的是显示缓存数据的初始化,相应的值必须结合硬件连接电路图才可以确定是初始化为什么样的显示字形...


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

原文地址: https://outofmemory.cn/yw/11367384.html

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

发表评论

登录后才能评论

评论列表(0条)

保存