历史上的今天
今天是:2025年04月22日(星期二)
2020年04月22日 | 51单片机实验13:温度传感器模块应用
2020-04-22 来源:eefocus
开发板温度模块电路图如下:

目的:利用开发板温度传感器测量温度,并在数码管显示。
开发板温度传感器模块相关内容:https://blog.csdn.net/cax1165/article/details/86763991
开发板数码管模块的相关内容:https://blog.csdn.net/cax1165/article/details/86557551
主函数:
#include #include #define uc unsigned char #define ui unsigned int sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; uc code x[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uc disp[8]; void delay(uc x) { uc i,j; for(i=1;i<=x;i++) for(j=1;j<=110;j++); } void digdisplay() { uc i; for(i=1;i<=6;i++) { switch(i) { case(1): LSA=0;LSB=0;LSC=0;break; case(2): LSA=1;LSB=0;LSC=0;break; case(3): LSA=0;LSB=1;LSC=0;break; case(4): LSA=1;LSB=1;LSC=0;break; case(5): LSA=0;LSB=0;LSC=1;break; case(6): LSA=1;LSB=0;LSC=1;break; } P0=disp[i]; delay(1); P0=0x00; } } void datapros(int temp) { float tp; if(temp<0) { disp[6]=0x40; temp=temp-1; temp=~temp; tp=temp; temp=tp*0.0625*100+0.5;//*100将两位小数加入整数中方便后期处理,+0.5是四舍五入进位处理 } else { disp[6]=0x00; tp=temp; temp=tp*0.0625*100+0.5; } disp[5]=x[temp/10000]; disp[4]=x[temp%10000/1000]; disp[3]=x[temp%1000/100]|0x80; disp[2]=x[temp%100/10]; disp[1]=x[temp%10]; } void main() { while(1) { datapros(ds18b20readtemp()); digdisplay(); } } DS18B20温度传感器配置: #include void delay1ms(ui x) { ui i,j; for(i=1;i<=x;i++) for(j=1;j<=110;j++); } uc ds18b20init() { uc a,b; dsport=0; for(b=71;b>0;b--)//延时500微秒 for(a=2;a>0;a--); dsport=1; while(dsport) { delay1ms(5);//延时5微秒 return 0; } return 1; } void ds18b20writebyte(uc dat) { uc i,j; for(i=1;i<=8;i++) { dsport=0; j++;//?? dsport=dat&0x01; for(j=31;j>0;j--);//延时65微秒 dsport=1; dat>>=1; } } uc ds18b20readbyte() { uc i,j,dat,byte=0; for(i=1;i<=8;i++) { dsport=0; j++; dsport=1; j++;j++;//延时6微秒 dat=dsport; byte=(byte>>1)|(dat<<7); j=4;while(j--);//延时48微秒 } return byte; } void ds18b20changtemp() { ds18b20init(); delay1ms(1); ds18b20writebyte(0xcc); ds18b20writebyte(0x44); } void ds18b20readtempcom() { ds18b20init(); delay1ms(1); ds18b20writebyte(0xcc); ds18b20writebyte(0xbe); } int ds18b20readtemp() { int temp=0; uc tmh,tml; ds18b20changtemp(); ds18b20readtempcom(); tml=ds18b20readbyte(); tmh=ds18b20readbyte(); temp=tmh; temp<<=8; temp|=tml; return temp; } 温度传感器头文件: #ifndef _temp_H #define _temp_H #include #ifndef uc #define uc unsigned char #endif #ifndef ui #define ui unsigned int #endif sbit dsport=P3^7; int ds18b20readtemp(); #endif
史海拾趣
|
当USB设备端捕捉到主机端的URB接收请求,是否一定要回应一段数据? 问题是这样的,主机端想阻塞接收USB的数据,USB的固件的这样处理响应的: 有数据,发出数据及长度;无数据,发空数据及长度0. 这样就导致主机端接收函数根本没有阻塞点,固件改成没数据就不发送长度0,结果有数据的时候也不响应了. 是协议强制 ...… 查看全部问答> |
|
用的是2440的CPU,WINCE5.0的系统.在没接USB鼠标之前系统都没有出现过死机,但是最近接上USB鼠标后,操作没几分钟就死机了,有时要操作20多分钟之后才死机,有时刚接上就死机了,最郁闷的事,死机了调试串口都没输出出错信息,都不知道从哪里开始找.请问该 ...… 查看全部问答> |
|
WZCQueryInterface和WZCQueryInterfaceEx的区别是什么? WZCSetInterface和WZCSetInterfaceEx的区别是什么? 我的系统是WINCE5.0,君正MIPSII,为什么WZCQueryInterfaceEx和WZCSetInterfaceEx有时会报异常? 还有有时连上某个热点后,就搜索不到新 ...… 查看全部问答> |
|
知道Framework编写的代码执行效率低一点,不知道会不会有很明显的差别? 如果系统是用EVC编写的,还能不能嵌套进入Framework来编程?… 查看全部问答> |




