云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > CC2530控18B20,C++程序

CC2530控18B20,C++程序

  • 62 次阅读
  • 3 次下载
  • 2025/5/30 6:09:12

18B20测温度C++程序

#include #include \#include unsigned char xxaa[7];

uchar Error[]={\说明没有检测到DS18B20 uchar Temp3[]={\说明显示的是温度 #define DQ P2_3;

uchar time; //设置全局变量,专门用于严格延时 void mainreadtemp(void); uchar Init_DS18B20(void); uchar ReadOneChar(void);

uchar WriteOneChar(uchar dat); void display_error(void);

uchar Init_DS18B20(void) {

P2SEL=0xF0; P2DIR=0xFF ; uchar flag; P2_3=1;

delay_us(6); //略微延时约6 微秒 P2_3=0;

delay_us(600); //略微延时约600 微秒

//以向DS18B20 发出一持续480~960us 的低电平复位脉冲 P2_3=1; //释放数据线(将数据线拉高)

delay_us(30);//延时约30us(释放总线后需等待15~60us 让DS18B20 输出存在脉冲) flag=P2_3; //让单片机检测是否输出了存在脉冲(DQ=0 表示存在) delay_us(800);//延时足够长时间,等待存在脉冲输出完毕 return (flag); //返回检测成功标志1 }

uchar ReadOneChar(void) {

P2DIR=0xFF ; uchar i=0;

uchar dat=0; //储存读出的一个字节数据

for (i=0;i<8;i++) {

P2_3 =1; // 先将数据线拉高 //delay_us(1);

//asm(\等待一个机器周期

P2_3 = 0; //单片机从DS18B20 读书据时,将数据线从高拉低即启动读时序 dat>>=1;

//delay_us(3);

asm(\等待一个机器周期

P2_3 = 1; //将数据线\人为\拉高,为单片机检测DS18B20 的输出电平作准备 delay_us(6); //延时约6us,使主机在15us 内采样 if(P2_3==1)

dat|=0x80; //如果读到的数据是1,则将1 存入dat else

dat|=0x00;//如果读到的数据是0,则将0 存入dat

delay_us(3); //延时3us,两个读时序之间必须有大于1us 的恢复期 }

return(dat); //返回读出的十进制数据 }

uchar WriteOneChar(uchar dat) {

P2DIR=0xFF ; uchar i=0;

for (i=0; i<8; i++) {

P2_3 = 1; // 先将数据线拉高 asm(\等待一个机器周期 asm(\

P2_3= 0; //将数据线从高拉低时即启动写时序

P2_3= dat&0x01; //利用与运算取出要写的某位二进制数据, //并将其送到数据线上等待DS18B20 采样

delay_us(30);//延时约30us,DS18B20 在拉低后的约15~60us 期间从数据线上采样 P2_3=1; //释放数据线

delay_us(3);//延时3us,两个写时序间至少需要1us 的恢复期 dat>>=1; //将dat 中的各二进制位数据右移1位 }

delay_ms(1); //延时1ms 给硬件一点反应时间 return 0;//返回 }

/*******

void display_temp1(unsigned char x) {

uchar temp[6]={0,0,0,0,0}; temp[0]=x/100+'0'; temp[1]=x0/10+48;

temp[2]=x0+'0'; temp[3]='.';

//temp[4]=(10*x)0/10+'0'; temp[5]='\\0'; asm (\ uchar *pstr=temp;

Print8(2,1,\

Print8(2,2,pstr);//将百位数字的字符常量写入LCD Print8(3,2,pstr); //将十位数字的字符常量写入LCD Print8(4,2,pstr);//将个位数字的字符常量写入LCD delay_ms(1); //延时1ms 给硬件一点反应时间 }

**********/

//函数功能:显示温度的小数数部分入口参数:x

void ReadyReadTemp(void) {

P2DIR=0xFF ;

Init_DS18B20(); //将DS18B20 初始化

WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换

delay_ms(100);

Init_DS18B20(); //将DS18B20 初始化

WriteOneChar(0xCC); // 跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位 delay_ms(100); }

void DisplayConvert(unsigned int Data) {

xxaa[0]=Data/10000+48; Data%=10000;

xxaa[1]=Data/1000+'0';//'0'等同48 Data%=1000;

xxaa[2]=Data/100+48; Data%=100; xxaa[3]='.';

xxaa[4]=Data/10+48; Data%=10;

xxaa[5]=Data+48;

xxaa[6]=0; }

void main(void) {

unsigned int mmm; unsigned int kkk; P0DIR = 0XFF; P1DIR = 0x13; P2DIR=0xFF ; ResetLCD(); initLCDM();

delay_ms(5); //延时5ms 给硬件一点反应时间 ClearRAM();

if(Init_DS18B20)

Print8(0,3,\ Print8(0,4,\

for(;;) //不断检测并显示温度, 等同while(1) {

ReadyReadTemp(); //读温度准备

kkk=ReadOneChar(); //先读的是温度值低位

kkk+=ReadOneChar()<<8; //接着读的是温度值高位 mmm=kkk*6.25;

DisplayConvert(mmm); Print8(0,1,temperature(C)); Print8(0,3,\ Print8(16,3,xxaa); P2_3=1;

delay_ms(10); } }

/*******************************************************

void main() { uchar temp[6]={0,0,0,0,0}; uchar a,b=0; uchar c=0; a=0x0A; b=0x0e; c=a+b;

搜索更多关于: CC2530控18B20,C++程序 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

18B20测温度C++程序 #include #include \#include unsigned char xxaa[7]; uchar Error[]={\说明没有检测到DS18B20 uchar Temp3[]={\说明显示的是温度 #define DQ P2_3; uchar time; //设置全局变量,专门用于严格延时 void mainreadtemp(void); uchar Init_DS18B20(void); uchar ReadOneChar(void); uchar WriteOneChar(uchar dat); void display_error(void); uchar Init_DS18B20(void) {

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com