完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include ***it ds=P2^2; ***it dula=P2^6; ***it wela=P2^7; #define uchar unsigned char #define uint unsigned int unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint t) { for(t;t>0;t--) { _nop_();_nop_();_nop_();_nop_(); } _nop_(); _nop_(); } void init()//初始化 { bit x; ds=1; delay(1); ds=0; delay(32); ds=1; delay(4); x=ds; delay(32); // return x; } void ds_wbit(bit i)//写一位 { ds=0; _nop_(); _nop_();//总线拉低持续时间要大于1us ds=i; delay(3);//延时60us 等待取样 ds=1;//释放总线 } void ds_wbyte(uchar dat)//写一个字节 { uchar i; while(i++<8) { ds_wbit(dat&0x01); dat>>=1; } } bit ds_rbit()//读一位 { uchar ret; ds=0; _nop_();_nop_(); ds=1; _nop_(); _nop_(); _nop_(); _nop_(); ret=ds; delay(3); ds=1; return ret; } uchar ds_rbyte()//读一个字节 { uchar i,j,dat; for(i=0;i<8;i++) { j=ds_rbit(); dat=(j<<7)|(dat>>1); /*dat>>=1;//先读最低位 if(ds_rbit()) dat|=0x80;*/ } return dat; } void tempchange(void) //DS18B20 begin change { init(); delay(1); ds_wbyte(0xcc); // address all drivers on bus ds_wbyte(0x44); // initiates a single temperature conversion } uint get() { uchar a,b; uint t=0; float tt; /*ds_wbyte(0xcc);//跳过读序列号的操作 ds_wbyte(0x44);//启动温度转换*/ init();//复位 ds_wbyte(0xcc);//跳过读序列号操作 ds_wbyte(0xbe);//读取温度寄存器等(共可读九个寄存器)其中前两个就是温度 a=ds_rbyte();//获取温度低8位 b=ds_rbyte();//获取温度高8位 t=b; t<<=8; t=t|a;//两个8位的字节 组合为一个字 tt=t*0.0625;//温度转化 t=tt*10+0.5;//对结果进行4舍5入 return t; } void display(uint temp) { uint bai,shi,ge; uchar cnt; bai=temp/100; shi=temp%100/10; ge=temp%100%10; cnt++; switch(cnt) { case 1: P0=0xff; dula=1; P0=table[bai]; dula=0; wela=1; P0=0xfe; wela=0; break; case 3: P0=0xff; dula=1; P0=table[shi]; dula=0; wela=1; P0=0xfd; wela=0; break; case 5:P0=0xff; dula=1; P0=table[ge]; dula=0; wela=1; P0=0xfb; wela=0; break; case 7: cnt=0; break; default:break; } } void main() { //uint a; init(); do { tempchange(); delay(100); display(get()); }while(1); } |
|
相关推荐
4个回答
|
|
先用keil仿真一下波形,看看发送波形是否正确。
|
|
|
|
先用Keil仿真一下发送的波形,看看是否正确。
|
|
|
|
|
|
这个需要分开模块化处理就好了 你先坐显示部分 给个数看你的显示有没有问题 没问题的话 你在单独做个DS18B20的温度测试小程序 把温度给一个变量 看是否接受到了温度值 接受的是否正确!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11779 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 01:17 , Processed in 0.573661 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号