基于单片机的温度数据采集系统实验报告毕业论文.docx
《基于单片机的温度数据采集系统实验报告毕业论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度数据采集系统实验报告毕业论文.docx(13页珍藏版)》请在冰豆网上搜索。
基于单片机的温度数据采集系统实验报告毕业论文
(此文档为word格式,下载后您可任意编辑修改!
)
基于单片机的温度数据采集系统实验报告
班级:
电技10—1班
姓名:
田波平
学号:
指导老师:
仲老师
题目:
基于单片机的温度数据采集系统
一.设计要求
1.被测量温度范围:
0~120℃,温度分辨率为0.5℃。
2.被测温度点:
2个,每5秒测量一次。
3.显示器要求:
通道号2位,温度4位(精度到小数点后一位)。
显示方式为定点显示和轮流显示。
4.键盘要求:
(1)定点显示设定;
(2)轮流显示设定;(3)其他功能键。
二.设计内容
1.单片机及电源模块设计
单片机可选用AT89S51及其兼容系列,电源模块可以选用7805等稳压组件,本机输入电压范围9-12v。
2.存储器设计
扩展串行I2C存储器AT24C02。
要求:
AT24C02的SCK接P3.2
AT24C02的SDA接P3.4
2.传感器及信号转换电路
温度传感器可以选用PTC热敏电阻,信号转换电路将PTC输出阻值转换为0-5V。
3.AD转换器设计
AD选用ADC0832。
要求:
ADC0832的CS端接P3.5
ADC0832的DI端接P3.6
ADC0832的DO端接P3.7
ADC0832的CLK端接P2.1
4.显示器设计。
6位共阳极LED显示器,段选(a-k;
}
voidwrite_add(ucharaddress,uchardate)写入外存储器中
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
ucharread_add(ucharaddress)从外存储器中读出数据
{
uchardate;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
returndate;
}
3.AD转换器设计
ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道AD转换芯片。
由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。
学习并使用ADC0832可是使我们了解AD转换器的原理,有助于我们单片机技术水平的提高。
ADC0832具有以下特点:
●8位分辨率;
●双通道AD转换;
●输入输出电平与TTLCMOS相兼容;
●5V电源供电时输入电压在0~5V之间;
●工作频率为250KHZ,转换时间为32μS;
●一般功耗仅为15mW;
●8P、14P—DIP(双列直插)、PICC多种封装;
●商用级芯片温宽为0°Cto+70°C,工业级芯片温宽为40℃to+85℃。
引脚图
引脚功能如下:
ADC0832为8位分辨率AD转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。
通过DI数据输入端,可以轻易的实现通道功能的选择。
功能时序图
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DODI的电平可任意。
当要进行AD转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DODI端则使用DI端输入通道功能选择的数据信号。
在第1个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。
在第2、3个脉冲下沉之前DI端应输入2位数据(SGL、Odd)用于选择通道功能,当此2位数据为“1”、“0”时,只对CH0进行单通道转换。
当2位数据为“1”、“1”时,只对CH1进行单通道转换。
当2位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。
当2位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1作为正输入端IN+进行输入。
在完成输入启动位、通道选择之后,就可以开始读出数据,转换得到的数据会被送出二次,一次高位在前传送,一次低位在前传送,连续送出。
在程序读取二个数据后,我们可以加上检验来看看数据是否被正确读取。
下面
程序如下:
unsignedcharGetValue0832(bitChannel)AD转换后的数据
{
unsignedchari,data1=0,data2=0;
clk=0;
d0=1;
di=1;
cs=0;cs=0时ADC0832有效
clk=1;
delay();
clk=0;第一个脉冲,开始位
d0=1;
di=1;
clk=1;
delay();
clk=0;第二个脉冲,模式选择
di=Channel;
d0=channel;通道选择
clk=1;
delay();
clk=0;第三个脉冲,通道选择
d0=1;
di=1;
for(i=0;i<8;i++)第一次读数从高到低,时钟下降沿有效
{
clk=1;
clk=0;
if(d0==1&&di==1)
data1|=0x80>>i;
}
for(i=0;i<8;i++)第二次从低到高读数,下降沿有效
{
if(d0==1&&di==1)
data2|=0x01<
clk=1;
delay();
clk=0;
}
cs=1;
d0=1;
di=1;
clk=1;
if(data1==data2)
return(data1);
}
5.键盘电路设计
6个按键,P2.2-P2.7接6个按键,P3.4接公共端,采用动态扫描方式检测键盘。
6.
uintkeyscan()
{
uchartemp;
P33=0;
temp=P2&0xf0;
if(temp!
=0xf0)
{
Delayms(10);
temp=P2&0xf0;
if(temp!
=0xf0)
{
switch(temp)
{
case0x70:
return1;break;
case0xb0:
return2;break;
case0xd0:
return3;break;
case0xe0:
return4;break;
}
}
}
}
显示模块采用6个共阳极数码管,采用动态扫描的方式进行显示。
电路图如下:
图6:
显示模块
voidDisplay(void)显示温度的函数
{
P27=0;选中第一个位选
P0=LED[ucADC2100];;显示
Delayms
(1);
delay1(200);
P27=1;
P26=0;选中第一个位选
P0=LED[ucADC2%10010];显示
Delayms
(1);
delay1(200);
P26=1;
P25=0;选中第一个位选
P0=(LED[ucADC2%10]-0x80);显示
Delayms
(1);
delay1(200);
P25=1;
P24=0;选中第一个位选
P0=LED[ucADC2*10%10];显示
Delayms
(1);
delay1(200);
P24=1;
}
voiddisplay2(uchara,ucharb)显示通道的函数
{
P23=0;
P0=LED[a];
Delayms(5);
delay1(200);
P23=1;
P22=0;
P0=LED[b];
Delayms(5);
delay1(200);
P22=1;
}
6.软件设计
其他应用到的程序:
voidmain(void)
{
uintnum;
write=0;
flag=0;
channel=0;
init();
ucADC=read_add
(2);
TMOD=0x01;
ET0=1;
EA=1;
TH0=()256;
TL0=()%256;
TR0=1;
while
(1)
{
num=keyscan();
switch(num)
{
case1:
channel=0;break;
case2:
channel=1;break;
case3:
flag=1;break;
case4:
flag=0;break;
}
ucADC=GetValue0832(channel);
Display();display2(channel,1);
if(write==1)
{
write=0;
write_add(2,ucADC);
}
}
}
voidt0()interrupt1定时器0
{
TH0=()256;
TL0=()%256;
tcnt++;
if(tcnt==100)
{
tcnt=0;
write=1;
if(flag==1)
channel=~channel;
}
}
三.项目心得
系统基本实现了设计要求,通过这次课程设计,使我更加熟练的掌握了AT89C52、AT24C02、ADC0832等芯片的使用,熟悉了领用C51语言编写程序控制单片机。
4.参考文献
1、李全利,单片机原理及接口技术,高等教育出版社,2004
2、于永,51单片机常用模块与综合系统设计实例精讲,电子工业出版社,2007