完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #include #define uchar unsigned char #define uint unsigned int #define lcd_data P0 ***it rs=P2^6; ***it rw=P2^5; ***it e=P2^7; ***it p***=P3^2; ***it dq=P3^7; uchar dis1[] = {"Temp:"}; uchar ds18b20init(); void ds18b20write(uchar dat); uchar ds18b20read(); int ds18b20readtemp(); void delay(uint i); void write_com(uchar com); void write_data(uchar dat); void LcdInit(); void delay(uint i) { while(i--); } uchar ds18b20init() { uchar date=0; dq=1; delay(10); dq=0; delay(60); dq=1; delay(10); date=dq; delay(10); return date; } void ds18b20write(uchar date) { uchar i; for(i=0;i<8;i++) { dq=0; delay(2); dq=1; delay(2); dq=date&0x01; dq=1; delay(6); date >>= 1; } } uchar ds18b20read() { uchar dat=0; uchar j; for(j=0;j<8;j++) { dq=0; delay(1); dat>>=1; dq=1; delay(2); if(dq) dat|=0x80; delay(5); } return dat; } int ds18b20readtemp() { int temp=0; uchar templ,temph; ds18b20init(); delay(100); ds18b20write(0xcc); ds18b20write(0x44); ds18b20init(); delay(100); ds18b20write(0xcc); ds18b20write(0xbe); templ=ds18b20read(); temph=ds18b20read(); temp=temph; temp<<=8; temp|=templ; temp=temp*0.0625*100; return (temp); } void write_com(uchar com) { rs=0; rw=0; e=0; P0=com; delay(5); e=1; delay(5); e=0; } void write_data(uchar dat) { rs=1; rw=0; e=0; P0=dat; delay(5); e=1; delay(5); e=0; } void LcdInit() { write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } void display() { uchar i; int a1,a2,a3,a4,a5; int temp=0; temp= ds18b20readtemp(); a1 = temp/10000; a2 = temp%10000/1000; a3 = temp%1000/100; a4 = temp%100/10; a5 = temp%10; write_com(0x00+0x80); for(i=0;i<5;i++) { write_data(dis1); } write_com(0x80+0x05); write_data(a1+0x30); write_com(0x80+0x06); write_data(a2+0x30); write_com(0x80+0x07); write_data(a3+0x30); write_com(0x80+0x08); write_data('.'); write_com(0x80+0x09); write_data(a4+0x30); write_com(0x80+0x0a); write_data(a5+0x30); write_com(0x80+0x0b); write_data(0xdf); write_com(0x80+0x0c); write_data('C'); } void main() { LcdInit(); while(1) { ds18b20readtemp(); display(); } } 一直显示的是000.00,为什么啊 |
|
相关推荐
3个回答
|
|
在temp= ds18b20readtemp();后面给temp赋任意值,看是否能正确显示,来判断显示和数据转换有没有问题,这两个没问题的话,那就是读取传感器部分出错。
|
|
|
|
人中狼 发表于 2017-5-3 15:20 赋任意值可以正确显示 |
|
|
|
那就主要查传感器部分吧,这个传感器没用过,好好看看资料,注意操作时序
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
515 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
515 浏览 0 评论
780 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1360 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
572 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11757 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:45 , Processed in 0.631368 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号