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

核心提示数值扩大20倍,在电路输入的地方改,输入电路电阻增加就可改变量程#include "reg52.h"#include "intrins.h"#define ad_con P2 //转换控制#define addata P0 // 数据#d

数值扩大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=0;i<t;i++)

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

;

}

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

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=0;n<8;n++)

{

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=0;h<500;h++)

{

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

{

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=0;k<4;k++)

{

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=0;m<8;m++)

{

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

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

_nop_();_nop_();_nop_();_nop_();

while (EOC==0);

OE=1;ad_data[m]=addata;OE=0;

s++;ad_con=s;

}

ad_con=0x00;

}

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

main()

{

P0=0xff;

P2=0x00;

P1=0xff;

P3=0xff;

while (1)

{

test();//AD转换

scan();//显示

}

}

 
友情链接
鄂ICP备19019357号-22