51单片机18B20温度与串口实验

发布者:雷电狂舞最新更新时间:2015-06-23 来源: 51hei关键字:51单片机  18B20  温度与串口 手机看文章 扫描二维码
随时随地手机看文章
有图有真相






温度显示在串口调速器上,此软件可到 http://www.51hei.com/mcudown/ 单片机开发实用工具软件这一栏下载
下面单片机部分的源代码:
 

//11.0592晶振
#include
#define uchar unsigned char
#define uint unsigned int
code uchar seg[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};   //数码管码表
code uchar tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};   //数码管位选

//sbit k8=P1^7;   //按键发送温度值
sbit dec=P0^5;   //小数点显示位
static uint count;     //延时发送温度值变量
void delay(uint k)
{
 while(k--);
}
void show_temp(uint k)    //显示温度值函数
{
 P0=seg[k/100];
 P2=tab[2];
 delay(30);
 P0=0xff;
 P2=0xff;
 P0=seg[k%100/10];
 dec=0;       //显示小数点
 P2=tab[1];
 delay(30);
 P0=0xff;
 P2=0xff;
 P0=seg[k%10];
 P2=tab[0];
 delay(30);
 P0=0xff;
 P2=0xff;
}
#include "18B20.h"        //18B20库函数
 
uchar suf;      //存放串口收到的数据
uint temp;    //输出温度值
 
void serial_init()   //串口初始化
{
   TMOD|=0x20;   //定时器设定自动重撞在模式
   TH1=TL1=0xfd;  //9600波特率
   SM2=0;       //无多机处理位
   SM1=1;     // 8位可变波特率模式
   SM0=0;
   TR1=1;         //  定时器1打开
   REN=1;         //串口接收使能
}
void send_byte(uchar u)   //发送一个字节函数
{
   bit es;    //保存先前ES状态变量,这样可以不干扰其他用户用它是现在的状态
   es=ES;
   ES=0;     //暂时关闭串口中断
   SBUF=u;    //数据放入SBUF缓冲器等待发送完成
   while(TI==0);   //等待发送完成
   TI=0;
   ES=es;     //恢复先前状态
}
void send_str(uchar *p) //发送一串字符函数
{
   while(*p)
   {
 send_byte(*p);
 p++;
   }
}
void str_init()   //串口中断初始化
{
 EA=1;
 ES=1;
}
void serial_event() interrupt 4   //串口中断函数
{
   if(RI==1)   //在中断里尽量只做需要的事情
   {
    suf=SBUF;
 RI=0;
   }
   else
   {
 ;
 }
}[page]
void send_number(uchar *p,uint k)    //通过串口发送温度值函数
{
 while(*p)
 {
  send_byte(*p);
  p++;
 }
 send_byte(' ');
 send_byte(' ');
 send_byte(k/100+48);
 send_byte(k%100/10+48);
 send_byte('.');
 send_byte(k%10+48);
 send_byte(' ');
 send_byte(' ');
}
/*
void key8()             //按键发送函数
{
  static uchar i,j;
  if(k8==0)
  {
 if(i==0)
 {
  j++;
  if(j>3)
  {
   i=1;j=0;
   send_number("the temperature is  ",temp);
  }
 }
  }
  else
  {
   i=0;
   j=0;
  }
}
*/
void main()
{
   serial_init();       //串口初始化
   send_byte(12);  //超级终端清屏
   send_str("serial_init is ok ");    //初始化好坏标示字符串
   str_init();           //串口中断初始化
   send_str("str_init is ok ");
 while(1)               
 {
   count++;   
   temp=read_18b20();
   show_temp(temp);
   if(count>500)     //约没3秒发送一次温度值给串口
   {
   send_number("The temperature is ",temp);
   count=0;
   }
   else
   {
   }
 }
}
 
//-----------------------18B20----库函数----------------
sbit dq=P3^4;   //18B20数据口
void send_1()  //发送1位1函数
{
  dq=0;
  dq=0;
  dq=0;
  dq=1;
  delay(2);
}
void send_0() //发送1位0函数
{
  dq=0; 
  delay(2);
  dq=1;
}
void Tsend_byte(uchar dat)
{
 uchar i;
 for(i=0;i<8;i++)
 {
  if(dat&0x01)send_1();
  else send_0();
  dat>>=1;
 }
}
uchar read_byte()   //18B20读取数据函数
{
  uchar i,byte;
  for(i=0;i<8;i++)
  {
    dq=0;
 dq=0;
 dq=1;
 dq=1;
 byte>>=1;
 if(dq==1)
 {
  byte=byte+0x80;  //如果采样为1则最高位为1
 }
 delay(3);
  }
  return byte;
}
uchar start_18b20() //启动18b20实质上判断有误应答信号
{
  static uint cnt;
  dq=0;
  delay(62);
  dq=1;
  while(dq==1)  //等待拉低
  {
 cnt++;
 if(cnt>50000)
 {
 cnt=0;
 return 1;  //等待超时判断说明器件坏了
 }
  }
   while(dq==0)             
   {
 cnt++;
 if(cnt>50000)
 {
  cnt=0;
  return 1;
 }
   }
   return 0;       //正常启动返回0值
}
uint read_18b20()  //读取温度值函数
{
  uchar TH,TL;
  uint temp;
  start_18b20();
  Tsend_byte(0xcc);
  Tsend_byte(0x44);
  ;;
  start_18b20();
  Tsend_byte(0xcc);
  Tsend_byte(0xbe);
   TL=read_byte();
   TH=read_byte();
   temp=TH;
   temp<<=8;
   temp=temp+TL;
   /*if(temp&0xf800)   //如果最高位为1则是温度为负值   .可以设置温度负值符号
   {
 temp=~temp+1;
   }
   */
   temp=temp*0.0625*10;   //显示小数部分
   return temp;
}
关键字:51单片机  18B20  温度与串口 引用地址:51单片机18B20温度与串口实验

上一篇:51单片机简易频率计源代码
下一篇:4*4键盘扫描代码

推荐阅读最新更新时间:2024-03-16 14:04

基于51单片机温度湿度采集系统
实现功能: 1、对温度、湿度进行采集 2、可以警报提示、修改温度、湿度上下限值 3、lcd显示相关信息 原理图: 部分程序: #include reg52.h #define uint unsigned int #define uchar unsigned char #include intrins.h typedef bit BOOL ; sbit io = P1^1 ;//(口线定义) sbit bee=P1^0; sbit rs = P2^5 ; sbit rw = P2^6 ; sbit ep = P2^7 ; bit flag_300ms ; sbit K1=P1^2; sbit K2=P1^3;
[单片机]
ucos ii的51单片机移植
1. μC/OS-Ⅱ概述 μC/OS-Ⅱ在特定处理器上的移植大部分工作集中在多任务切换的实现上,这部分代码主要用来保存和恢复处理器的现场。但许多操作如读/写寄存器不能用C语言而只能用汇编来实现。 将μC/OS-Ⅱ移植到ARM处理器上,只需要修改与处理器相关的3个文件:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。 2. OS_CPU.H的移植 1) 数据类型的定义 typedef unsigned char BOOLEAN; typedef unsigned char INT8U; typedef signed char INT8S; typedef unsigned short INT16U;
[单片机]
基于采用AT89S51单片机和LM35温度传感器的温度采集显示系统设计
随着电子和传感技术的快速发展,温度的测量和控制在民用、工业以及航空航天技术等领域,等到了广泛应用。小型的、低功耗的、廉价的、可靠性高的温度传感器引起了人们的广泛关注。在实际生产、生活等领域中,温度是环境因素不可或缺的一部分,对温度进行及时精确的控制和检测显得尤为重要。本文基于AT89S51单片机,采用 LM35温度传感器,设计了一种灵敏度较高,抗干扰能力强,工作稳定可靠的温度采集显示系统。 1、系统结构及工作原理 温度采集显示系统电路由温度采集模块、A/D转换模块、单片机控制模块、数码管显示模块和下载模块组成。电路工作原理是:首先由LM35温度传感器采集外界环境的温度,经LM358放大10倍后以电压形式输入到A/D采样电路,由
[单片机]
基于采用AT89S<font color='red'>51单片机</font>和LM35<font color='red'>温度</font>传感器的<font color='red'>温度</font>采集显示系统设计
以89C51单片机为控制核心的开关电源优化设计
引言   开关电源是利用现代电力电子技术控制功率开关管(MOSFET,IGBT)开通和关断的时间比率来稳定输出电压的一种新型稳压电源。从上世纪90年代以来开关电源相继进入各种电子、电器设备领域,计算机、程控交换机、通讯、电子检测设备电源、控制设备电源等都已广泛地使用了开关电源。利用单片机控制的开关电源,可使开关电源具备更加完善的功能,智能化进一步提高,便于实时监控。其功能主要包括对运行中的开关电源进行检测、自动显示电源状态;可以通过按键进行编程控制;可以进行故障自诊断,对电源功率部分实现自动监测;可以对电源进行过压、过流保护;可以对电池充放电进行实时控制。   开关电源的系统结构   通信用-48V开关电源结构图如图1所示:
[应用]
51单片机是如何产生串口中断的
首先,你要用软件允许中断, 即C语言中EA = 1; 允许总中断ES = 1; //允许串口中断汇编中可用 SETB EA ;允许总中断 SETB ES ;允许串口中断 当单片机接收到一帧数据后,RI会置1,向CPU申请中断,若之前有中断允许,则产生了中断,进入中断服务程序。 当然,单片机发送完一帧数据,TI也会置1,同样会产生中断! 一般我们在发送数据时要关中断,因为一般你不用在发送时不用处理数据; 接收数据时要开中断,以便你在中断服务程序中将接收到的数据进行存储并处理。 补充:其实,不管你有没有允许中断,上位机(此时即给单片机发送信息的机器)只要给单片机发送数据,单片机就会自动接收数据,并把它放在数据缓
[单片机]
51单片机控制两个步进电机
/*----------------------------------------------- 步进电机控制 ------------------------------------------------*/ #include reg52.h #define KeyPort P3 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa ={0x3f,0x06,0x5b,0x4f,0x66,
[单片机]
基于AT89C51单片机16×16LED汉字点阵滚动显示的设计
LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。LED显示屏发展较快,本文讲述了基于AT89C51单片机16×16LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术 1 硬件电路组成及工作原理 本产品采用以AT89C51单片机为核心芯片的电路来实现,主要由AT89C51芯片、时钟电路、复位电路、列扫描驱动电路(74HCl54)、16×16LED点阵5部分组成,如图1
[单片机]
基于AT89C<font color='red'>51单片机</font>16×16LED汉字点阵滚动显示的设计
4利用移位函数操作点亮流水灯
功能说明:利用移位函数操作点亮流水灯 程序源代码如下: #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int #define led P0 void delay (void) { uchar a,b; for(a=0;a 200;a++) for(b=0;b 200;b++); } void main(void) { uchar i,k; while(1) { k = 0xfe; for(i=0;i 8;i++) { led = k; de
[单片机]
4利用移位函数操作点亮流水灯
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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