完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#define uint unsigned int #define uchar unsigned char ***it ds18=P2^2; ***it duan=P2^6; ***it wei=P2^7; ***it deng=P1^0; uint temp; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void display(uint temp); void init(); void delay(uchar c); void fuwei(); uchar rd(void); void wr(uchar ml); bit tmpreadbit(void); main() { uchar i; uchar a,b; float tt; init(); while(1) { for(i=0;i<9;i++) { fuwei(); delay(1); wr(0xcc); wr(0x44); delay(658); fuwei(); delay(1); wr(0xcc); wr(0xbe); a=rd(); b=rd(); temp=b; temp<<=8; temp=temp|a; tt=temp*0.0625; temp=tt*10+0.5; display(temp); } } } void init() { P0=0xff; duan=0; wei=0; temp=0; } void delay(uchar c) { uchar a,b; for(a=c;a>0;a--) for(b=100;b>0;b--); } void display(uint c) { uchar bai,shi,ge; bai=c/100; shi=c%100/10; ge=c%10; P0=0xff; wei=1; P0=0xf7; wei=0; P0=0x00; duan=1; P0=table[bai]; duan=0; delay(1); P0=0xff; wei=1; P0=0xef; wei=0; P0=0x00; duan=1; P0=table[shi]; duan=0; delay(1); P0=0xff; wei=1; P0=0xdf; wei=0; P0=0x00; duan=1; P0=table[ge]; duan=0; delay(1); } void fuwei() { uchar i; ds18=0; delay(3);//760us for(i=0;i<8;i++);//28us ds18=1;//1us i=0; while((ds18==1)&&(i<18))i++; ds18=1; for(i=0;i<20;i++);//67us,20,13us,4,44us,13 i=0; } void wr(uchar ml) { uint i; uchar j; //bit testb; for(j=1;j<=8;j++) { ml=ml>>1; if(CY==1) //write 1 { ds18=0; for(i=0;i<1;i++); /* 就是这、不是说写1的时候、时间、间隙是15us啊、我调到13us结果还是不行、写入混乱啊、 一点点往下调到现在这种、才可以进行 正常的操作了、、、为什么啊、不是说好的15us 啊*/ ds18=1; for(i=0;i<13;i++); ; } else { ds18=0; //write 0 for(i=0;i<17;i++); ds18=1; ; ; // for(i=0;i<4;i++); } } } bit tmpreadbit(void) { uint i; bit dat; ds18=0;i++; ds18=1;i++;i++; dat=ds18; i=8;while(i>0)i--; return (dat); } uchar rd(void) //read a byte date { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmpreadbit(); dat=(j<<7)|(dat>>1); } return(dat); } |
|
相关推荐
5个回答
|
|
请问你能给我保证你所写的15us就是15么。你能保证么。?一个for函数里面执行起来占了所说指令你算过没?还有是时序
|
|
|
|
、有调试、就是设置断点、查看、for(i=0;i<4;i++); 这句话算着是14us 的、然后将总线拉高、可是这样就不行、 改成 i<1 就可以运行了呢、 它这个时间是不是要算上、总线从低到高、有个延迟呢 |
|
1 条评论
|
|
我看到别人的程序是这样的
for(time=0;time<10;time++) ;//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样 DQ=1; //释放数据线 for(time=0;time<1;time++) ;//延时3us,两个写时序间至少需要1us的恢复期 可参考下 |
|
|
|
{:12:}
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例之网络socket程序编程
492 浏览 0 评论
飞凌嵌入式-ELFBOARD-RGB LCD屏接口的PCB设计要点
755 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
848 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图像对比实验
814 浏览 0 评论
1056 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11700 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-14 22:18 , Processed in 0.711697 second(s), Total 96, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号