完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
求大神帮我看下程序!一直困扰了我几天。 //18b20操作 void delay1 (unsigned char q) { while(q--) for(i=0;i<5;i++) _nop_(); } void init_18b20() {unsigned char x=0; dp=1; delay1(1); //dp为通信总线 dp=0; delay1(140); dp=1; delay1(13); x=dp; delay1(87); dp=1; } void write_18b20( char d) {unsigned char i=0; for(i=0;i<8;i++) {dp=1; delay1(1); dp=0; //delay1(1); dp=d&0x01; delay1(12); dp=1; d>>=1; } } unsigned char read_18b20() {unsigned char i=0; unsigned char d=0; for(i+0;i<8;i++) { dp=0; d >>= 1; dp = 1; delay1(1); if(dp) d|=0x80; delay1(13); dp=1; } return(d); } void read_temp() { unsigned char low; unsigned char high; c=0; init_18b20(); write_18b20(0xcc); write_18b20(0x44); init_18b20(); write_18b20(0xcc); write_18b20(0xbe); low=read_18b20(); high=read_18b20(); tem=high; tem<<=8; tem=tem|low; //tem为long型 if(tem%32==0x1f) {value=~(tem/32)+1; //value为float型 c=value*0.0625; //c为int型 } else value=tem/32; c=value*0.0625; } void display() { read_temp(); ***[0]=c/100; //百位 ***[1]=c%100/10; //十位 ***[2]=c%100%10; //个位 //***[4]=c%100%10%10; //小数位 write_command(0x80+0x40+0x07); write_data(***[0]+0x30); write_command(0x80+0x40+0x08); for(i=1;i<3;i++) {write_data(***+0x30); } write_command(0x80+0x40+0x0a); write_data(***[10]); write_data(***[2]+0x30); } |
|
相关推荐
13个回答
|
|
看到你的程序,我也也炸了
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
每个人有每个人的编程风格,要想别人能看懂你的程序,最好详细注释,这样利于别人读程序,也利于你排错。 |
|
|
|
|
|
|
|
我知道我问题了所在了。原来是实现延迟不是我想的那精确,认为for(i=0;i<5;i++)_nop_();就是延迟5us。实际上要大的多; |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
4493 浏览 3 评论
5784 浏览 1 评论
6057 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
7797 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1222 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 10:43 , Processed in 0.677263 second(s), Total 67, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号