M8,ICCAVR下的温度传感器18B20程序

发布者:zcyzwj最新更新时间:2016-10-29 来源: eefocus关键字:ICCAVR  的温度传感器  18B20 手机看文章 扫描二维码
随时随地手机看文章
本程序为采用mega8 和18b20的温度采集程序 
选用mega8内部8M RC震荡,18b20 数据线接pd6,数据线和vcc间接一4.7k上拉电阻 
感谢dfgeoff 嗜血蜗牛提供的资料*/ 

#include //和单片机类型相对应的头文件,选择Atmega8做实验; 
#include  
#define uchar unsigned char 
#define uint unsigned int 
void init_1820(); 
write_1820(uchar x); 
uchar read_1820(); 
void send_byte(uchar x); 
void delay(uint x); 
void disp_led(uchar buffer,uchar control); 
uchar disp_table[16] = { 
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 
uchar dp; 
long count; 
void main(void) //主函数 

disp_led(0,0); 
delay(2000); 
OSCCAL=0X9d;//系统时钟校准,不同的芯片和不同的频率, 
DDRC=0xff; 
DDRD=0XFF; 
PORTD=0XFF; 
WDR(); //看门狗计数清零 
WDTCR=0x0F; 
PORTC=0xff; 
while(1) 

uchar i,temh,teml; 
init_1820(); //复位18b20 
write_1820(0xcc); // 发出转换命令 
write_1820(0x44); 
delay(400); 
init_1820(); 
WDR(); 
write_1820(0xcc); //发出读命令 
write_1820(0xbe); 
teml=read_1820(); //读数据 
temh=read_1820(); 
//for(i=0;i<7;i++) //测试用 
//{ 
//send_byte(0x40); 
//send_byte(disp_table[0&0x0f]); 
//} 
//send_byte(disp_table[temh>>4]); 
//send_byte(disp_table[temh&0x0f]); 
//send_byte(disp_table[teml>>4]); 
//send_byte(disp_table[teml&0x0f]); 
count=(temh*256+teml)*6.25; //计算具体温度 
WDR(); 
disp_led(0,1); //显示温度 
for(i=0;i<100;i++) //每次转换需要延时200ms以上 
delay(1000); 


void delay(uint x) //1.5us左右 

while(x) 

x--; 


void init_1820() 

PORTD|=(1<<6); 
PORTD&=~(1<<6); 
delay(3000); //480us以上 
PORTD|=(1<<6); 
DDRD&=~(1<<6); 
delay(40); //15~60us 
while(PIND&(1<<6)) 

// disp_led(3,0); 
// for(;;) 
//{} 

DDRD|=(1<<6); 
PORTD|=(1<<6); 
delay(150); //60~240us 

write_1820(uchar x) 

uchar m; 
for(m=0;m<8;m++) 

PORTD&=~(1<<6); 
if(x&(1< PORTD|=(1<<6); 
else 
PORTD&=~(1<<6); 
delay(40); //15~60us 
PORTD|=(1<<6); 

PORTD|=(1<<6); 



uchar read_1820() 

uchar temp,k,n; 
temp=0; 
for(n=0;n<8;n++) 

PORTD&=~(1<<6); 
//delay(2); 
PORTD|=(1<<6); 
//delay(3); 
DDRD&=~(1<<6); 
k=(PIND&(1<<6)); //读数据,从低位开始 
if(k) 
temp|=(1< else 
temp&=~(1< delay(50); //60~120us 
DDRD|=(1<<6); 

return (temp); 


void send_byte(uchar x) //以下为显示程序 

uchar i; 
for(i=0;i<8;i++) 

PORTC&=~(1<<5); // PC5为底 为164提供时钟信号 
if((x&(1<<(7-i)))||((dp==1)&&(i==0))) //判断每位数据的电平,及小数点判断 
PORTC|=(1<<4); //若为高着PC4输出高电平 
else 
PORTC&=~(1<<4); //若为低着输出低电平 
PORTC|=(1<<5); //PC5 提供始终信号 

//PORTC|=((1<<0)|(1<<1)|(1<<2)); 

//显示程序 CONTROL为控制显示 BUFFER为显示数据 
void disp_led(uchar buffer,uchar control) 

uchar i,temp[6]; 
uint tempcount; 
dp=0; 
switch(control) 

case 0: //CONTROL为零全部数码管显示buffer 

for(i=0;i<11;i++) 
send_byte(disp_table[buffer%10]);//显示数字 
break; 

case 1: //control为1,显示count中的数据为6位 

tempcount=count; 
for(i=0;i<6;i++) //取出每位中的数据 

temp[i]=tempcount%10; 
tempcount/=10; 

send_byte(disp_table[buffer/10]); //最开始显示buffer数据 
send_byte(disp_table[buffer%10]); 
send_byte(0x00); 
send_byte(0x00); 
send_byte(0x00); 
for(i=0;i<6;i++) 

if(i==3) 
dp=1; //小数点控制位 
send_byte(disp_table[temp[5-i]]); 
dp=0; 

break; 


PORTC|=(1<<4); 
关键字:ICCAVR  的温度传感器  18B20 引用地址:M8,ICCAVR下的温度传感器18B20程序

上一篇:红外遥控解码程序RC5解码
下一篇:AVR单片机控制的电动自行车驱动系统

推荐阅读最新更新时间:2024-03-16 15:18

基于单总线温度传感器多点测温系统设计
  0 引言   多点测温系统在工业领域及其国民生产中有广泛的用途。如在化工领域中,经常需要检测和控制反应釜中的液体的温度,使之能够稳定在一定的温度范围之内;在粮食储存以及加工过程中,会储存高水分的粮食,高水分的粮食极易升温发霉,因此粮食储存的测温显得尤为重要。以往的测温系统多采用热敏电阻,精度低、易损坏,且模拟信号远距离温度测量系统中,需要很好地解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。   因此,在温度测量系统中,具有足够的精度和实时性,控制足够的精度,并且尽可能具有较低的成本,这样的产品才具有实用价值。本文采用新型数字温度传感器 DSl8B20,它具有体积更
[单片机]
51单片机18B20程序
18b20复位函数: bit ds18b20_reset(void) { bit bitbuf; ds18b20=1; //10us TH0=0xff; TL0=0xf6; TF0=0; while(!TF0); ds18b20=0; //设置1-wire总线为低电平(占领总线) //延迟480us-960us,尽可能选小值(480us) //这里我们选490us TH0=0xfe; TL0=0x3c; TF0=0; while(!TF0); ds18b20=1; //设置1-wire总
[单片机]
集成温度传感器ILPC616构成摄氏温度检测电路
图2-49所示是由集成温度传感器ILPC616构成的摄氏温度检测电路,其与数字式万用表的DC电压2V挡配合,可以直接读取测得的摄氏温度。 图2-49所示电路中的RPl(5.1kCl)用于调零,电路安装好后,将μPC616温度传感器放入冰水中(0℃),调整电位器RP1的值,使用于显示的数字式万用表的读数为0后,即可用做摄氏温度计使用了。 使用时,应将从万用表上读取的数据的小数点向右移动2位,其所对应的值才是所测的μ摄氏温度值。 图2-49所示电路的显示用数字式万用表也可利用其他数字仪表或单独为其配置数字显示电路。
[测试测量]
集成<font color='red'>温度传感器</font>ILPC616构成<font color='red'>的</font>摄氏温度检测电路
基于DSP与数字温度传感器温度控制系统
   0 言   20世纪60年代以来,数字信号处理器(Digital Signal Processing,DSP)伴随着计算机和通信技术得到飞速发展,应用领域也越来越广泛。在温度控制方面,尤其是固体激光器的温度控制,受其工作环境和条件的影响,温度的精度要求比较严格,之前国内外关于温度控制基本上都采用温度敏感电阻来测量温度,然后用风冷或者水冷方式来达到温度控制效果,精度不够且体积大。本文基于DSP芯片TMS320F2812与数字温度传感器DSl8B20设计出一个温度测量系统,根据测量所得的温度与设定的参量,并利用模糊PID算法计算出控制量,利用该控制量调节由DSP事件管理器产生PWM波的占空比,并作用于半导体制冷器,以达到温度控
[嵌入式]
用万用表检查PT100温度传感器好坏
  万用表是一种带有整流器的、可以测量交、直流电流、电压及电阻等多种电学参量的磁电式仪表。对于每一种电学量,一般都有几个量程。又称多用电表或简称多用表。万用表是由磁电系电流表(表头),测量电路和选择开关等组成的。通过选择开关的变换,可方便地对多种电学参量进行测量。其电路计算的主要依据是闭合电路欧姆定律。万用表种类很多,使用时应根据不同的要求进行选择。   pt100温度传感器是一种将温度变量转换为可传送的标准化输出信号的仪表。主要用于工业过程温度参数的测量和控制。带传感器的变送器通常由两部分组成:传感器和信号转换器。传感器主要是热电偶或热电阻;信号转换器主要由测量单元、信号处理和转换单元组成(由于工业用热电阻和热电偶分度表是标
[测试测量]
用万用表检查PT100<font color='red'>温度传感器</font><font color='red'>的</font>好坏
Molex 推出具有 M8 全连通性 IP67 DeviceNet I/O 模块
(新加坡 – 2017 年2月28日) Molex 推出市场上第一种 Brad® DeviceNet HarshIO M8 模块,该模块通过 ODVA 的完整合规测试并获得认证,针对电源、I/O 和 DeviceNet 现场总线提供 M8 级别的全连通性,是一种 IP67 等级的、独一无二的小形状系数解决方案,可实现高密度的机器上 I/O 连接,适合数控机床和机器人,以及材料加工和装瓶设备应用。 Molex 产品经理 Eric Gory 表示:“相对于当前的混合式 M12/M8 模块来说,IP67 等级的新型 HarshIO M8 模块是一种更加紧凑的解决方案,即使在最恶劣的环境下也可以直接安装到机器上。窄体外壳便于配置,使该
[工业控制]
18B20数字温度显示系统
综合实验:用18B20(数字温度采集)74LS47(数码管译码)74LS138(三八译码) DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出. 主机控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。本程序仅挂接一个芯片,使用默认的12位转换精度,外接供电电源,读取的温度值高位字节送WDMSB单元,低位字节送WDLSB单元,再按照温度值字节的表示格式及其
[单片机]
由ATmega324p实现数字化无线温度传感器设计方案
1 引 言 目前,大多采用的是有线多点温度采集系统,通过安装温度节点来实现对室内外温度监控。这种传统的多点采集系统需要用导线与每个温度采集节点连接,其技术成熟,制作成本相对较低。但是,在许多场合需要将传感器节点直接放置在目标地点进行现场的数据采集,这就要求传感器节点具有无线通信的能力。同时,由于无线传感器通常使用电池作为能源,所以,它对能耗要求非常高。 针对这些问题,本文提出一个无线传感器设计方案,来实现主机端与传感器节点之间的通信,并且通过选用低功耗的芯片和对软件的低功耗设计实现了低功耗的目标。本文设计主要是基于433 MHz ISM频段,无需申请就可以使用。该设计方案有许多明显的优点:传输速度快、距离远、数据稳定;采用
[单片机]
由ATmega324p实现<font color='red'>的</font>数字化无线<font color='red'>温度传感器</font>设计方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved