完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
正在学习单片机的DS18B20温度传感器,没办法编出程序,看书上给的,但不是太懂,请各路高手指导。
问题详见注释语句后有问好的地方,程序有点长,谢谢了!! #include #define uchar unsigned char #define uint unsigned int ***it DS=P2^2; //define interface uint temp; // variable of temperature uchar flag1; // sign of the result positive or negative ***it dula=P2^6; ***it wela=P2^7; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef}; void delay(uint count) //delay { uint i; while(count) { i=200; while(i>0) i--; count--; } } ///////功能:串口初始化,波特率9600,方式1/////// void Init_Com(void) { TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1; } void dsreset(void) //send reset and initialization command { uint i;//这个初始化好像没有用,需要吗? DS=0; i=103; while(i>0)i--; DS=1; i=4; while(i>0)i--; } bit tmpreadbit(void) //read a bit { uint i; bit dat; DS=0;i++; //i++ for delay DS=1;i++;i++; dat=DS; i=8;while(i>0)i--; return (dat); } uchar tmpread(void) //read a byte date { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmpreadbit(); dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里 } return(dat);//温度传感器位数是16为,怎么8位的字节也装得下? } void tmpwritebyte(uchar dat) //write a byte to ds18b20 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01;//这个按位与是什么意思,不懂? dat=dat>>1; if(testb) //这个IF语句更不懂了? { DS=0; i++;i++; DS=1; i=8;while(i>0)i--; } else { DS=0; //write 0 i=8;while(i>0)i--; DS=1; i++;i++; } } } void tmpchange(void) //DS18B20 begin change { dsreset(); delay(1); tmpwritebyte(0xcc); // address all drivers on bus tmpwritebyte(0x44); // initiates a single temperature conversion } uint tmp() //get the temperature { float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp<<=8; //two byte compose a int variable temp=temp|a; tt=temp*0.0625; temp=tt*10+0.5; return temp; } void readrom() //read the serial { uchar sn1,sn2; dsreset(); delay(1); tmpwritebyte(0x33); sn1=tmpread(); sn2=tmpread(); } void delay10ms() //delay { uchar a,b; for(a=10;a>0;a--) for(b=60;b>0;b--); } void display(uint temp) //显示程序 { uchar A1,A2,A2t,A3,ser; ser=temp/10; SBUF=ser; A1=temp/100; A2t=temp%100; A2=A2t/10; A3=A2t%10; dula=0; P0=table[A1]; //显示百位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; delay(1); dula=0; P0=table1[A2]; //显示十位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(1); P0=table[A3]; //显示个位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; delay(1); } void main() { uchar a; Init_Com(); do { tmpchange(); // delay(200); for(a=10;a>0;a--) { display(tmp()); } } while(1); } |
|
相关推荐
3个回答
|
|
问题还没有解决,请诸位大神帮帮忙,谢谢了
|
|
|
|
自己再次顶一下,求高手相助!!!
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard EL 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用
1226 浏览 0 评论
stc15f2k60s2利用串口传输字模存储到eeprom并进行点阵显示
1453 浏览 1 评论
1457 浏览 0 评论
615 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-串口通讯编程示例之串口编写程序
1283 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11600 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-4 09:36 , Processed in 0.815929 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号