基于某单片机的多点温度采集与记录簿系统文档格式.docx
- 文档编号:19455989
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:21
- 大小:225.61KB
基于某单片机的多点温度采集与记录簿系统文档格式.docx
《基于某单片机的多点温度采集与记录簿系统文档格式.docx》由会员分享,可在线阅读,更多相关《基于某单片机的多点温度采集与记录簿系统文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
图1.2温度传感器DS18B20时序图
2.1.3温度显示模块功能
温度显示模块的主要功能是在控制模块的控制下将控制模块写入的数据显示在液晶屏上,便于读取温度数值。
显示模块采用LCD1602液晶屏。
1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:
RS(数据命令选择端),R/W(读写选择端),E(使能信号);
以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。
以下具体阐述这三个管脚:
RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。
R/W为读写选择,高电平进行读操作,低电平进行写操作。
E端为使能端,后面和时序联系在一起。
除此外,D0~D7分别为8位双向数据线。
其操作时序如下图所示:
图1.3LCD1602时序图
2.1.4温读报警模块
温度报警模块主要由2个led灯组成,当温度的采集值高于设定的温度上限或者低于设定的温度下限时,led灯将由暗变亮进行报警,此时此时设计者就可以改变室外的温度满足温度的需求,此报警简单易懂,可操作性强。
2、硬件电路仿真
根据设计的总方案在pretues中仿真,其结果如图所示;
图1.4硬件电路仿真
当温度超过高于设定的温度上限(此处设定38℃)或者低于下限(此处设定12℃)时,led灯发生报警。
其仿真图如下所示:
图1.3温度报警显示
3、软件设计
软件设计包括下位机编程和PC机编程,下位机编程完成ds18b20的温度采集、数据处理、数码管显示,串口中断处理及硬件初始化,通信协议的制定及数据的收发。
通过串口通信将温度数据在上位机上面显示,并且编译VB程序,实现报警显示。
上位机程序工程:
图3.1上位机工程显示
当温度1是35℃,温度计2是13℃时:
当温度1是39℃,温度计2是11℃时:
4、总结
通过这次课程学习制作,令我学到了很多东西受益匪浅,仿佛又经历了一次系统学习,在作做课程前,我的导师也要求我做一些温度采集的设计,我一直在查找相关资料,这次的设计让我对多点温度采集的知识了解了许多,同时也上位机编程有了初步的概念。
一直来认为做这些设计没什么困难,但在实际运作过程中才清楚地认识到自己的不足和短练,端正了学习态度。
这次设计使我加深巩固了基础知识,更加深刻的把握到基础知识的重要,提高了动手和实际解决问题的能力,提高了对问题整体规划的意识。
能把握重点设计的核心,并提高查阅资料的能力,培养了团队合作精神和人际交往能力。
由于本人水平有限,难免有考虑不足之处,所以恳请老师同学们批评指正。
5、参考文献
[1]谭浩强《C程序设计》,清华大学
[2]童诗白《模拟电子技术基础(第四版)》,高等教育
[3]恢先、黄辉先《单片机原理及应用》,人民邮电
[4]何立民《单片机高级教程--应用于设计(第二版)》,航空航天大学
[5]蔡《单片机控制实习与专题制作》,航空航天大学
[6]蒋伏加、林峰《VisualBasic程序设计教程(第4版)》,邮电大学
6、程序附录
单片机c语言代码:
#include<
reg52.h>
stdio.h>
//标准输入输出
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint;
#defineulongunsignedlong;
/******************************************************************/
/*定义端口*/
#defineDataP0//数据端口
sbitRS=P2^4;
//Pin4
sbitRW=P2^5;
//Pin5
sbitE=P2^6;
//Pin6
sbitDQ=P1^3;
//ds18b20端口
sbitDQ1=P1^4;
//ds18b20端口改动
sbitD0=P1^6;
sbitD1=P1^5;
/*全局变量*/
uinttemp=0,temp1=0;
floatt0,t1;
floathigh=38,low=12,change=0;
unsignedcharpoint_flag=0,key_flag=0;
unsignedcharreceive[5];
unsignedcharreceive_no=0;
unsignedcharreceive_flag=0;
charText[]="
"
;
ucharcodeTPoint[16]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
/*函数声明*/
/*微秒延时函数*/
voidDelayUs(unsignedcharus)//delayus
{
unsignedcharuscnt;
uscnt=us>
>
1;
/*12MHz频率*/
while(--uscnt);
}
/*毫秒函数声明*/
voidDelayMs(unsignedcharms)
while(--ms)
{
DelayUs(250);
}
/*1602写入命令函数*/
voidWriteCommand(unsignedcharc)
DelayMs(5);
//操作前短暂延时,保证信号稳定
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
/*1602写入数据函数*/
voidWriteData(unsignedcharc)
//操作前短暂延时,保证信号稳定
RS=1;
/*1602写入字节函数*/
voidShowChar(unsignedcharpos,unsignedcharc)
unsignedcharp;
if(pos>
=0x10)
p=pos+0xb0;
//是第二行则命令代码高4位为0xc
else
p=pos+0x80;
//是第二行则命令代码高4位为0x8
WriteCommand(p);
//写命令
WriteData(c);
//写数据
/*1602写入字符串函数*/
voidShowString(unsignedcharline,char*ptr)
unsignedcharl,i;
l=line<
<
4;
for(i=0;
i<
16;
i++)
ShowChar(l++,*(ptr+i));
//循环显示16个字符
/*1602初始化函数*/
voidInitLcd()
DelayMs(15);
WriteCommand(0x38);
//displaymode
WriteCommand(0x06);
//显示光标移动位置
WriteCommand(0x0c);
//显示开及光标设置
WriteCommand(0x01);
//显示清屏
/*18b20延时函数*/
voiddelay(unsignedinti)//延时函数
while(i--);
/*18b20初始化*/
voidInit_DS18B20(void)
unsignedcharx=0;
DQ=1;
//DQ复位
delay(8);
//稍做延时
DQ=0;
//单片机将DQ拉低
delay(80);
//精确延时大于480us
//拉高总线
delay(10);
x=DQ;
//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(5);
voidInit_DS18B201(void)
DQ1=1;
DQ1=0;
//单片机将DQ1拉低
x=DQ1;
/*18b20读一个字节*/
unsignedcharReadOneChar(void)
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
//给脉冲信号
dat>
=1;
if(DQ)
dat|=0x80;
return(dat);
unsignedcharReadOneChar1(void)
if(DQ1)
/*18b20写一个字节*/
voidWriteOneChar(unsignedchardat)
unsignedchari=0;
for(i=8;
i>
i--)
DQ=dat&
0x01;
delay(5);
voidWriteOneChar1(unsignedchardat)
DQ1=0;
DQ1=dat&
delay(5);
DQ1=1;
dat>
/*18b20读取温度*/
unsignedintReadTemperature(void)
unsignedchara=0;
unsignedintb=0;
unsignedintt=0;
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
delay(200);
//跳过读序号列号的操作
WriteOneChar(0xBE);
//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();
//低位
b=ReadOneChar();
//高位
b<
=8;
t=a+b;
return(t);
unsignedintReadTemperature1(void)
Init_DS18B201();
WriteOneChar1(0xCC);
WriteOneChar1(0x44);
WriteOneChar1(0xBE);
a=ReadOneChar1();
b=ReadOneChar1();
voidUartInit(void)//4800bps11.0592MHz
{
SCON=0x50;
TMOD|=0x20;
TL1=0xFD;
TH1=0xFD;
TR1=1;
ES=1;
EA=1;
/*主函数*/
main()
unsignedintTempL,TempH,TempL1,TempH1;
//state,i,j,k;
floatwendu;
InitLcd();
//初始化LCD
//延时保证信号稳定
UartInit();
EX0=1;
IT0=1;
while
(1)
{
temp=ReadTemperature();
temp1=ReadTemperature1();
t0=temp*0.0625;
t1=temp1*0.0625;
TempH=temp>
TempL=TPoint[temp&
0x0F];
TempH1=temp1>
TempL1=TPoint[temp1&
if(t0<
low||t0>
high)
{
D0=0;
}
else
D0=1;
if(t1<
low||t1>
D1=0;
D1=1;
SBUF=0xff;
//校验
while(!
TI);
TI=0;
SBUF=TempH;
SBUF=TempL;
SBUF=TempH1;
SBUF=TempL1;
SBUF=(int)wendu;
SBUF=(int)(wendu*10)%10;
SBUF=(int)high;
SBUF=(int)(high*10)%10;
SBUF=(int)low;
SBUF=(int)(low*10)%10;
ShowString(0,Text);
if(key_flag==0)
sprintf(Text,"
%d.%d%cC,%d.%d%cC"
TempH,TempL,0xdf,TempH1,TempL1,0xdf);
//打印输出第二行信息
else
U:
%d.%d%%,D:
%d.%d%%"
(int)high,(int)(high*10)%10,(int)low,(int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 多点 温度 采集 记录簿 系统