1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
先检查硬件有没有焊错!如果没有请发程序上来!
|
|
|
|
硬件没有焊错,程序如下:(我写的是.h文件,然后调用该.h文件)
---------------------------------------------以下为主文件--------------------------------------------------------- #include #include "Ds18b20.h" //调用温度传感器头文件,头文件的编写在下面 #include "1602.h" //调用1602显示的都文件 __CONFIG(0x3B31); void main() { Lcd1602_Init(); uchar Temper[4]; Disp(0,0,'T'); Disp(1,0,'E'); Disp(2,0,'M'); Disp(3,0,'P'); Disp(4,0,':'); while(1) { Temper[0]=Ds18_TemPart(Ds18_GetTem_char())[0]; Temper[1]=Ds18_TemPart(Ds18_GetTem_char())[1]; Temper[2]=Ds18_TemPart(Ds18_GetTem_char())[2]; Temper[3]=Ds18_TemPart(Ds18_GetTem_char())[3]; if(Temper[0]==1) { Disp(5,0,'-'); } else { Disp(5,0,'+'); } Disp(6,0,'0'+Temper[1]); Disp(7,0,'0'+Temper[2]); Disp(8,0,'0'+Temper[3]); } } -------------------------------------------以下为Ds18b20的头文件----------------------------------------------------------- //-------------------------------------------- //Ds18b20 模块函数 //-------------------------------------------- //DQ为Ds数据连接口 //T_DQ为数据接口传输方向 //使用Ds18_GetTem_char()返回一个字节,包含温度 //使用Ds18_TemPart(uchar temp)将Ds18_GetTem_char()的字节返回一个数组[4] //[0]:温度正负 [1]:温度百位 [2]:温度十位 [3]:温度个位 //--------------------------------------------------- #include #define DQ RC0 #define T_DQ TRISC0 #define DQ_HIGH() T_DQ=1 #define DQ_LOW() T_DQ=0;DQ=0 #define uint unsigned int #define uchar unsigned char void Ds18_delay(uint x); void Ds18_delay(uint x); void Ds18_delayus(uint,uchar); void Ds18_init(); void Ds18_write_byte(uchar date); uchar Ds18_read_byte(); void Ds18_reset() { uchar st=1; DQ_HIGH(); NOP();NOP(); while(st) { DQ_LOW(); Ds18_delayus(70,30); DQ_HIGH(); Ds18_delayus(4,4); if(DQ==1) st=1; else st=0; Ds18_delayus(50,10); } } void Ds18_write_byte(uchar date) { uchar i,temp; DQ_HIGH(); NOP();NOP(); for(i=8;i>0;i--) { temp=date&0x01;//01010101 DQ_LOW(); Ds18_delayus(0,0); if(temp==1) DQ_HIGH(); Ds18_delayus(2,2); DQ_HIGH(); date=date>>1;//00101010 } } uchar Ds18_read_byte() { uchar i,date=0; static bit j; for(i=8;i>0;i--) { date=date>>1; DQ_HIGH(); NOP();NOP(); DQ_LOW(); NOP();NOP();NOP();NOP();NOP();NOP(); DQ_HIGH(); NOP();NOP();NOP();NOP(); j=DQ; if(j==1) date=date|0x80;//1000 0000 Ds18_delayus(1,1); } return (date); } void Ds18_delayus(uint x,uchar y) { uint i; uchar j; for(i=x;i>0;i--); for(j=y;j>0;j--); } void Ds18_delay(uint x) { uint a,b; for(a=x;a>0;a--) for(b=110;b>0;b--); } void Ds18_init() { T_DQ=0; DQ=0; } uchar Ds18_GetTem_char() { Ds18_init(); uchar tem1=0,tem2=0; uchar tem[4]; uchar *temper; Ds18_reset(); //复位 Ds18_write_byte(0xCC);//跳过ROM Ds18_write_byte(0x44);//温度转换 Ds18_reset(); Ds18_write_byte(0xCC); Ds18_write_byte(0xBE); tem1=Ds18_read_byte(); tem2=Ds18_read_byte(); tem1=tem1>>4; tem2=tem2<<4; tem1=tem1|tem2; return tem1; } uchar *Ds18_TemPart(uchar temp) { uchar tem2; uchar tem[4]; uchar temper; tem2=temp&0x7F; tem[0]=(temp&0x80)>>7; if(tem[0]==1) { tem2=128-tem2; } tem[1]=tem2/100; tem[2]=tem2%100/10; tem[3]=tem2%10; temper=tem; return temper; } |
|
|
|
求大神解答啊!!!!这个问题困扰我很久了
|
|
|
|
你先让1602对应显示数字的地方显示其他字符看看,再就是仿真只是设计的一小部分,有时候程序要修改,比如延时什么的
|
|
|
|
|
|
|
|
|
|
|
|
楼主最后怎么解决啊,我也是,求帮助啊
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12012 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 00:38 , Processed in 0.691357 second(s), Total 53, Slave 47 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号