ADC0832简易数字电压表C语言

发布时间:2023-01-04  

//**************************************************************

/*简易数字电压表制作——ADC0832模数转换应用程序(C语言版)

/*目标器件:AT89S52 */

/*晶振:12.000MHZ */

/*编译环境:Keil uVision2 V2.12 */

//*****************************************************************

#include

#include

#define uint unsigned int

#define uchar unsigned char

/*******************************定义全局变量********************************/

unsigned char dat=0x00 ; //AD值

unsigned char count = 0x00; //定时器计数

unsigned char channel; //通道变量

//ADC0832的引脚

sbit ADCS =P1^4; //ADC0832 chip seclect

sbit ADDI =P1^6; //ADC0832 k in

sbit ADDO =P1^6; //ADC0832 k out

sbit ADCLK =P1^5; //ADC0832 clock signal

unsigned char dispbitcode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位扫描

unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; //共阳数码管字段码

unsigned char dispbuf[3];

/*******************************共阳LED段码表*******************************/

unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uint temp;

uchar dat; //获取ADC转换回来的值

/****************************************************************************

函数功能:AD转换子程序

入口参数:CH

出口参数:dat

****************************************************************************/

//采集并返回

unsigned int Adc0832(unsigned char channel) //AD转换,返回结果

{

uchar i=0;

uchar j;

uint dat=0;

uchar ndat=0;

if(channel==0)channel=2;

if(channel==1)channel=3;

ADDI=1;

_nop_();

_nop_();

ADCS=0;//拉低CS端

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿1

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

ADDI=channel&0x1;

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿2

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

ADDI=(channel>>1)&0x1;

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿3

ADDI=1;//控制命令结束

_nop_();

_nop_();

dat=0;

for(i=0;i<8;i++)

{

dat|=ADDO;//收数据

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;//形成一次时钟脉冲

_nop_();

_nop_();

dat<<=1;

if(i==7)dat|=ADDO;

}

for(i=0;i<8;i++)

{

j=0;

j=j|ADDO;//收数据

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;//形成一次时钟脉冲

_nop_();

_nop_();

j=j<<7;

ndat=ndat|j;

if(i<7)ndat>>=1;

}

ADCS=1;//拉低CS端

ADCLK=0;//拉低CLK端

ADDO=1;//拉高数据端,回到初始状态

dat<<=8;

dat|=ndat;

return(dat); //return ad k

}

/**************************************************************************

函数功能:延时子程序

入口参数:

出口参数:

****************************************************************************/

void delay(void)

{

int k;

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

}

/******************************************************************************

函数功能:数码管显示函数

入口参数:

出口参数:

******************************************************************************/

void display(void)

{

P2=0xff;

P0=tab[dispbuf[2]] & 0x7f; //显示个位和小数点

P2=0xfb;

delay();

P2=0xff;

P0=tab[dispbuf[1]]; //显示小数点后第一位

P2=0xfd;

delay();

P2=0xff;

P0=tab[dispbuf[0]]; //显示小数点后第二位

P2=0xfe;

delay();

}

/****************************************************************************

函数功能:定时器中断延时程序 这一段的作用时隔一段时间抽样一次 否侧显示的最后一位会不稳定

入口参数:

出口参数:

****************************************************************************/

void timer0(void) interrupt 1

{

TMOD = 0x01;

TH0 = 0x00;

TL0 = 0x00;

IE = 0x82;

TR0 = 01;

count++;

if (count == 0x0A)

{

count = 0x00;

dat= Adc0832(channel);

}

}

/****************************************

函数功能:主程序

入口参数:

出口参数:

****************************************/

void main(void)

{ P2=0xff; //端口初始化

P0=0xff;

channel=0x00; //channel=0

TMOD = 0x01;

TH0 = 0x00;

TL0 = 0x00;

IE = 0x82;

TR0 = 01;

while(1)

{

temp=dat*1.0/255*500; //电压值转换,5V做为参考电压,分成256份。

dispbuf[0]=temp%10; //个位

dispbuf[1]=temp/10%10; //十位

dispbuf[2]=temp/100%10; //百位

display();

}

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
服务
平台入驻

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

原厂代理商合作

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

闲置物料合作

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

生态合作

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

加工与定制类服务商合作

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

线上代理合作

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

邮件营销及广告服务

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>