单片机与DS18B20并用LCD1602显示 c程序 这个问题中你的问答里的头文件DS18B20_3.H,能把代码发来吗

作者&投稿:夙邢 (若有异议请与网页底部的电邮联系)
基于AT89C51单片机与DS18B20并用LCD1602显示温度 c程序~

仿真实例 供参考

写好DS18B20的驱动,然后直接读取数值就可以了。可以联系我。

/* DS18B20_3.H*/
sbit DQ = P3^3; // 定义DQ引脚为P3.3

/******************************* 延时函数 ********************************
* 功能:在11.059MHz的晶振条件下调用本函数需要24μs ,然后每次计数需16μs
**************************************************************************/
void DS18_delay(int useconds) {
int s;
for (s=0; s<useconds;s++);
}

/******************************* 复位函数 *******************************
* 功能:完成单总线的复位操作。
* 复位时间为480μs,因此延时时间为(480-24)/16 = 28.5,取29μs。
* 经过70μs之后检测存在脉冲,因此延时时间为(70-24)/16 = 2.875,取3μs。
**************************************************************************/
unsigned char ow_reset(void) {
unsigned char presence;
DQ = 0; // 将 DQ 线拉低
DS18_delay(29); // 保持 480μs
DQ = 1; // DQ返回高电平
DS18_delay(3); // 等待存在脉冲
presence = DQ; // 获得存在信号
DS18_delay(25); // 等待时间隙结束
return(presence); // 返回存在信号,0 = 器件存在, 1 = 无器件
}

/****************************** 位写入函数 *******************************
* 功能:向单总线写入1位值:bitval
*************************************************************************/
void write_bit(char bitval) {
DQ = 0; // 将DQ 拉低开始写时间隙
if(bitval==1) DQ =1; // 如果写1,DQ 返回高电平
DS18_delay(5); // 在时间隙内保持电平值,
DQ = 1; // DS18_delay函数每次循环延时16μs,因此DS18_delay(5) = 104μs
}

/**************************** 字节写入函数 *******************************
* 功能:向单总线写入一个字节值:val
*************************************************************************/
void ds18write_byte(char val) {
unsigned char i;
unsigned char temp;
for (i=0; i<8; i++) { // 写入字节, 每次写入一位
temp = val>>i;
temp &= 0x01;
write_bit(temp);
}
DS18_delay(5);
}

/**************************** 位读取函数 ********************************
* 功能:从单总线上读取一位信号,所需延时时间为15μs,因此无法调用前面定义
* 的DS18_delay()函数,而采用一个for()循环来实现延时。
* ***********************************************************************/
unsigned char read_bit(void) {
unsigned char i;
DQ = 0; //将DQ 拉低开始读时间隙
DQ = 1; // then return high
for (i=0; i<3; i++); // 延时15μs
return(DQ); // 返回 DQ 线上的电平值
}

/**************************** 字节读取函数 *******************************
* 功能:从单总线读取一个字节的值
*************************************************************************/
unsigned char DSread_byte(void) {
unsigned char i;
unsigned char value = 0;
for (i=0;i<8;i++) { // 读取字节,每次读取一个字节
if(read_bit()) value|=0x01<<i; // 然后将其左移
DS18_delay(6);
}
return(value);
}

/******************************* 读取温度函数 *****************************
* 功能:如果单总线节点上只有一个器件则可以直接掉用本函数。如果节点上有多个器
* 件,为了避免数据冲突,应使用Match ROM函数来选中特定器件。
* 注: 本函数是根据DS1820的温度数据格式编写的,若用于DS18B20,必须根据
* DS18B20的温度数据格式作适当修改。
**************************************************************************/unsigned
int ReadTemperature(void) {
unsigned char get[10];
unsigned char temp_lsb,temp_msb;
unsigned int t;
unsigned char k;
ow_reset();
ds18write_byte(0xCC); // 跳过 ROM
ds18write_byte(0x44); // 启动温度转换
DS18_delay(5);
ow_reset();
ds18write_byte(0xCC); // 跳过 ROM
ds18write_byte(0xBE); // 读暂存器
for (k=0;k<2;k++){get[k]=DSread_byte();}

temp_msb = get[1]; // Sign byte + lsbit
temp_lsb = get[0]; // Temp data plus lsb

t=temp_msb*256+temp_lsb;
t=t&0x0ff0;
if(t<0xff&&t>0xf0)
t=(-1)*t;
return t>>4;
//temp_f = (((int)temp_c)* 9)/5 + 32;
// 输出华氏温度值

}

DS18B20和LCD1602的中文资倒是有,不知道楼主要不要参考一下。


DS18B02温度读不出来,只能读出0XFF
DS18B02是有时娇气点,对使用时序操作很严格,如果一点做错了,可能测不出来!还有那些延时程序,必须要精确延时,按DATASHEET上的标准来,不然都不行。它规定了温度的读数起点(零点)和测量温度的基本单位。国际单位为热力学温标(K)。目前国际上用得较多的其他温标有华氏温标(°F)、摄氏温标(°C...

protues运行出现:[DS18B22]RAM COMMAND UNSUPPORTED 是什么原因_百度知 ...
你可以把数码管动态显示的延时改长一点,就不会有警告了,可能是读取得太快了,以致DS18B20还没来得及准备数据

ds18b20温度传感器引脚
DS18BDS1822“一线总线”数字化温度传感器同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为±2°C。DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的...

基于18B20的多点温度显示系统
55H 只有地址码匹配的DS18B2才能接受后续的命令 4EH 写入温度上\/下限,紧随其后是2字节数据,对应上限和下限值 F0H 锁定总线上DS18B20的个数和识别其ROM中的64位地址序列码 48H 将9字节暂存寄存器的第3和4字节复制到EEPROM中 ECH 只有温度超过上限或下限的DS18B20才做出响应 B8H 将EEPROM的内容恢复到暂存寄存器的...

基于51系列的单片机和DS1302时钟芯片以及液晶显示的lcd1602电子万年历毕...
void timer0() interrupt 1 \/\/取得并显示日历和时间{ \/\/Init_DS18B20();\/\/温度传感器DS18b2初始化子函数,在头文件中 flag=ReadTemperature();\/\/将18b2头文件运行返回的函数结果送到变量FLAG中,用于显示 \/\/读取秒时分周日月年七个数据(DS1302的读寄存器与写寄存器不一样):miao = BCD_Decimal(read_1302(0x...

2个回答 - 求NDS口袋妖怪白金(中文版)金手指代码
1D2——电击魔 1D0——钻甲暴龙 按Add new,然后会出现个小窗口,小窗口有两个空白框,把你要用的金手指代码复制,然后粘贴在大的空白框里面,然后把Action Repldy DS的选项选上,而小的空白框,可以不管,但是为了方面,你可以在里面打些字,例如注释的,表明这是什么的金手指,方便修改,粘贴好,就按OK,就会返回到之...

口袋妖怪白金版 金手指代码及用法
1.打开no$gba模拟器,运行你的游戏 2.按F2弹出一个窗口 3.点第一个add new 4.然后再输入金手指 5.再在小空输入简述 6.在下面的两个小圆白点点第二个 7.按ok 8.再在金手指列表的金手指的小方块双击就行了 9.要取消的话,对准你要删除的按第3个delete,然后关闭模拟器在重开就行了。

求SD高达G世纪DS的金手指代码,注:是NDS的不是火力交叉,不是PSP和Wil...
!!!0098J- SD高达G世纪DS【日】::通关附加项开启 2227E2C0 00000001 ::人物图鉴全开 D5000000 FFFFFFFF C0000000 00000008 D6000000 0227CE2C D2000000 00000000 ::机体图鉴全开 D5000000 FFFFFFFF C0000000 00000006 D6000000 0227CE04 D2000000 00000000 1227CE20 0000FFFF 2227CE22 00000007 ::...

口袋妖怪心金魂银金手指有哪些?
2、游戏人数: 1人;;游戏地区:城都地区、关东地区、战斗领域口袋妖怪心金魂银;游戏特色:本作可在屏幕下方直截了当得进行直观操作,不再是运用按钮了,图鉴、pm、和包都可直接使用,连箱子里的pm也可直接移动。确认pm的样子,简单触摸,包内的物品可以更简便的看到,可以在下屏进行pm的移动,新的...

口袋妖怪银版的金手指怎么用啊
2.点右下角ADD NEW 3.,将金手指复制粘贴进窗口,,注意Action Replay DS一定要勾选,然后点OK。 4.双击刚刚添加的金手指,就勾上了,然后再点一下OK。 Select是你模拟器上设置的,你可以按F11键查看和修改SELECT键 金手指(connecting finger)是电脑硬件如:(内存条上与内存插槽之间、显卡与显卡插槽等),所有的信号都...

松北区13936572604: 51单片机和DS18B20实现多点温度采集,完成 1能采集多点的温度(至少三点) 2使用LCD显示的温度 汇编程序
锐炭醒脾: 一个仿真实例,6个DS18B20 一线采集,加 DS1302,LCD12864显示.

松北区13936572604: 用51单片机+DS18B20+LCD12864+发光二极管+蜂鸣器做一个温度监测系统 -
锐炭醒脾: 我做的一个项目里 除了 不是用的51单片机 (用PIC单片机驱动的)不是汇编外 其余的都可以满足你 是多路采集、区分(不区分)地址、多路控制单元输出、上下限设参数、即可由LCD12864 也可以接4*2的LED(耐低温,工业环境)

松北区13936572604: 单片机100例中的用1602LCD与DS18B20设计的温度报警器的c语言程序代码,要求还可以显示时间和日期. 我有原理图了 -
锐炭醒脾: http://bbs.elecfans.com/jishu_314456_1_1.html 里面有改一下就得了 数码管显示函数 函数里 ge=wendu%10;//为温度后小数点位 的后边换为1602显示就得了

松北区13936572604: 单片机与DS18B20并用LCD1602显示 c程序 这个问题中你的里的头文件DS18B20 - 3.H,能把代码发来吗 -
锐炭醒脾: /* DS18B20_3.H*/ sbit DQ = P3^3; // 定义DQ引脚为P3.3/******************************* 延时函数 ********************************* 功能:在11.059MHz的晶振条件下调用本函数需要24μs ,然后每次计数需16μs ************************************************...

松北区13936572604: 两个DS18B20测温 通过S51单片机在LCD1602上显示,显示分为上下两行,其程序如何? -
锐炭醒脾: 程序分2部分1、通过18b20的时序读出两个温度2、将两个温度值计算成实际温度送到液晶显示

松北区13936572604: 基于C51单片机的电子台历 -
锐炭醒脾: 基于"AT89C51单片机+DS1302+DS18B20+LCD12864显示" 1、显示年月日时分秒及星期信息. 2、具有可调整日期和时间功能 3、增加闰年计算功能 4、闹钟功能 ---- 这些,可不是三、五天就能做出来的. 要这个,恐怕是要拿出些银子来了.

松北区13936572604: 一个单片机控制两个DS18B20,该注意什么问题,进行ROM匹配么?急需解答啊,哪位高手帮帮我啊!
锐炭醒脾: 用两个IO控制的就不说了和控制一个18b20一样 如果你采用一个IO口控制的话需要进行ROM匹配 你可以先用一个测序列号的程序测出2个18b20的IP 然后在测温程序中直接匹配就行了 下面是度序列号的程序 用1602显示的 程序已通过测试 如果对...

松北区13936572604: DS18B20检测温度,用单片机读取,并用LCD显示出来,为什么不用到模数转换芯片啊?
锐炭醒脾: 18b20是数字芯片,出来的数据就是 数字的,不用转换

松北区13936572604: 单片机与DS18B20并用LCD1602显示 c程序
锐炭醒脾: #include&lt;reg51.h&gt; #define uchar unsigned char #define uint unsigned int sbit BLK=P1^0; sbit DQ=P1^4; sbit RS=P1^3; sbit RW=P1^2; sbit EN=P1^1; unsigned char code str1[]={"temperature: "}; unsigned char code str2[]={" "}; uchar ...

松北区13936572604: 单片机数字式温度计设计,用DS18B20和12864液晶屏
锐炭醒脾: 1、我做过的是DS18B20+PIC单片机+数码管显示. 2、也做过单片机+热电偶+12864显示温度 3、最近要做的是,单片机+DS18B20+数码管显示+时间显示. 有按键,设置温度上限和下限,超过上限和下限,报警和继电器输出控制设备. 你就说了一个命题,是想要源程序,设计原理,还是想要成熟的产品,还是外包开发啊

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网