高级会员
- 积分
- 762
- 金钱
- 762
- 注册时间
- 2021-5-18
- 在线时间
- 28 小时
|
这次的项目姑且算作旧瓶装新酒吧,以前做过STM32和DHT11的温度探测,这一次是较为低价版的C51和DS18B20温度探测。
DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。 个人感觉主要特点就是价格低,这对于很多精度要求不高的量产产品来说很重要。
这个设计实现了:温度探测功能。DS18B20模块采用排针和杜邦线与单片机连接。同时还设置了临界温度(温度上限),超过该温度使用蜂鸣器鸣响报警。临界温度可以采用两个按键调整。
proteus里有专门的一个DS18B20模块用来仿真,也可以按动上下箭头来模拟传感器输出的温度变化情况。模块上直接显示温度数据,比一些模拟传感器要好用一些。
在PCB设计里还是采用排针+杜邦线的形式,把传感器做成了一个外置模块(J1)。整体设计还是中规中矩,没有很大难度,亮点在于我这一次没使用通孔。
代码主要则集中在DS18B20传感器的处理方面,大致有六个函数来实现数据传输功能。
部分代码如下:
//主函数
void main()
{
int tp,ts;
int s=30;
unsigned char x,y;
while(1)
{
s=keyscan(s);
temp=ds18b20readtemp();
if(temp<0)
{
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
}
else
{
tp=temp;
temp=tp*0.0625*100+0.5;
}
digdisplay(temp);
ts=temp/100;
if(ts>s)
{
beep=0;
for(y=2;y>0;y--)
{
for(x=110;x>0;x--)
{
digdisplay(temp);
}
}
beep=1;
for(y=2;y>0;y--)
{
for(x=110;x>0;x--)
{
digdisplay(temp);
}
}
}
}
}
//按键函数
int keyscan(int t)
{
int m;
unsigned char x,y;
m=t;
if(high==0)
{
delayms(10);
if(high==0)
{
m=m+1;
display_h(m);
while(!high);
}
for(y=10;y>0;y--)
{
for(x=110;x>0;x--)
{
display_h(m);
}
}
return m;
}
if(low==0)
{
delayms(10);
if(low==0)
{
m=m-1;
display_l(m);
while(!low);
}
for(y=10;y>0;y--)
{
for(x=110;x>0;x--)
{
display_l(m);
}
}
return m;
}
return m;
}
//温度显示函数
void digdisplay(int temp)
{
int bai;
int shi;
int ge;
int yi;
unsigned char i;
unsigned int j;
bai=temp/10000;
shi=temp%10000/1000;
ge=temp%1000/100;
yi=temp%100/10;
for(i=0;i<5;i++)
{
weixuan=wxcode;
duanxuan=0xff;
if(i==0)
{
duanxuan=dxcode[bai];
}
if(i==1)
{
duanxuan=dxcode[shi];
}
if(i==2)
{
duanxuan=dxcode[ge]&0x7f;
}
if(i==3)
{
duanxuan=dxcode[yi];
}
j=10;
while(j--);
duanxuan=0xff;
}
}
//上调临界值显示函数
void display_h(int t)
{
int shi,ge;
unsigned char a;
unsigned int b;
shi=t/10;
ge=t%10;
for(a=0;a<5;a++)
{
weixuan=wxcode[a];
duanxuan=0xff;
if(a==0)
{
duanxuan=dxcode[10];
}
if(a==1)
{
duanxuan=dxcode[12];
}
if(a==2)
{
duanxuan=dxcode[shi];
}
if(a==3)
{
duanxuan=dxcode[ge];
}
b=10;
while(b--);
duanxuan=0xff;
}
}
原文链接:http://bj.dyrs.com.cn/story/202111/1165864
|
|