第1个回答 推荐于2016-05-02
/******************数码管显示三位电压表C程序*******************/
/******************作者:风过酒温******************************/
/************ADC0832转换部分代码来自网络,稍作修改*************/
#include<reg52.h>
//******************adc0832****************************//
sbit CS=P3^4; //使能。
sbit CLK=P1^0;//时钟
sbit Do=P1^1; // 数据输出
sbit Di=P1^1;//数据输入
unsigned char CH=0x02; //通道的选择:0x02就是单通道0;0x03就是单通道1;
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40};//数码管显示0~9、-,的段码表
sbit d_3=P2`4;
sbit d_2=P2`5;
sbit d_1=P2`6;
sbit d_0=P2`7;
//*****************************************************//
unsigned char ADconv(void)
{
unsigned char i;
unsigned char data_f=0,data_c=0;
Di=1;
CS=1;
_nop_();
CS=0;
Di=1; //芯片使能之前的初始化。第一个下降沿
CLK=1;
_nop_();
_nop_();
CLK=0; // 确定通道模式、第2个下降沿
_nop_();
_nop_();
CLK=1;
Di=(bit)(0x02&CH); //设定通道初始化
_nop_();
CLK=0;
_nop_();
_nop_();
CLK=1;
Di=(bit)(0x01&CH); //设定通道初始化 .第3个下降沿
_nop_();
_nop_();
CLK=0; //AD转化的初始化完成。
Di=1;
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
CLK=1;
for(i=8;i>0;i--)//得到一个正常排序的8位数据
{
data_f|=Do;
data_f<<=1;
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
}
for(i=8;i>0;i--)//得到一个反序排列的8位数据
{
data_c<<=1;
data_c|=Do;
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
}
CLK=0;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CLK=1;
_nop_();
CS=1;
_nop_();
_nop_();
return data_f;
}
void display(unsigned char x)//转换值输出
{
unsigned char i,j,k,m;
unsigned int x=*500;
x=/255;//将AD转换数据换算为电压值,8位AD精度为0.02V。
i=x/100;
j=x%100/10;
k=x%10;
d_3=1;
d_2=0;
m=tab[i];
m=m&0x7f;//百位后带小数点
P1=m;//显示三位电压,百位
d_2=1;
d_1=0;
P1=tab[j];//显示三位电压,十位
d_1=1;
d_0=0;
P1=tab[k];//显示三位电压,个位
d_0=1;
}
void main(void)
{
unsigned char value=0;
while(1)
{
unsigned char i=200,j=200;
value=ADconv();
while(j--)//取0.5s延时,稳定显示
{
while(i--)display(value);
}
}
}
我电脑上没有编译软件你试试,有问题给我留言。本回答被提问者采纳