单片机C语言程序 用DS18B20与数码管设计温度报警器

如题所述

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P3^3; //DS18B20数据口
uchar code table[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delay(uint a) //延时
{
while(a--); //为了精准控制
}

void reset() //复位
{
DQ=0;
delay(50);
DQ=1;
delay(50);
}

void write_bit(uchar a) //写一位
{
DQ=0;
if(a) DQ=1;
delay(5);
DQ=1;
}

uchar read_bit() //读一位
{
DQ=0;
DQ=1;
delay(0); //需要非常准确控制时间 5US左右
return DQ;
}

void write_byte(char k) //写一个字节
{
uchar i,b;
for(i=0;i<8;i++)
{
b=k;
b=b>>i; //位操作 用于除2计算
write_bit(b&0x01);
delay(5);
}

}
uchar read_byte() //读一个字节
{
uchar i,m=1,s=0;
for(i=0;i<8;i++)
{
if(read_bit()) s+=m<<i; //位操作 用于乘2计算
delay(5);
}
return s;
}

void display_smg(uint temp) //驱动数码管
{
uint i;
for(i=7;i>=0;i--)
{
P2=i; //位选
P0=table[temp%10]; //段选
temp/=10;
delay(500);
if(temp==0) break; //消零
}
}

main()
{
uchar temp_h,temp_l;
uint temp;
P0=0x00;
P2=0x00;
while(1)
{
reset(); //复位
write_byte(0xcc); //跳过搜索
write_byte(0x44); //温度转换
reset(); //复位
write_byte(0xcc); //跳过搜索
write_byte(0xbe); //要求读出数据
temp_l=read_byte(); //读出低八位
temp_h=read_byte(); //读出高八位
reset(); //终止读数
temp=temp_h*16+temp_l/16;//转换低位和高位之和
display_smg(temp); //驱动数码管
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

...ds18b20,数码管显示温度的单片机的C语言程序,运用的是89c52单片机,附...
include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit DQ=P1^4; \/\/ds18b20与单片机连接口 unsigned char code str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ; \/\/共阴数码管字码表unsigned char code str1[]={0x0bf,0x86,...

用1602LCD与DS18B20设计的温度报警器的源程序
sbit D2=P1^5;uchar code DSY_CODE[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X00};\/\/共阴数码管段码及空白显示 uchar code df_Table[]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};\/\/温度小数位对照表 uchar...

单片机 通过DS18B20测试当前环境温度, 并通过数码管显示当前温度值
void dsInit() :初始化操作,完成的任务就是对18B20进行一次复位。ds代表DS18B20,Init是单词初始化的简写。dsWait() : 延时函数,因为18B20在温度转换的时候需要一段时间,转换完成之后,单片机才能去读温度值。bit readBit() :这个函数我确定是做什么的,感觉是被unsigned char readByte() ...

有关温度报警器的程序,有关DS18B20的程序已写好,求助有关蜂鸣器报警和温...
管实时显示。 2、温度采集电路的设计 温度采集电路模块如图 2 示。DS18B20 内部结构主要由四部分组成:64 位光刻 ROM、 温度传感器、非挥发的温度报警触发器 TH 和 TL、配置寄存器。其中 DQ 为数字信号输 入\/输出端;GND 为电源地;VDD 为外接供电电源输入端。 2图2:温度采集电路 DS18B20 中的温度传感器可完成对...

...单片机数字温度传感器设计 (温度传感器是DS18B20) 寻高手帮在C语言...
if(flag)\/\/温度为正数 由于实际的焊的板子只有三个数码管 所以,没加“+” 了。如 45.0度 { \/\/DIN=1;P2=0xff;P2=seg[0];P0=tab[0];delay1(4);P2=0xff;P2=seg[1];P0=tab[ge];DIN=0; \/\/ 问题问什么 加小数点要在P2口上加才能正常显示。delay1(4);DIN=1;P2=0xff;P2=...

求STC89C52单片机与DS18B20传感器用Keil c语言设计程序
\/\/DS18B20单线温度检测的应用样例程序 \/ DS18B20处理的顺序:1.初始化 2.ROM操作命令 3.存储器操作命令 4.处理\/数据 \/ include<REG52.H> include<math.h> include<INTRINS.H> define uchar unsigned char define uint unsigned int;\/***\/ define duanx P0 \/\/数码管的段 sbit seg1=P2^0;...

求STC89C52单片机和DS18B20温度传感器的程序代码,用四位共阴数码管显示...
\/\/DS18B20的读写程序,数据脚P2.7 \/\/ \/\/温度传感器18B20汇编程序,采用器件默认的12位转化 \/\/ \/\/最大转化时间750微秒,显示温度-55到+125度,显示精度 \/\/ \/\/为0.1度,显示采用4位LED共阳显示测温值 \/\/ \/\/P0口为段码输入,P34~P37为位选 \/\/ \/***\/ include "reg51.h"include ...

求基于AT89C51单片机的DS18B20温度检测程序(用C语言)
\/\/DS18B20的读写程序,数据脚P3.3 \/\/ \/\/温度传感器18B20汇编程序,采用器件默认的12位转化 \/\/ \/\/最大转化时间750微秒,显示温度-55到+125度,显示精度 \/\/ \/\/为0.1度,显示采用4位LED共阳显示测温值 \/\/ \/\/P0口为段码输入,P24~P27为位选 \/\/ \/***\/ include "reg51.h"include...

DS18B20数字温度计
下面是DS18B20测温实验源程序 ORG 0000H START: MOV SP,#60H ;开机初始化 MOV P0,#0FFH MOV P1,#0FEH MOV P2,#0FFH MOV P3,#0FFH MAIN: LCALL GET_TEMPER ;调用读温度子程序 LCALL DISP ;调用数码管显示子程序 AJMP MAIN ;重复循环 ;--- 读DS18B20传感器的温度...

用单片机做温度检测系统 论文,
用DS18B20做的电子温度计,非常简单。include <reg51.h> include\\"AscLed.h\\"include <intrins.h> include <stdio.h> \/\/ define Seck (500\/TK) \/\/1秒中的主程序的系数 define OffLed (Seck*5*60) \/\/自动关机的时间5分钟!\/\/ if (FHz==0)define NOP_2uS_nop_()else defin...

相似回答