(此文档为word格式,下载后您可任意编辑修改!)
基于单片机的温度数据采集系统实验报
告
班 级:姓 名:田波平学 号:指导老师:仲老师
1 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; }
void write_add(uchar address,uchar date)写入外存储器中 {
start();
write_byte(0xa0); respons();
write_byte(address);
2 respons();
write_byte(date); respons(); stop(); }
uchar read_add(uchar address)从外存储器中读出数据 {
uchar date; start();
write_byte(0xa0); respons();
write_byte(address); respons(); start();
write_byte(0xa1); respons();
date=read_byte(); stop();
return date; }
3.AD转换器设计
ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道AD转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832可是使我们了解AD
转换器的原理,有助于我们单片机技术水平的提高。 ADC0832具有以下特点: ● 8位分辨率;
● 双通道AD转换;
● 输入输出电平与TTLCMOS相兼容; ● 5V电源供电时输入电压在0~5V之间; ● 工作频率为250KHZ,转换时间为32μS; ● 一般功耗仅为15mW; ● 8P、14P—DIP(双列直插)、PICC多种封装; ● 商用级芯片温宽为0°C to +70°C,工业级芯片温宽为40℃ to +85℃。 引脚图
3
引脚功能如下:
ADC0832为8位分辨率AD转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI数据输入端,可以轻易的实现通道功能的选择。 功能时序图
4
当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+进行输入。 在完成输入启动位、通道选择之后,就可以开始读出数据,转换得到的数据会被送出二次,一次高位在前传送,一次低位在前传送,连续送出。在程序读取二个数据后,我们可以加上检验来看看数据是否被正确读取。 下面
程序如下:
unsigned char GetValue0832(bit Channel)AD转换后的数据 { unsigned char i,data1=0,data2=0; clk=0; d0=1; di=1; cs=0;cs=0时ADC0832有效 clk=1; delay();
5