⑴ 基于单片机的数字温度计设计要做成实物所需要的硬件有什么
你搜一下单片机最小系统,按上面所列出的东西焊接起来,然后就是温度传感器,可以选择楼上的ds18b20,这个挺好用,直接接io口加个上拉电阻就行了,当然也可以用热敏电阻,这个需要ad转换.adc0804就够了.然后就是显示 ,除了楼上的数码管之外还需要数码管驱动,用三极管8050就行了,数码管有共阳和共阴极,选的时候要注意.除了单片机最小系统外其他电路都相当简单,用一般地万用板就可以完成,就是外观不太好看而以,单片机最小系统网络一搜一大把图,直接按图上的焊接就行了,也许你还需要一个复位按钮,当然直接上电复位也可以,有段时间没有接触过单片机了,能想到的就这些了,希望对你有帮助
⑵ 51单片机 数字温度计工作原理
数字温度计原理是通过温度传感器实现实时温度检测,然后通过单片机来根据传感器特性计算出温度,并且显示出来
⑶ 基于单片机的数字温度计设计用C语言写程序
//------------------------------------------------------------------
//DS18B20温度传感器输出显示,运行本例时,外界温度将显示在1602LCD上
//------------------------------------------------------------------
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}
sbit DQ=P2^2;
sbit la=P2^6; //定义锁存器锁存端
sbit wela=P2^7;
sbit rs=P3^5; //定义1602液晶RS端
sbit lcden=P3^4;//定义1602液晶LCDEN端
sbit s1=P3^0; //定义按键--功能键
sbit s2=P3^1; //定义按键--增加键
sbit s3=P3^2; //定义按键--减小键
sbit s4=P3^6;//闹钟查看键
sbit rd=P3^7;
sbit beep=P2^3; //定义蜂鸣器端
uchar code Temp_Disp_Title[]={" Current Temp : "};
uchar Current_Temp_Display_Buffer[]={" TEMP: "};
uchar code Alarm_Temp[]={"ALARM TEMP Hi Lo"};
uchar Alarm_HI_LO_STR[]={"Hi: Lo: "};
uchar temp_data[2]={0x00,0x00};
uchar temp_alarm[2]={0x00,0x00};
uchar display[5]={0x00,0x00,0x00,0x00,0x00};
uchar display1[3]={0x00,0x00,0x00};
uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
uchar CurrentT=0; //当前读取的温度整数部分
uchar Temp_Value[]={0x00,0x00}; //从DS18B20读取的温度值
uchar Display_Digit[]={0,0,0,0}; //待显示的各温度数位
bit DS18B20_IS_OK=1;//传感器正常标志
//-------------------------------------
//延时1
//-------------------------------------
void delay1(uint x)
{
uchar i;
while(x--) for(i=0;i<200;i++);
}
//-------------------------------------
//延时2
//-------------------------------------
void Delay(uint x)
{
while(x--);
}
//------------------------------------
//忙检查
//------------------------------------
void write_com(uchar com)//液晶写命令函数
{
rs=0;
lcden=0;
P0=com;
delay1(5);
lcden=1;
delay1(5);
lcden=0;
}
void Write_LCD_Data(uchar date)//液晶写数据函数
{
rs=1;
lcden=0;
P0=date;
delay1(5);
lcden=1;
delay1(5);
lcden=0;
}
//-----------------------------
//设置LCD显示位置
//---------------------------------
void Set_Disp_Pos(uchar Pos)
{
write_com(Pos|0x80);
}
//-----------------------------
//LCD初始化
//---------------------------------
void Initialize_LCD()
{
uchar num;
rd=0; //软件将矩阵按键第4列一端置低用以分解出独立按键
la=0;//关闭两锁存器锁存端,防止操作液晶时数码管会出乱码
wela=0;
lcden=0;
write_com(0x38);//初始化1602液晶
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);//设置显示初始坐标
for(num=0;num<14;num++)//显示年月日星期
{
Write_LCD_Data(Temp_Disp_Title[num]);
delay1(5);
}
}
//-------------------------------------
//函数功能:初始化DS18B20
//出口参数:status---DS18B20是否复位成功的标志
//-------------------------------------
uchar Init_DS18B20()
{
uchar status; //储存DS18B20是否存在的标志,status=0,表示存在;status=1,表示不存在
DQ=1;Delay(8); //先将数据线拉高 //略微延时约6微秒
DQ=0;Delay(90); //再将数据线从高拉低,要求保持480~960us
//略微延时约600微秒 以向DS18B20发出一持续480~960us的低电平复位脉冲
DQ=1;Delay(8); //释放数据线(将数据线拉高) //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)
status=DQ;Delay(100); //让单片机检测是否输出了存在脉冲(DQ=0表示存在) //延时足够长时间,等待存在脉冲输出完毕
DQ=1; // 将数据线拉高
return status; //返回检测成功标志
}
//-------------------------------------
//函数功能:读一字节
//出口参数:dat---读出的数据
//-------------------------------------
uchar ReadOneByte()
{
uchar i,dat=0;
DQ=1;_nop_(); // 先将数据线拉高 //等待一个机器周期
for (i=0;i<8;i++)
{
DQ=0; //单片机从DS18B20读书据时,将数据线从高拉低即启动读时序
dat>>=1;
_nop_(); //等待一个机器周期
DQ=1; //将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备
_nop_();_nop_(); //延时约6us,使主机在15us内采样
if (DQ) dat|=0x80; //如果读到的数据是1,则将1存入dat,如果是0则保持原值不变
Delay(30); //延时3us,两个读时序之间必须有大于1us的恢复期
DQ=1; // 将数据线拉高,为读下一位数据做准备
}
return dat;
}
//-------------------------------------
//函数功能:写一字节
//入口参数:dat---待写入的数据
//-------------------------------------
void WriteOneByte(uchar dat)
{
uchar i;
for (i=0;i<8;i++)
{
DQ=0; //将数据线从高拉低时即启动写时序
DQ=dat & 0x01; //利用与运算取出要写的某位二进制数据,
//并将其送到数据线上等待DS18B20采样
Delay(5); //延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样
DQ=1; //释放数据线
dat>>=1; //将dat中的各二进制位数据右移1位
}
}
//-------------------------------------
//函数功能:读取温度值
//出入口参数:无
//-------------------------------------
void Read_Temperature()
{
if(Init_DS18B20() == 1) //DS18B20故障
DS18B20_IS_OK=0;
else
{
WriteOneByte(0xCC); // 跳过读序号列号的操作
WriteOneByte(0x44); // 启动温度转换
Init_DS18B20(); //将DS18B20初始化
WriteOneByte(0xCC); //跳过读序号列号的操作
WriteOneByte(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位
Temp_Value[0]=ReadOneByte(); //温度低8位
Temp_Value[1]=ReadOneByte(); //温度高8位
DS18B20_IS_OK=1;
}
}
//-------------------------------------
//函数功能:在LCD上显示当前温度
//入口参数:
//-------------------------------------
void Display_Temperature()
{
uchar i;
//延时值与负数标识
uchar t=150,ng=0;
//高5位全为1(0xF8)则为负数,为负数时取反加1,并设置负数标示
if ((Temp_Value[1] & 0xF8)==0xF8)
{
Temp_Value[1]=~Temp_Value[1];
Temp_Value[0]=~Temp_Value[0]+1;
if(Temp_Value[0]==0x00) Temp_Value[1]++; //加1后如果低字节为00表示有进位,进位位再加到高字节上
ng=1; //负数标示置1
}
Display_Digit[0]=df_Table[Temp_Value[0] & 0x0F]; //查表得到温度小数部分
//获取温度整数部分(高字节的低3位与低字节中的高4位,无符号)
CurrentT=((Temp_Value[0] & 0xF0)>>4)|((Temp_Value[1] & 0x07)<<4);
//将整数部分分解为3位待显示数字
Display_Digit[3]=CurrentT/100; //百位 digit[CurrentT/100];
Display_Digit[2]=CurrentT%100/10; //十位
Display_Digit[1]=CurrentT%10; //个位
//刷新LCD显示缓冲
Current_Temp_Display_Buffer[11]=Display_Digit[0]+'0';//先将'0'转换成整数48,然后与前面数字相加,得到相应数字的ASCII字符
Current_Temp_Display_Buffer[10]='.';
Current_Temp_Display_Buffer[9]=Display_Digit[1]+'0'; //个位
Current_Temp_Display_Buffer[8]=Display_Digit[2]+'0'; //十位
Current_Temp_Display_Buffer[7]=Display_Digit[3]+'0'; //百位
//高位为0时不显示
if(Display_Digit[3]==0) Current_Temp_Display_Buffer[7]=' ';
//高位为0且次高位为0时,次高位不显示
if(Display_Digit[2]==0 && Display_Digit[3]==0)
Current_Temp_Display_Buffer[8]=' ';
//负数符号显示在恰当位置
if(ng)
{
if (Current_Temp_Display_Buffer[8]==' ')
Current_Temp_Display_Buffer[8]='-';
else if(Current_Temp_Display_Buffer[7]==' ')
Current_Temp_Display_Buffer[7]='-';
else
Current_Temp_Display_Buffer[6]='-';
}
//在第一行显示标题
Set_Disp_Pos(0x00);
for(i=0;i<16;i++)
{
Write_LCD_Data(Temp_Disp_Title[i]);
}
Set_Disp_Pos(0x40); //在第二行显示当前温度
for(i=0;i<16;i++)
{
Write_LCD_Data(Current_Temp_Display_Buffer[i]);
}
//显示温度符号
// Set_Disp_Pos(0x4D);Write_LCD_Data(0x00);
Set_Disp_Pos(0x4D);Write_LCD_Data(0xdf);
Set_Disp_Pos(0x4E); Write_LCD_Data('C');
}
//-------------------------------------
//函数功能:主函数
//入口参数:
//-------------------------------------
void main()
{
Initialize_LCD();
Read_Temperature();
Delay(50000);
Delay(50000);
while (1)
{
Read_Temperature();
if (DS18B20_IS_OK) Display_Temperature();
delay1(100);
}
}
⑷ 基于单片机的数字温度计设计
精度为0.1度 感觉很难实现 最起码你要用到Pt100或者Pt1000的温度传感器 其它的很难做到
⑸ 基于单片机的电子温度计设计
看看这个吧,是个通过温度传感器实现对电风扇的智能控制的程序
温度传感器是ds18b20
不懂的地方m我 qq 296264785
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DQ=P3^4;
sbit ka=P3^0;
sbit guan=P3^1;
uchar wen[]={0x00,0x00};
uchar code tab[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
uchar code anma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar ,shi,ge,xiao,wen;
//延时子程序
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay1(uint a)
{
while(--a);
}
uchar init_18b20() //18b20初始化
{
uchar b;
DQ=1;
delay1(8);
DQ=0;
delay1(90);
DQ=1;
delay1(8);
b=DQ;
delay1(100);
DQ=1;
return b;
}
uchar ()//读字节
{
uchar i,dat=0;
DQ=1;_nop_();
for(i=0;i<8;i++)
{
DQ=0;
dat >>=1;
DQ=1;
_nop_(); _nop_();
if(DQ)dat|=0x80;
delay1(30);
DQ=1;
}
return dat;
}
void xie(uchar da)//写字节
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=da & 0x01;
delay1(5);
DQ=1;
da>>=1;
}
}
void wen()
{
while(init_18b20()); //DQ=1;等待
xie(0xcc);
xie(0x44);
init_18b20();
xie(0xcc);
xie(0xbe);
wen[0]=();
wen[1]=();
}
void xshi()
{
uchar i;
xiao=tab[wen[0] & 0x0f];
wen=((wen[0] & 0xf0)>>4) | ((wen[1] & 0x07)<<4);
=wen/100;
shi=wen%100/10;
ge=wen%10;
for(i=0;i<15;i++)
{
P1=0xfe;
P2=anma[xiao];
delay(5);
P1=0xfd;
P2=anma[ge];
delay(5);
P1=0xfb;
P2=anma[shi];
delay(5);
P1=0xf7;
P2=anma[];
delay(5);
}
}
void main()
{
ka=0;
guan=0;
wen();
delay(10);
while(1)
{
wen();
xshi();
if(wen>=25) //温度高于25度 开风扇
{
ka=1;
guan=0;
}
else
{
ka=0;
guan=1;
}
}
}
⑹ 基于单片机的数字温度计设计
按你的要求设计了程序并且通过ProteUS仿真
无偿提供原理图,ProteUS仿真工程(可运行),供参考运行效果,及原理图的设计。
推荐:01 基于单片机的数字报警温度计( http://ishare.iask.sina.com.cn/f/11655563.html )
; 源程序为汇编
; 实时显示温度
; 高于高限,低于低限,进行声光报警
; 温度高低限可自由设定
; 上电显示 543210
; 读出温度后实时显示温度
; 温度高于上限温度时,显示"HH****", 并进行声光报警
; 温度低于下限温度时,显示"LL****", 并进行声光报警
; 设定键 进行高低限设定 循环为 "实时温度" “L ***” “H ***”
; 可用+ -键进行修改报警值
⑺ 基于51单片机的温度计中什么可以代替DS18B20
DS18B20属于数字温度计。如果要代替的话,可以试试LM75,当然LM75是I2C接口的。然后就是模拟信号输出的温度计了,什么NPT、铂电阻、热电偶、AD590、LM35之类的,就要用ADC了。如果你的单片机自带了ADC,还差不多。
⑻ 基于AT89C51单片机数字温度计
我买了一个,不错!
一、AT-12A学习板主要特点:
1.直接USB口供电,可通过电脑USB口下载程序,方便没有串口的笔记本电脑下载并直接烧写程序。
2.直接在线下载烧写程序,不需要另外购买单片机烧写器,也能随时方便的烧写程序到单片机里查看程序运行情况,学习、调试
程序省去复杂频繁的烧写、换片过程。
3.具有直接在线仿真功能,不需要另外购置昂贵的仿真器。将仿真芯片安在实验上后便可直接进行在线单步,全速调试等。
4.昂天AT-12A学习板集实验开发板、编程器、烧写器、仿真器四合一,简单高效。
5.丰富的硬件资源:AD模数转换芯片,DA数模转换芯片,先进的光耦隔离驱动继电器模块,红外接收通信模块,18B20温度传感模块,三个端口复用锁存器,基于IIC协议的EEPROM24C0**系列芯片,全八位数码管,全八位发光二激管(和单片机8位系统完整对应),发声音乐实验的蜂鸣器,串口RS232转换芯片,4x4矩阵键盘和4个特殊功能键盘等等。
6.丰富的扩展接口:1602字符液晶接口(液晶对比度亦可任意调节),12864字符、汉字、图形液晶接口(液晶对比度亦可任意调
节),继电器外控电源接口,TTL串行数据外扩接口(方便做与其他单片机通信实验),单片机IO引脚全部40个外扩接口,全部可以自行扩展,这是非常重要的。
7,人性化设计:芯片全部采用插座可更换式,方便根据需求随时更换芯片。单片机采用紧锁装置,方便更换仿真芯片和批量烧写
程序。串行下载程序状态指示灯。功能模块布局合理,使用方便,开发板四端加电保护螺丝等等。使用方便舒适。
二、AT-12A丰富的硬件资源介绍:
1、全八位发光二极管:流水灯相关试验:比如正反流水灯、交通指示、移位显示等等。(周边硬件状态指示实验等)。
2、全八位数码管:全八位发光二极管和数码管与单片机8位完整对应,硬件不缩水,使用显示更方便更完整。可做实验:比如计
数器、秒表、电子钟、数码管动态显示、静态显示等等。(做静态显示实验,动态扫描实验,8位与IO口全匹配)。
3、串行通信接口:MAX232芯片RS232通信接口,(可以做为与计算机串行通信的接口,同时也可做为STC单片机下载程序的接口,还可以做为主从系统中多机互连接口。一口多用,非常方便)。串口TTL电平外扩接口,可方便与其他单片机做串口通信实验,同时可以直接通过串口在线烧写STC芯片和在线仿真。含有232接口,支持串口通讯实验、仿真芯片自举、SST仿真模块在线硬件仿真,通过此接口可直接支持各种类型的嵌入式仿真器。学习串行通信的有关原理,51单片机串行口的结构、串行口编程的方法。
4、USB供电系统:直接插接到电脑USB口即可提供电源,不需另接直流电源。
5,AD模数转换模块(含ADC0804芯片):(做模/数转换实验)工业上最常用的将模拟量转变成单片机可识别的数字量实验,学好模数转换技术,在实际单片机应用中非常重要。
6,DA数模转换模块(含DAC0832芯片):(做数/模转换实验)将单片机的数字量转换成模拟信号电路,在单片机应用中也很重要。
7、IIC总线接口:通过EEPROM的24C**写入、读取试验,学习工业上常用的IIC协议以及掉电存储芯片的使用。(IIC总线元件实验验)
8、实用的继电器控制模块:AT-12A学习板采用工控中先进的、具有良好隔离性和稳定性的光电耦合器驱动,继电器因为需要分离电路,电路比较复杂,一般实验板没有,AT-12A学习板采用独立的驱动隔离电路,所有原理图一并提供。继电器及分离驱动电路模块(学习工业设备中最常用的以弱控强继电器的使用,以及其驱动电路的设计)。
9、光电耦合器:学习工控现场系统中稳定可靠的电隔离系统的设计)。
10,红外线接收通信模块:可做红外线接收解码实验,把学习板做成无线控制中心。IR红外线通信接收器(可做红外线通信接收实
验,可将单片机做成无线红外控制器,通过遥控器控制其它设备,学习红外无线调制、解调、编码等实验)。
11,字符液晶1602接口(含1602液晶):可显示两行字符。
12、图形液晶12864接口(具有液晶对比度调节功能):可显示任意汉字及图形。
13,DS18B20温度显示器:可做温度传感显示实验,可以做成温度检测控制器。(初步掌握单片机操作后即可亲自编写程序获知当时的温度,可深入设计温控系统)。
14、音乐、发声电路:学习板系统带蜂鸣器,可做发声、音乐实验。(做单片机发声实验,闹钟提醒实验等)
15.4X4矩阵键盘,4个特殊功能键盘共20个键盘:做各种复杂的键盘控制扫描实验,实现对系统复杂的控制。(键盘检测试验)
16、全开放扩展接口:单片机32个IO口全部引出,方便自己进行自由扩展。整个系统采用全开放模块化设计,独立结构,稳定实
用。通过扩展口,可以自己做各种想做的实验,让自己在电子世界里自由翱翔吧!
17,锁紧装置:非常方便主芯片的安装及卸取。
18,专业的技术支持:光盘中含本实验板所有例程。赠送伟褔仿真软件,easy51pro下载软件,STC单片机程序下载软件,KEIL51
等及所有电路图、实验板详细使用教程,下载教程等。丰富的学习资源光盘,让你学习起到事半功倍的效果,快速进入优秀工程
师的行列。
http://item.taobao.com/auction/item_detail-db2-.jhtml