| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4685 人关注过本帖
标题:用AD590和ADC0809做的温度采集系统
只看楼主 加入收藏
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
结帖率:40%
收藏
已结贴  问题点数:20 回复次数:8 
用AD590和ADC0809做的温度采集系统
用AD590进行温度采集,但是总感觉并没有采到温度信号,用数码管显示温度,一直是0。求大神指点到底错在哪里了,程序写的乱,还请见谅……电路图中那个圆是AD590,不会画表示了一下,另外旁边的电阻和滑动变阻换成了1K。电压时0.29V。谢谢了!
图片附件: 游客没有浏览图片的权限,请 登录注册

#include<reg52.h>
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x7f,0x9c,0xc6
};
void DELAY(uint);
void display(uchar,uchar,uchar,uchar,uchar);
void fenli(uchar);
void init();
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^7;
sbit ALE=P3^6;
int t;
uchar wendu,shi,ge,xiaoshu,wen,du;
void main()
{
 init();
 while(1)
 {
 ST=0;
 DELAY(1);
 ALE=1;
 ST=1;
 DELAY(1);
 ALE=0;
 ST=0;
 while(EOC==0);
 OE=1;
 wendu=P1;
 fenli(wendu);
 display(shi,ge,xiaoshu,wen,du);
 }
}
void T1_time()interrupt 3
{
  TH1=(65536-10)/256;
  TH0=(65536-10)%256;
  t++;
  if(t==1)
  {
   t=0;
   CLK=~CLK;
  }
}
void DELAY(uint xms)
{uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar shi,uchar ge,uchar xiaoshu,uchar wen,uchar du)
{
 P0=table[shi];
 P2=0xfe;
 DELAY(5);

 P0=table[ge];
 P2=0xfd;
 DELAY(1);

 P0=table[10];
 P2=0xfb;
 DELAY(1);

 P0=table[xiaoshu];
 P2=0xf7;
 DELAY(1);

 P0=table[wen];
 P2=0xef;
 DELAY(1);

 P0=table[du];
 P2=0xdf;
 DELAY(1);

}
void fenli(uchar shu)
{
 uchar shi,ge,xiaoshu;
 shu=(double)shu;
 shu=shu*0.262;
 shi=shu/10;
 shu=shu%10;
 ge=shu;
 shu=shu%10;
 xiaoshu=shu;
}
void init()
{
 EOC=1;
 CLK=0;
 TMOD=0x10;
 TH1=(65536-10)/256;
 TH0=(65536-10)%256;
 EA=1;
 ET1=1;
 TR1=1;

 }
搜索更多相关主题的帖子: display 数码管 电路图 include 
2015-07-07 21:25
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

帖子里没显示,再加上……
2015-07-07 21:26
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
TMOD=0x10;
TH1=(65536-10)/256;
TH0=(65536-10)%256;
在楼主的初始化函数中,TMOD=0X10;这是启用定时器1的工作方式1,则应该设置定时器1的低8位和高8位值,即如下:
TH1=(65536-10)/256;
TL1=(65536-10)%256;
2015-07-07 22:00
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
再还有,楼主程序中ST、OE、EOC三个引脚与什么相连,起什么作用没有说明。
2015-07-07 22:03
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
刚查了一下ADC0809的资料,再看了一下楼主的程序,除了我在3楼提到的问题外,没发现其他的问题。
2015-07-07 22:20
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 3楼 取名字
额……我打错了……等我改回来再试试啊!谢谢!!!
2015-07-08 07:54
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 4楼 取名字
这个就是AD的各个引脚……连接我备注在单片机上了……
2015-07-08 07:55
蓝然籽
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 5楼 取名字
我改了之后确实能进行扫描了,但是输出是显示全是0,我吧AD590的电阻改成10K,但是测电压变化,几乎没什么变化……是不是这个地方有问题啊?
2015-07-08 08:21
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:20 
void main()
{
init();
while(1)
{
ST=0;
DELAY(1);
ALE=1;
ST=1;
DELAY(1);
ALE=0;
ST=0;
while(EOC==0);
OE=1;
wendu=P1;
fenli(wendu);
display(shi,ge,xiaoshu,wen,du);
}
}
主函数中,ALE对应上跳沿,将地址送入地址锁存器中,即选择模拟量输入通道。所以我觉得对于ALE可以改为:
void main()
{
init();
while(1)
{
ST=0;
DELAY(1);
ALE=0;
ST=1;
DELAY(1);
ALE=1;
ST=0;
while(EOC==0);
OE=1;
wendu=P1;
fenli(wendu);
display(shi,ge,xiaoshu,wen,du);
}
}
楼主试一下。
2015-07-08 14:15
快速回复:用AD590和ADC0809做的温度采集系统
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018546 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved