工大创客馆-焊接科技网欢迎您

banner

最简单片机测温系统设计、仿真、手工钎焊制作智能测温系统(第一篇)

/
当今社会下,人工智能、机器人、现代数码技术的快速发展,很多人都想学习单片机和用电烙铁手工焊接制作数码小产品,但是一看到单片机复杂的编程,很多人都不知从何入手,一下子感到畏难和恐惧。借助网络或书籍来查找查找相关的例子吧,往往发现一个内容都添加了很多功能,这些功能,虽然体现内容的系统性,但对于初学者而然,一下子带来很多难度,不能真正的掌握的核心内容。
 
例如,一个常见的利用单片机进行测温的系统,往往很多人都添上按键设置、温度设置、超温度报警等内容,尤其是很多人通过LCD1602或者多位数码管来显示温度,而且又存在温度正负号判定的内容,很难掌握构建测温系统的最基本过程。
 
根据这种情况,我们对单片机应该必须会的内容进行简化处理,去掉复杂内容,只突出核心内容,力求构建最简单的、最核心的单片机系统,例如,对于测温系统,基本过程就是测温和显示。那么我们的建造方法是通过DS18B20来测温,但这一步比较固定。下一步就是显示,常见的温度就是几十度,所以只用两个数码管进行简化处理,然后理解测温之后怎样与数码管进行数据连接就可以了。
 
在这组设计中,我们一方面本着最简化原则,另一方面,为更好完整的掌握单片机内容,我们从设计,仿真,制作三个方面进行实物构建,让你真正初步掌握单片机。
 

 

阅读关键词:最简单片机测温系统;手工钎焊制作测温系统;单片机仿真
 
1  设计
 
单片机测温系统的相关资料网上很多,所用到的元器件也比较多。但我们是制作最简单的系统,所以用到的元器件只有单片机、两位数码管、18b20以及必要的电阻。整个电路的构建也挺简单。
 
打开Proteus仿真软件,调出单片机、二位数码管和ds18b20,并进行电路连接,设计电路如图1所示。如果你对上面都不熟悉的话,请查阅相关的书籍或资料。
 
 
 
 
 
 
对于ds 18b20测温系统的编程,包括两个部分:第一个是测温部分,第二个是显示部分。对于第一个测温部分,程序比较固定。设计重点是在于时序参数的选择。这个很重要,参数选择对与错将直接影响测温结果能否出来,这里先给出计结果。本组内容的第二篇将详细讨论时序参数的问题。第二部分的程序设计是在数码管上显示。你应该重点体会两个方面,一个是对ds S18 b20得到的测温数据进入到数码管里,然后经过简单转换得到各位和十位的显示数据。 数码管显示就是一位一位的轮流点亮各位显示器(采用最简单的方式), 对于每位显示器来说,每隔一段时间点亮一次。 显示器的点亮和点亮时的导通电流有关, 还与点亮时间和间隔时间有关, 调整电流和时间参数, 可实现亮度较高较稳定的显示。
 
整个完整程序如下:
 
 
#include "reg51.h"
#include "intrins.h"                     
#define DIGTAL P0 
#define POSITION P2 
#define uchar unsigned char
#define u8 unsigned char
#define uint unsigned int
#define u16 unsigned int
sbit     DS18B20_PORT=P3^2;                        
sbit     DIN=P0^7; 
uint code DIGTALL[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
 
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
void delay_ms(u16 ms)
{
u16 i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
 
void ds18b20_reset(void)
{
DS18B20_PORT=0;
delay_10us(75);
DS18B20_PORT=1;
delay_10us(2);
}
 
u8 ds18b20_check(void)
{
u8 time_temp=0;
while(DS18B20_PORT&&time_temp<20)
{
time_temp++;
delay_10us(1);
}
if(time_temp>=20)return 1;
else time_temp=0;
while((!DS18B20_PORT)&&time_temp<20)
{
time_temp++;
delay_10us(1);
}
if(time_temp>=20)return 1;
return 0;
}
 
u8 ds18b20_read_bit(void)
{
u8 dat=0;
DS18B20_PORT=0;
_nop_();_nop_();
DS18B20_PORT=1;
_nop_();_nop_();
if(DS18B20_PORT)dat=1;
else dat=0;
delay_10us(5);
return dat;
 
u8 ds18b20_read_byte(void)
{
u8 i=0;
u8 dat=0;
u8 temp=0;
 
for(i=0;i<8;i++)
{
temp=ds18b20_read_bit();
dat=(temp<<7)|(dat>>1);
}
return dat;
}
 
void ds18b20_write_byte(u8 dat)
{
u8 i=0;
u8 temp=0;
for(i=0;i<8;i++)
{
temp=dat&0x01;
dat>>=1;
if(temp)
{
DS18B20_PORT=0;
_nop_();_nop_();
DS18B20_PORT=1;
delay_10us(6);
}
else
{
DS18B20_PORT=0;
delay_10us(6);
DS18B20_PORT=1;
_nop_();_nop_();
}
}
}
 
void ds18b20_start(void)
{
ds18b20_reset();
ds18b20_check();
ds18b20_write_byte(0xcc);   
 ds18b20_write_byte(0x44);
}
 
u8 ds18b20_init(void)
{
ds18b20_reset();
return ds18b20_check();
}
 
float ds18b20_read_temperture(void)
{
float temp;
u8 dath=0;
u8 datl=0;
u16 value=0;
 
ds18b20_start();
ds18b20_reset();
ds18b20_check();
ds18b20_write_byte(0xcc);
    ds18b20_write_byte(0xbe);
datl=ds18b20_read_byte();
dath=ds18b20_read_byte();
value=(dath<<8)+datl;
temp=value*0.0625*100+0.5;
return temp;
}
 
void main()
{
int i=0;
    int temp_value;
 ds18b20_init();
 
while(1)
{
i++;
if(i%50==0)
temp_value=ds18b20_read_temperture();
 
POSITION=1;
DIGTAL=DIGTALL[temp_value % 10000 / 1000];
 delay_10us(3);
DIGTAL=0xff;
 delay_10us(3);
 
POSITION=2;
DIGTAL=DIGTALL[temp_value % 1000 / 100];
 delay_10us(3);
DIGTAL=0xff;
 delay_10us(3);
}
}
 
 
 
2、软件仿真
首先打开Keil uVision5软件,输入上面的程序,进行编译,得到的结果如图2 所示。
 
 
 
 
 
把刚刚编译好的程序调到Proteus仿真软件的单片机里,如图3所示。然后运行Proteus软件,得到结果,如图4所示。
 
 
 
 
 
这样你就得到了最简单片机测温系统,对于测温和显示这两部分,你应该认真体会。我们在后面的内容中将系统介绍测温系统的ds S18 b20时序部分的设定、单片机测温系统的面包板和实物电路的DIY手工焊接电路板制作,敬请期待。
 
 
 
 
 
 
 
敬告:本内容为制作人独立制作,非经制作人书面授权,请不要转载发布!