问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

单片机数字温度计设计用C语言写程序

发布网友 发布时间:2022-04-22 00:00

我来回答

2个回答

热心网友 时间:2023-09-14 01:25

#include <reg51.h>
#define uchar unsigned char
sbit BEEP=P3^7;//接控制继电器
sbit DQ = P3^6;//接温度传感器18B20
uchar t[2],number=0,*pt;//温度值
uchar  TempBuffer1[4]={0,0,0,0};
uchar Tmax=50,Tmin=10;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7};
uchar currtemp;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
P2=1<<number;
if(number==2)P0=distab[TempBuffer1[0]]&0x7f;
else P0=distab[TempBuffer1[0]];
number++;
if(number>3)number=0;
}
void delay_18B20(unsigned int i)
{
while(i--);
}

/**********ds18b20初始化函数**********************/
void Init_DS18B20(void) 
{
 bit x=0;
do{
 DQ=1;
 delay_18B20(8);
 DQ = 0;          //单片机将DQ拉低
 delay_18B20(90); //精确延时 大于 480us
 DQ = 1;          //拉高总线
 delay_18B20(14);
 x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败,继续初始化
}while(x);
 delay_18B20(20);
}

/***********ds18b20读一个字节**************/  

unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
 {
  DQ = 0; // 给脉冲信号
  dat>>=1;
  DQ = 1; // 给脉冲信号
  if(DQ)
  dat|=0x80;
  delay_18B20(4);
 }
 return(dat);
}

/*************ds18b20写一个字节****************/  

void WriteOneChar(unsigned char dat)
{
 unsigned char i=0;
 for (i=8; i>0; i--)
 {
  DQ = 0;
 DQ = dat&0x01;
    delay_18B20(5);
 DQ = 1;
    dat>>=1;
}
}

/**************读取ds18b20当前温度************/

unsigned char *ReadTemperature(unsigned char rs)
{
unsigned char tt[2];
  delay_18B20(80);  
Init_DS18B20();
WriteOneChar(0xCC);   //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
  delay_18B20(80);  
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度
tt[0]=ReadOneChar();  //读取温度值低位
tt[1]=ReadOneChar();  //读取温度值高位
return(tt);
}

void covert1(void)//将温度转换为LED显示的数据
{
   uchar x=0x00,y=0x00;
   t[0]=*pt;
   pt++;
   t[1]=*pt;
   if(t[1]&0x080)      //判断正负温度
   {
    TempBuffer1[0]=0x0c;     //c代表负
t[1]=~t[1]; /*下面几句把负数的补码*/
t[0]=~t[0];  /*换算成绝对值*********/
x=t[0]+1;
t[0]=x;
if(x==0x00)t[1]++;
   }
  else TempBuffer1[0]=0x0a;//A代表正
  t[1]<<=4;//将高字节左移4位
  t[1]=t[1]&0xf0;
  x=t[0];//将t[0]暂存到X,因为取小数部分还要用到它
  x>>=4;//右移4位
  x=x&0x0f;//和前面两句就是取出t[0]的高四位
  y=t[1]|x;//将高低字节的有效值的整数部分拼成一个字节
  TempBuffer1[1]=(y%100)/10;
  TempBuffer1[2]=(y%100)%10;
  t[0]=t[0]&0x0f;//小数部分
  TempBuffer1[3]=t[0]*10/16;
if(currtemp<Tmin  || currtemp>Tmax)BEEP=1;
else BEEP=0;
}
void convert(char tmp)
{
uchar a;
if(tmp<0)
{
TempBuffer1[0]=0x0c;
a=~tmp+1;
}
else 
{
TempBuffer1[0]=0x0a;
a=tmp;
}
TempBuffer1[1]=(a%100)/10;
TempBuffer1[2]=(a%100)%10;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
out=1;
flag=0;
ReadTemperature(0x3f);
        delay_18B20(50000);//延时等待18B20数据稳定  
 while(1)
{
pt=ReadTemperature(0x7f); //读取温度,温度值存放在一个两个字节的数组中
if(dismod==0)covert1();
delay_18B20(30000);
}
}

追问

你还有些东西没定义

热心网友 时间:2023-09-14 01:26

在STC单片机的官网有18B20的示例程序,自己拿来改改就能用,只能帮你到这儿了
用C语言制作基于单片机的数字温度计设计的原理图好程序 51单片机

a=ReadOneChar(); //读取温度值低位 b=ReadOneChar(); //读取温度值高位 temp1=b&lt;&lt;4; //高8位中后三位数的值 temp1+=(a&amp;0xf0)&gt;&gt;4; //低8位中的高4位值加上高8位中后三位数的值 temp1室温整数值 temp2=a&amp;0x0f; //小数的值 ...

数字温度计设计 数字温度计设计论文

本设计的内容主要分为两部分,一是对系统硬件部分的设计,包括温度采集电路和显示电路;二是对系统软件部分的设计,应用C语言实现温度的采集与显示。通过DS18B20直接读取被测温度值,送入单片机进行数据处理,之后进行输出显示,最终完成了数字温度计的总体设计。其系统构成简单,信号采集效果好,数据处理速度快...

...LCD1602液晶显示的高精度数字温度计程序,用C语言编程

Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 delay_18B20(100); // this message is wery important Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)...

求一个51单片机控制的温度计显示程序

//温度传感器18B20汇编程序,采用器件默认的12位转化 // //最大转化时间750微秒,显示温度-55到+125度,显示精度 // //为0.1度,显示采用4位LED共阳显示测温值 // //P0口为段码输入,P24~P27为位选 // /***/ include "reg51.h"include "intrins.h" //_nop_();延时函数用 ...

用51单片机和18b20做一个温度计,求一个完整程序,要求用12864显示。

(1)、只要求一个端口即可实现通信。(2)、在DS18B20中的每个器件上都有独一无二的序列号。(3)、实际应用中不需要外部任何元器件即可实现测温。(4)、测量温度范围在-55。C到+125。C之间。(5)、数字温度计的分辨率用户可以从9位到12位选择。(6)、内部有温度上、下限告警设置。2、...

数字温度计单片机课程设计用74LS573驱动4位数码管

void delay(uint z);uchar temp,aa,numdu,numwe,bai,shi,ge;uint shu;void init();sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={ 0x3f , 0x06 , 0x5b , 0x4f ,0x66 , 0x6d , 0x7d ,0x07, 0x7f , 0x6f ,0x77, 0x7c , 0x39 ,0x5e ,0x79 ,0x71 ,0x00 }...

用AT89C51单片机和温度传感器DS18B20S设计数字式温度计

本次设计采用的AT89S52是一种flash型单片机,可以直接在线编程,向单片机中写程序变得更加容易。本次设计的数字温度计采用的是DS18B20数字温度传感器,DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。本设计根据设计要求,...

基于单片机数字温度计程序出错,麻烦哪位大神帮忙看一下,必加分!!求打...

code numtab[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};你可 测试数码管很简单,P1=dispcode[dispbuf[dispcount]];你这里是控制数据输出,那么可以直接 P1=dispcode[0];这样,若仿真成功显示0,那肯定成立了,不然你就改共阳吧。

用AT89c51与DS18B20做数字温度计proteus怎么连接仿真图和C语言编程?

1、PROTEUS安装好后,默认不会在桌面上产生快捷方式。先打开开始菜单,依次点击“程序、Proteus7Professional、ISIS7Professional”打开PROTEUS。2、单击图中的P,添加单片机等元件。3、用关键字搜索,89C51,再加几个LED,因为是仿真就不用加限流电阻和晶振复位的元件了。4、把元件排列放好,再放一个电源...

基于单片机的数字温度计设计好做么

采用温度模块,例如常用的DS18B20,不需要AD检测,只需要进行I2C读写取得温度值;最后确定如何显示检测到的数值。常用的有:1. 数码管,可以显示段码数字或简单字符。2.LCD1602液晶屏,可以显示两行16*2个英文字母和数字;3.LCD12864液晶屏,可以显示四行8*4个汉字。也可以显示字母及数字,当然也可以显示...

单片机数字温度计程序 不用单片机的数字温度计 52单片机温度计程序 51单片机温度计程序 单片机数字式温度计 单片机温度计设计 数显温度计基于单片机 51单片机数显温度计 51单片机温度显示程序
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
上海大名城映_有多少户? 英特尔处理器漏洞有哪些害? 英特尔漏洞都会影响哪些CPU?下一代还会影响吗? cpu使用率100%是怎么回事呀? 生姜红茶减肥法骗局 鲁东大学大一新生电话卡是用的学校发的联通卡吗? 鲁东大学用移动的多还是用联通的多?求师哥师姐们解答 ...牙齿一碰到溃疡就疼,治疗口腔溃疡的偏方有哪些呢? 我想找一个飞车情侣名字,我有车队,车队名字是丿茗门丨灬 梦幻悟空传变态版安卓APK 小眯眼摄像头如何连接到手机? 熬制糖色用水还是用油 c语言数的计数 炒糖色时糖,油,水的大概比例是多少? 关于C语言计时 炒糖色要放油吗?还是加清水炒?炒的时候注意什么? C语言计数 用冰糖炒糖色需要加水融化吗? 用单片机C语言设计数字温度计!求代码!急急急 如何利用C语言编制计时器代码? 炒糖色应该用油还是用水? 怎么用c语言编写一个计时器!!! 用c语言编写计时器,具体如下 C语言做一个计时器 c语言中怎么设置计时器? c语言如何计时 如何在C语言中实现计时 炒糖色,是用水还是用油? 炒糖色是加水好还是加油好 自己在家炒糖色的时候应该加油还是加水?有什么技巧? 炒糖色时,怎么做才能更好上色? 小眯眼APP怎样安装到电视 跪求c语言计数代码 无锡的中央公园海底世界好玩吗? 苹果手机怎样设置小眯眼监控设备的操控台按钮 c语言帮忙做个计数器 无锡海底世界好玩吗? c语言计数器 下载手机小咪眼设置格式时 无锡海底世界好玩吗 c语言倒计时怎么编? 阿里云ai智能摄像机怎么使用 无锡的海底世界怎么样?听说是很不错的地方,价格... 小眯眼如何放到手机桌面上? c语言 制作 倒计时? 无锡海底世界门票是多少啊 好玩嘛 苹果手机的小眯眼软件升级完监控突然黑屏了 无锡的海底世界怎么样?是不是比较适合暑期旅游啊? 一个小眯眼APP能帮几个监控 C语言中有没有用于计时的函数?怎么用?