完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
tl=read_ds18b20(); th=read_ds18b20(); value=th; value=value<<8; value=value|tl; value=value*(0.0625*10); return value;我想做一个报警系统,设定一个温度最大值与返回值(value)对比,实际温度(value)超过最大值,蜂鸣器响,但是程序老是没超过最值就报警,到底怎么回事,而且当我最值设置900以上才不会报警,求大侠解惑[/mw_shl_code] |
|
相关推荐
7个回答
|
|
不报警的时候,你的读数范围是多少?
|
|
|
|
来点程序。。
|
|
|
|
原子哥,你是说显示的读数吗,目前显示的是28.0度(value其实是280,我是把小数点插入的),我设定的警戒值是300
|
|
|
|
300那不会错啊,你是不是数据类型搞错了?
|
|
|
|
uchar change_ds18b20(uchar z)
{ uchar tl,th; init_ds18b20(); //初始化 write_ds18b20(0xcc); //跳过 init_ds18b20(); if(z==1) { check_rom(1); // 匹配rom1 } if(z==2) { check_rom(2); // 匹配rom2 } if(z==3) { check_rom(3); // 匹配rom3 } write_ds18b20(0x44); init_ds18b20(); write_ds18b20(0xcc); init_ds18b20(); if(z==1) { check_rom(1); // } if(z==2) { check_rom(2); // } if(z==3) { check_rom(3); // } write_ds18b20(0xbe); //启动读暂存器。读内部ram中9字节温度数据 tl=read_ds18b20(); th=read_ds18b20(); value=th; value=value<<8; value=value|tl; value=value*(0.0625*10); return value; } 上面只ds18b20的一部分,下面是main函数 #include"ds18b20.h" #include"lcd12864.h" #include"beep.h" #include"delay.h" #include"keyscan.h" void main() { uint warn=300; init_lcd(); while(1) { keyscan(); display(); change_ds18b20(1); display_lcd12864(1); change_ds18b20(2); display_lcd12864(2); change_ds18b20(3); display_lcd12864(3); if(value>=warn) { beepwarn(); } } } |
|
|
|
|
|
|
|
嗯,没错.
|
|
|
|
只有小组成员才能发言,加入小组>>
3303 浏览 9 评论
2978 浏览 16 评论
3479 浏览 1 评论
9039 浏览 16 评论
4071 浏览 18 评论
1162浏览 3评论
597浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
586浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2322浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1887浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 02:41 , Processed in 1.266894 second(s), Total 93, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号