数字温度计设计
Ⅰ 设计一个测试温度范围为0~100℃的数字温度计
你到网上随便搜索DS18B20的电路图,很多的,而且都是用单片机控制。
推荐你一个软件Proteus,它还有一个论坛,你在Bai搜索Proteus论坛就能看到的,里面前辈们已经整理了许许多多的仿真实例,包括各种版本的DS18B20,有电路图,有源程序。自己花点心思琢磨吧,从模仿学习开始。
Ⅱ 求数字温度计设计方案
我没做过这个,只能给你个大概的思路.
首先是要用热敏电阻,通过热敏电阻把温度转化为电压版,再得到每一度权热敏电阻的电压变化值,用LM324运放做成乘法器,使电压乘以一个比例系数,使一度的变化得到一个整数变化的电压值,然后送入CC7107进行数模转换和数字显示.
Ⅲ 课程设计:基于单片机的数字温度计的设计
说实话,自己做吧,不难的,理工科的嘛,不多动手出来不好混的。
题目也有点问内题,既然是容数字温度计,为什么还要用AD?
采用8031芯片用与中断程序
通过8155芯片用于8位LED动态显示电路
这两个很少用吧,我记得就在微机原理的试验箱上见过...
你可以搜索DS18B20,大家在学校最常用的数字温度计,51的程序也一大堆,搜索下就有了。
Ⅳ 用单片机设计数字温度计
我以前玩了一下,抄大体上我你说的差不多,你可以参考一下,我当时是用汇编写的,现在用C语言。我发给你了。
其实很简单,你可以用4个74HC595串连做一个LED静态显示电路,或者用1602字符液晶也行,单片机最小系统用一个IO口直接和DS18B20连接就行了。设定温度的话有两种方式:
一是用拔码盘来设定温度,很多的仪器仪表上也有用到(8421BCD码的拔码盘很好买,要多少位可以自由组合,像你这个上下限各用4位组成一组,共2组),这种方法是硬件比较麻烦,但是软件写起来很简单,只要将拔码盘的值读进来转换一下再和DS18B20的数据对比一下就知道有没有有超过上下限了。
二是用几个按键来设置,如果用按键设置的话,建议用内部带有EEPROM存储器的单片机,用来存储设置的上下限值,EEPROM存储器掉电不丢失,当然你也可以用外部的EEPROM存储器,像IIC总线接口的AT24CXX系列的就可以。
Ⅳ 基于LM35的数字温度计设计
以上电路仅供参考,程序就请自行在网上搜索
Ⅵ 数字温度计设计
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint c,d,i,ii,,1,aa,bb,cc,shu,1h,1l;
uchar o,p,q,a,b,x,x1,x2,x3,x4,x5,x6,x7,x8,y1,y2,y3,y4,y5,y6,y7,y8,y,s,r,rr;
uchar flag,mm,nn,ff,jian,add2;
sfr ADC_CONTR=0XBC;
sfr ADC_RES=0XBD;
sfr ADC_RESL=0XBE;
sfr P1ASF=0X9D;
sfr AUXR=0x8E;
sfr AUXR1=0xA2;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint temp,,shi,ge,qian;
void display(uint z);
sbit gew=P2^;
sbit shiw=P2^1;
sbit w=P2^2;
sbit qianw=P2^3;
sbit geew=P2^4;
sbit shiew=P2^5;
sbit ew=P2^6;
sbit qianew=P2^7;
uchar add,cb;
sfr IAP_DATA=0xc2;
sfr IAP_ADDRH=0xc3;
sfr IAP_ADDRL=0xc4;
sfr IAP_CMD=0xc5;
sfr IAP_TRIN=0xc6;
sfr IAP_CONTR=0xc7;
void display2(uint z);
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=100;k>0;k--);
}
void anquan()//安全程序,没什么用 看资料
{
IAP_ADDRH=0xff;
IAP_ADDRL=0xff;
IAP_CONTR=0x00;
IAP_CMD=0x00;
IAP_TRIN=0x00;
}
void (uchar h,uchar l)//读
{
IAP_ADDRH=h;
IAP_ADDRL=l;
IAP_CONTR=0x83;
IAP_CMD=0x01;
IAP_TRIN=0x5a;
IAP_TRIN=0xa5;
delay(1);
shu=IAP_DATA;
anquan();
}
void xie(uchar h,uchar l,uchar d)//写
{
IAP_DATA=d;
IAP_ADDRH=h;
IAP_ADDRL=l;
IAP_CONTR=0x83;
IAP_CMD=0x02;
IAP_TRIN=0x5a;
IAP_TRIN=0xa5;
delay(1);
anquan();
}
void cha(uchar h,uchar l)//察
{
IAP_ADDRH=h;
IAP_ADDRL=l;
IAP_CONTR=0x83;
IAP_CMD=0x03;
IAP_TRIN=0x5a;
IAP_TRIN=0xa5;
delay(1);
anquan();
}
void init4()//初始化定时器
{
TMOD=0x11;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;}
void init()//初始化定时器
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;}
void init3()//初始化判断各区写了几个数
{(0x00,0x30);
ff=shu;
(0x00,0x40);
x1=shu;
(0x00,0x41);
x2=shu;
(0x00,0x42);
x3=shu;
(0x00,0x43);
x4=shu;
(0x00,0x44);
x5=shu;
(0x00,0x45);
x6=shu;
(0x00,0x46);
x7=shu;
(0x00,0x47);
x8=shu;
if(x8==8)x=8;else
if(x7==7)x=7;else
if(x6==6)x=6;else
if(x5==5)x=5;else
if(x4==4)x=4;else
if(x3==3)x=3;else
if(x2==2)x=2;else
if(x1==1)x=1;
(0x02,0x40);
y1=shu;
(0x02,0x41);
y2=shu;
(0x02,0x42);
y3=shu;
(0x02,0x43);
y4=shu;
(0x02,0x44);
y5=shu;
(0x02,0x45);
y6=shu;
(0x02,0x46);
y7=shu;
(0x02,0x47);
y8=shu;
if(y8==8)y=8;else
if(y7==7)y=7;else
if(y6==6)y=6;else
if(y5==5)y=5;else
if(y4==4)y=4;else
if(y3==3)y=3;else
if(y2==2)y=2;else
if(y1==1)y=1;
if(ff!=0xff){nn=0;mm=0;}
else{nn=1;mm=1;}
}
void send()
{
ADC_CONTR=0x80;
delay(1);
ADC_CONTR=0x8f;
delay(5);
if (ADC_CONTR==0X97)
{
ADC_CONTR=0x00;
delay(5);
a=ADC_RES;
b=ADC_RESL;
delay(5);
c=4*a+b;
P3=~a;
d=c*34/10;
}
}
void pq ()//P1.7
{ AUXR1=0x00;
P1ASF=0x80;
ADC_RES=0X00;
ADC_RESL=0X00;
ADC_CONTR=0X80| 0x00 |0x0f | 0;
delay(50);
send();
}
void display(uint z)
{
temp=z;
if (temp>999)q=1;else q=0;
if (temp>99) p=1;else p=0;
if (temp>9) o=1;else o=0;
qian=temp/1000;
=temp%1000/100;
shi=temp%1000%100/10;
ge=temp%10;
if(q==1)
{ qianw=0;
w=1;
shiw=1;
gew=1;
P0=table[qian];
delay(50);}
if(p==1)
{ qianw=1;
w=0;
shiw=1;
gew=1;
P0=table[];
delay(50);}
if(o==1)
{ qianw=1;
w=1;
shiw=0;
gew=1;
P0=0x7f;
delay(50);
P0=table[shi];
delay(50);
}
qianw=1;
w=1;
shiw=1;
gew=0;
P0=table[ge];
delay(50);
gew=1;
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
r++;
if(r==60){r=0;rr=1;}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
ii++;
if(i==24){i=0;}
if(ii==961) {ii=0;}
}
void init2()
{
AUXR1=0x00;
P1ASF=0x40;
ADC_RES=0X00;
ADC_RESL=0X00;
ADC_CONTR=0X80| 0x00 |0x0e | 0;
delay(50);
}
void send2()
{
ADC_CONTR=0x80;
delay(1);
ADC_CONTR=0x8e;
delay(5);
if (ADC_CONTR==0X96)
{
ADC_CONTR=0x00;
delay(5);
aa=ADC_RES;
bb=ADC_RESL;
delay(5);
cc=4*aa+bb;
//dd=4*cc;
}
}
void pl ()//p1.6
{
init2();
send2();
}
void anjian()
{
if((0<=cc)&&(cc<20))flag=1;else
if((20<cc)&&(cc<100))flag=2;else
if((100<cc)&&(cc<200))flag=3;else
if((200<cc)&&(cc<300))flag=4;else
if((300<cc)&&(cc<400))flag=5;else
if((400<cc)&&(cc<500))flag=6;else
if((500<cc)&&(cc<600))flag=7;else
if((600<cc)&&(cc<700))flag=8;
switch(flag)
{
case 0: ;break;//无键按下
case 1:jian=1;s=0; break;//第1个按下
case 2:jian=2;s=2; break;//第2个按下
case 3: jian=3;s=4;break;//第3个按下
case 4: jian=4;s=6;break;//第4个按下
case 5:jian=5;s=8;break;//第5个按下
case 6: jian=6;s=10;break;//第6个按下
case 7:jian=7;s=12;break;//第7个按下
case 8: jian=8;s=14;break;//第8个按下
}
}
void main()
{
init();init3();
while(1)
{
pl();
if(cc<800)
{TR0=0;rr=0;
init4();
while(!rr){
init3();
pl();
anjian();
if (ff!=0xff)
{
if(jian>y)
{
(0x00,s);1h=shu;(0x00,(s+1));1l=shu;=((1h*4+1l)*34)/10;
}else
{
(0x02,s);1h=shu;(0x02,(s+1));1l=shu;=(1h*4+1l)*34/10;
}
}
else
{
if(jian>x)
{
(0x02,s);1h=shu;(0x02,(s+1));1l=shu;=((1h*4+1l)*34)/10;
}else
{
(0x00,s);1h=shu;(0x00,(s+1));1l=shu;=((1h*4+1l)*34)/10;
}
}
display2();
}
}
TR0=1;
TR1=0;
if(i==23)
{ pq();}
display(d);
if(mm==1){
if(ii==120)
{
cha(0x00,0x00);
delay(10);
xie(0x00,0x00,a);
xie(0x00,0x01,b);
add++;
xie(0x00,0x40,add);
}else
if(ii==240)
{
xie(0x00,0x02,a);
xie(0x00,0x03,b);
add++;
xie(0x00,0x41,add);
}else
if(ii==360)
{
xie(0x00,0x04,a);
xie(0x00,0x05,b);
add++;
xie(0x00,0x42,add);
}else
if(ii==480)
{
xie(0x00,0x06,a);
xie(0x00,0x07,b);
add++;
xie(0x00,0x43,add);
}else
if(ii==600)
{
xie(0x00,0x08,a);
xie(0x00,0x09,b);
add++;
xie(0x00,0x44,add);
}else
if(ii==720)
{
xie(0x00,0x0a,a);
xie(0x00,0x0b,b);
add++;
xie(0x00,0x45,add);
}else
if(ii==840)
{
xie(0x00,0x0c,a);
xie(0x00,0x0d,b);
add++;
xie(0x00,0x46,add);
}else
if(ii==960)
{
xie(0x00,0x0e,a);
xie(0x00,0x0f,b);
xie(0x00,0x30,0x05);
add++;
xie(0x00,0x47,add);
if(add==8){add=0;}
mm=0;
}
}else
if(mm==0)
{
if(ii==120)
{
cha(0x02,0x00);
xie(0x02,0x00,a);
xie(0x02,0x01,b);
add2++;
xie(0x02,0x40,add2);
}else
if(ii==240)
{
xie(0x02,0x02,a);
xie(0x02,0x03,b);
add2++;
xie(0x02,0x41,add2);
}else
if(ii==360)
{
xie(0x02,0x04,a);
xie(0x02,0x05,b);
add2++;
xie(0x02,0x42,add2);
}else
if(ii==480)
{
xie(0x02,0x06,a);
xie(0x02,0x07,b);
add2++;
xie(0x02,0x43,add2);
}else
if(ii==600)
{
xie(0x02,0x08,a);
xie(0x02,0x09,b);
add2++;
xie(0x02,0x44,add2);
}else
if(ii==720)
{
xie(0x02,0x0a,a);
xie(0x02,0x0b,b);
add2++;
xie(0x02,0x45,add2);
}else
if(ii==840)
{
xie(0x02,0x0c,a);
xie(0x02,0x0d,b);
add2++;
xie(0x02,0x46,add2);
}else
if(ii==960)
{
xie(0x02,0x0e,a);
xie(0x02,0x0f,b);
xie(0x02,0x30,0x05);
add2++;
xie(0x02,0x47,add2);
if(add2==8){add2=0;}
mm=1;
}
}
}
}
void display2(uint z)
{
temp=z;
if (temp>999)q=1;else q=0;
if (temp>99) p=1;else p=0;
if (temp>9) o=1;else o=0;
qian=temp/1000;
=temp%1000/100;
shi=temp%1000%100/10;
ge=temp%10;
if(q==1)
{ qianew=0;
ew=1;
shiew=1;
geew=1;
P0=table[qian];
delay(50);}
if(p==1)
{ qianew=1;
ew=0;
shiew=1;
geew=1;
P0=table[];
delay(50);}
if(o==1)
{ qianew=1;
ew=1;
shiew=0;
geew=1;
P0=0x7f;
delay(50);
P0=table[shi];
delay(50);
}
qianew=1;
ew=1;
shiew=1;
geew=0;
P0=table[ge];
delay(50);
geew=1;
Ⅶ 急求!!!!数字温度计课程设计
说实话,要完来全一样的现成答源案在这里很难的,除非运气好碰到一个做过类似实例的人就给你了。
这个问题用单片机可以做,用可编程器件和VHDL编程也可以做。这我都会,但是要我花那多时间做好了然后用protel99se画好电路图给你,这根本不可能,谁搞那么累啊。
最好的办法还是自己到网上去搜,下载来改改试试,这样最快。 网上像数字温度计,数字频率计,数字秒表,数字定时器都很多的。
Ⅷ 数字温度计的设计
ICL7107是数字表专用芯片,这里可以用它来测量温度。可以下载它的PDF文档,里面有典型应用电路和相关内的容设计资料。
1.温度传感器看用途而定,搜索关键词;
2.调理电路:以0-200℃为测量范围,根据温度传感器的输出电压而定;
3.片内集成3位半AD转换器;
4.市售任意4位共阳LED数码管(带小数点),接法请搜索关键词:
着重讨论下传感器选择和信号调理部分:
传感器选择:(可以联系供应商为你专业指导,这里只是提供参考)
1.使用环境:如果测室温,那么传感器可以在温度计内部,这时,使用裸热敏电阻,如果要测液体,高温环境,可用热电偶
2.温度范围:看你的描述,至少要能到200℃的温度
3.测量精度,成本:根据具体的应用有不同要求
信号调理:
也许很麻烦,但只要记住一件事,就好:ICL7107的有效信号输入范围是0-200mV
所以,需要将0-200℃的温度变化对应到0-200mV的输入范围