完善资料让更多小伙伴认识你,还能领取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=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,为什么啊 |
|
相关推荐
4个回答
|
|
楼主,现在解决问题了吗
|
|
|
|
1602算是最简单的时序了,出错基本就是没设置好时序
|
|
|
|
现在坛子里有好多例程,用他们的试试
|
|
|
|
先调试1602,让1602显示固定的字符,显示正常了,再来显示18b20,另外P0口要接上拉电阻
|
|
|
|
只有小组成员才能发言,加入小组>>
3318 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9063 浏览 16 评论
4088 浏览 18 评论
1182浏览 3评论
608浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
600浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 21:28 , Processed in 1.049859 second(s), Total 50, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号