10位AD用C语言编程显示4V电压值,设计一款四位数字温度计

1.温度传感器AD590基本知识

AD590产生的电流与绝对温度成正比,它可接收的工作电压为4V-30V,检测的温度范围为-55℃-+150℃,它有非常好的线性输出性能,温度每增加1℃,其电流增加1uA。

AD590温度与电流的关系如下表所示

AD590引脚图

2.实验任务

利用AD590温度传感器完成温度的测量,把转换的温度值的模拟量送入ADC0809的其中一个通道进行A/D转换,将转换的结果进行温度值变换之后送入数码管显示。

3.电路原理图

c91108110df0e12d1c2ce4fc5d7d62ac.png                  图4.30.1

4.系统板上硬件连线

(1).把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。

(2).把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。

(3).把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。

(4).把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。

(5).把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。

(6).把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。

(7).把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。

(8).把“模数转换模块”区域中的IN0端子用导线连接到自制的AD590电路上。

(9).把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。

5.程序设计内容

(1).ADC0809的CLK信号由单片机的P3.3管脚提供

(2).由于AD590的温度变化范围在-55℃-+150℃之间,经过10KΩ之后采样到的电压变化在2.182V-4.232V之间,不超过5V电压所表示的范围,因此参考电压取电源电压VCC,(实测VCC=4.70V)。由此可计算出经过A/D转换之后的摄氏温度显示的数据为:

如果(D*2350/128)<2732,则显示的温度值为-(2732-(D*2350/128))

如果(D*2350/128)≥2732,则显示的温度值为+((D*2350/128)-2732)

6.汇编源程序

(略)

7.C语言源程序

#include

#include

unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsigned char dispbuf[8]={10,10,10,10,10,10,0,0};

unsigned char dispcount;

unsigned char getdata;

unsigned long temp;

unsigned char i;

bit sflag;

sbit ST=P3^0;

sbit OE=P3^1;

sbit EOC=P3^2;

sbit CLK=P3^3;

sbit LED1=P3^6;

sbit LED2=P3^7;

sbit SPK=P3^5;

void main(void)

{

ST=0;

OE=0;

TMOD=0x12;

TH0=0x216;

TL0=0x216;

TH1=(65536-4000)/256;

TL1=(65536-4000)%6;

TR1=1;

TR0=1;

ET0=1;

ET1=1;

EA=1;

ST=1;

ST=0;

getdata=148;

while(1)

{

;

}

}

void t0(void) interrupt 1 using 0

{

CLK=~CLK;

}

void t1(void) interrupt 3 using 0

{

TH1=(65536-4000)/256;

TL1=(65536-4000)%6;

if(EOC==1)

{

OE=1;

getdata=P0;

OE=0;

temp=(getdata*2350);

temp=temp/128;

if(temp<2732)

{

temp=2732-temp;

sflag=1;

}

else

{

temp=temp-2732;

sflag=0;

}

i=3;

dispbuf[0]=10;

dispbuf[1]=10;

dispbuf[2]=10;

if(sflag==1)

{

dispbuf[7]=11;

}

else

{

dispbuf[7]=10;

}

dispbuf[3]=0;

dispbuf[4]=0;

dispbuf[5]=0;

dispbuf[6]=0;

while(temp/10)

{

dispbuf[i]=temp;

temp=temp/10;

i++;

}

dispbuf[i]=temp;

ST=1;

ST=0;

}

P1=dispcode[dispbuf[dispcount]];

P2=dispbitcode[dispcount];

dispcount++;

if(dispcount==8)

{

dispcount=0;

}

}

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您好,我可以为您解释一下C语言电压AD的转换原理。AD转换是一种将模拟信号转换为数字信号的技术,它通过比较输入信号与参考信号的大小,来确定输入信号的大小。C语言中,可以使用ADC(模数转换器)函数来实现电压AD的转换。 ### 回答2: 要将电压转换为AD,可以通过以下步骤来实现: 首先,需要了解电压AD之间的关系。通常情况下,AD是一个数字,代表电压在一定范围内的离散近似。 其次,需要知道AD转换器的参考电压(通常是ADC的参考电压)。这个参考电压是一个已知的固定,用于将AD映射到实际的电压。 接下来,可以使用电压除以参考电压的公式来计算AD。公式如下所示: AD = 电压 / 参考电压 * 最大AD 其中,最大ADAD转换器能够提供的最大,通常是一个固定,表示AD的范围。 最后,将计算得到的AD取整,即为最终的转换结果。 需要注意的是,这只是一种基本的电压AD的方法。实际情况中可能会涉及到其他因素,如预处理电路、误差校正等。具体的转换方法也可能因AD转换器的不同而有所差异。因此,在实际应用中,需要根据具体情况对转换方法进行相应的调整和优化。 ### 回答3: 在C语言中,将电压转换为AD可以通过一系列的计算和转换来实现。首先,我们需要了解AD(模拟数字)转换器的工作原理和规格。 AD转换器将连续变化的模拟信号转换为相应离散的数字。在C语言中,我们通常使用某些库函数来访问和操作AD转换器。 首先,我们需要确定AD转换器的参考电压(通常为5V)。接下来,我们需要将电压从模拟输入通道读取到程序中。 在C语言中,我们可以使用相关库函数来读取AD转换器的数,如通过ADC(模拟数字转换)库函数。例如,通过调用adc_read()函数,我们可以从模拟通道读取AD。假设我们获取到的AD存储在变量ad_value中。 接下来,我们需要将AD转换为对应的电压。这可以使用一些数学运算来实现。如果AD转换器的精度为10位(即2^10=1024),我们可以使用以下公式: 电压 = (AD/1024)* 参考电压 最后,我们可以将计算得到的电压用于进一步的数据处理或显示。例如,可以将电压输出到LCD显示屏上或进行其他处理操作。 需要注意的是,具体的电压AD的转换过程可能因为硬件和AD转换器的规格而有所不同。因此,在实际应用中,我们需要仔细查看AD转换器的规格表和相关文档,以确保正确的转换方法。 总之,在C语言中,将电压转换为AD需要了解AD转换器的工作原理和规格,并使用相关库函数和一些数学运算来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值