您现在所在的是:

单片机论坛

回帖:1个,阅读:1009 [上一页] [1] [下一页]
* 帖子主题:

四位数数字温度表

912
sfmcu
文章数:44
年度积分:50
历史总积分:912
注册时间:2006/8/22
发站内信
08年优秀博客奖
发表于:2009/1/19 20:53:19
#0楼
 
1.温度传感器ad590基本知识
  ad590产生的电流与绝对温度成正比,它可接收的工作电压为4v-30v,检测的温度范围为-55℃-+150℃,它有非常好的线性输出性能,温度每增加1℃,其电流增加1ua。
  ad590温度与电流的关系如下表所示
摄氏温度
ad590电流
经10kω电压
0℃
273.2 ua
2.732v
10℃
283.2 ua
2.832 v
20℃
293.2 ua
2.932 v
30℃
303.2 ua
3.032 v
40℃
313.2 ua
3.132 v
50℃
323.2 ua
3.232 v
60℃
333.2 ua
3.332 v
100℃
373.2 ua
3.732 v
ad590引脚图
2.实验任务
  利用ad590温度传感器完成温度的测量,把转换的温度值的模拟量送入adc0809的其中一个通道进行a/d转换,将转换的结果进行温度值变换之后送入数码管显示。
3.电路原理图
                  图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
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=75074&Name=sfmcu
17528
ahljj
文章数:3386
年度积分:240
历史总积分:17528
注册时间:2002/3/23
发站内信
发表于:2010/7/13 17:06:02
#1楼
学习了

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003