于基单片机的双路信号检测系统综合设计 本科毕业设计.docx

上传人:b****4 文档编号:11715039 上传时间:2023-03-31 格式:DOCX 页数:43 大小:767.63KB
下载 相关 举报
于基单片机的双路信号检测系统综合设计 本科毕业设计.docx_第1页
第1页 / 共43页
于基单片机的双路信号检测系统综合设计 本科毕业设计.docx_第2页
第2页 / 共43页
于基单片机的双路信号检测系统综合设计 本科毕业设计.docx_第3页
第3页 / 共43页
于基单片机的双路信号检测系统综合设计 本科毕业设计.docx_第4页
第4页 / 共43页
于基单片机的双路信号检测系统综合设计 本科毕业设计.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

于基单片机的双路信号检测系统综合设计 本科毕业设计.docx

《于基单片机的双路信号检测系统综合设计 本科毕业设计.docx》由会员分享,可在线阅读,更多相关《于基单片机的双路信号检测系统综合设计 本科毕业设计.docx(43页珍藏版)》请在冰豆网上搜索。

于基单片机的双路信号检测系统综合设计 本科毕业设计.docx

于基单片机的双路信号检测系统综合设计本科毕业设计

基于单片机的双路信号检测系统综合设计

基于单片机的双路信号检测系统综合设计-1-

一.设计任务概述-1-

二.硬件电路设计-2-

(1)系统组成框图-2-

(2)单元电路分析-2-

微控制器AT89C51-2-

数字温度计LM75A-4-

数字电压表TLC549-5-

LED数码显示器-6-

键盘-8-

(2)完整系统原理图-8-

三.程序设计-10-

(1)模块化程序设计的思路-10-

(2)总的程序流程框图-10-

(3)各部分程序设计介绍-11-

温度检测-11-

电压检测-11-

按键检测-11-

显示部分-12-

主程序部分-12-

四.系统调试-12-

(1)硬件调试-12-

(2)软件调试-14-

五.附录-14-

(1)主程序-14-

(2)数码管扫描显示驱动程序-17-

(3)8位A/D转换结果对应的电压数据表,可直接用于显示(由于程序单一,已经略过)-18-

(4)标准80C51单片机模拟I2C总线的主机程序头文件-18-

(5)标准80C51单片机模拟I2C总线的主机程序-19-

 

1.设计任务概述

●设计一个能同时对环境温度和0V~2.5V直流电压进行检测的系统

●电压的检测采用TLC549串行ADC器件;

●对温度的检测采用LM75A数字温度传感器;

●检测结果以动态扫描方式显示在一个8位LED数码显示器上(可以同时显示,也可以轮流显示);

●结合Quick51核心板和SmartSOPC教学实验开发平台的有关实验电路完成系统原理图设计与程序设计;程序的调试在实验箱上完成。

●加入键盘的应用:

程序运行后,LED显示器显示“P”,表示处于“待命”状态,按下“1”键——进行电压测量并显示;按下“2”键——进行温度测量并显示;按下“3”键——电压与温度交替测量并显示;按下“8”键——返回“待命”状态

2.硬件电路设计

(1)系统组成框图

 

 

 

 

 

 

(2)单元电路分析

●微控制器AT89C51

Ø作用及优点

微控制器是整个程序的“大脑”,尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:

CPU、内存、内部和外部总线。

系统通过把编写的程序拷入为控制器中,实现对于对于其他部分的控制。

在本实验中,微控制器读取按键信息,确定应该哪一个功能能够板块工作,如按下2键,微控制器则通知温度测试板块工作,并且把测试的值显示在数码管上。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

Ø图形

Ø引脚说明

VCC:

供电电压。

GND:

接地。

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

●数字温度计LM75A

Ø作用

LM75A是一个使用了内置带隙温度传感器和Σ-△模数转换技术的温度-数字转换器。

它也是一个温度检测器,可提供一个过热检测输出。

Ø组成

LM75A包含许多数据寄存器:

配置寄存器(Conf),用来存储器件的

某些配置,如器件的工作模式、OS工作模式、OS极性和OS故障队列等(在功能描述一节中有详细描述);温度寄存器(Temp),用来存储读取的数字温度;设定点寄存器(Tos&Thyst),用来存储可编程的过热关断和滞后限制,器件通过2线的串行I2C总线接口与控制器通信。

LM75A还包含一个开漏输出(OS),当温度超过编程限制的值时该输出有效。

LM75A有3个可选的逻辑地址管脚,使得同一总线上可同时连接8个器件而不发生地址冲突。

Ø电路原理图

Ø功能框图

 

Ø工作原理

LM75A利用内置的分辨率为0.125℃的带隙传感器来测量器件的温度,并将模数转换得到的11位的二进制数的补码数据存放到器件Temp寄存器中。

Temp寄存器的数据可随时被I2C总线上的控制器读出。

读温度数据并不会影响在读操作过程中执行的转换操作。

●数字电压表TLC549

Ø作用

TLC549是单通道8位通用串行接口,主要是将把检测出来的模拟信号转换为数字信号,通过数码显示管显示出来。

Ø主要特性

8位分辨率A/D转换器

转换时间小于17微秒

内置的软件控制的采样-保持功能

宽的工作电压范围:

3~6V

串行操作接口

Ø电路原理图

Ø工作原理

把模拟电路转换为数字信号显示出来。

●LED数码显示器

Ø作用

七段式LED数码管是常见的电子设备显示器件,能够显示数字0~9以及部分字母和符号。

实际上的数码管常常会附加一个小数点,作为第八段。

Ø工作原理

数码管分为静态和动态两大类,每一类又有共阳和共阴之分。

静态数码管的特点是驱动方法简单、亮度高,但是连线比较多。

动态数码管常常以多位联体的形式提供,连线较少,但是要用动态扫描的方法驱动。

为了获得足够的亮度,限流电阻取值常常比较小。

多位联体的动态com是分开的。

扫描方法并不难,先把第1个数码管的显示数据送到abcde通com1,而其它数码管的数码管的显示数据送到延时一段时间,再显会看到明显的闪烁。

数码管段选信号abcdefg和dp(相当于数据线)是共用的,而位选信号fg和dp,同时选com信号禁止;延时一段时间(通常不超过10ms),再把第2个abcdefg和dp,同时选通com2,而其它数码管的comd信号禁止;示下一个。

注意,扫描整个数码管的频率应当保证在50Hz以上,否则会看到明显的闪烁。

Ø电路原理图

 

●键盘

Ø作用

起一个控制作用,通过按键的信息控制温度显示和压力显示。

Ø电路原理图

Ø工作原理

机械按键在按下和弹起时,都会产生“抖动”,这是一列短暂而不规则的脉冲。

在程序上,如果不做任何消抖动的处理,则会出现“按一次键,显示数据跳好几次”的现象。

在本实验的例程中,采用“带延时的双循环”检测法,有效地消除了按键抖动,从而确保按一次键马上就能执行并且仅执行一次动作。

在第1个循环里,每隔50ms检测一次按键,如果有键按下则立即退出循环。

后续程序会马上处理这个按键,并不需要额外的延时等待。

处理完按键动作后,进入第2个循环,该循环也是每隔50ms检测一次按键,一直等到刚才按下的键抬起后才会退出循环。

然后继续第1个循环。

(2)完整系统原理图

3.程序设计

(1)模块化程序设计的思路

本程序分为3个模块:

●主程序:

包括了延时函数,系统初始化函数,读出LM75A的温度值函数,字节型变量c转换为十进制字符串函数,温度显示函数,读取A/D转换结果函数,初始化ADC接口函数,ADC转换为电压值的函数,键盘扫描函数,主函数(会在后面详细介绍主函数的流程)。

温度和电压的检测函数都已经包括在主程序里面

●数码管扫描显示驱动程序:

包括了定时器T1的中断服务函数,清除数码管的所有显示函数,在数码管上显示字符函数,在数码管上显示字符串函数,显示指定位的小数点函数,数码管扫描显示初始化。

●标准80C51单片机模拟I2C总线的主机程序头文件:

这是有实验箱的厂家提供的程序

●8位A/D转换结果对应的电压数据表:

可直接用于显示电压值

注意:

以上程序中主程序为核心程序,其他程序是为了支撑主程序的功能而存在的。

(2)总的程序流程框图

 

LED显示器显示“P”

0键

系统初始化

 

1键

电压测量并显示

 

温度测量并显示

2键

检测按键信息

 

电压与温度交替测量并显示

3键

 

8键

LED显示器显示“P”

 

(3)各部分程序设计介绍

●温度检测

Ø流程图

读出LM75A的温度值

整数部分转换为字符串

分离符号,整数和小数部分

显示符号,整数和小数部分

清除所有显示

 

Ø所用函数的功能

LM75A_GetTemp()------读出LM75A的温度值并返回LM75A温度寄存器的数值(乘以0.125可得到摄氏度值)

ByteToStr()----------字节型变量c转换为十进制字符串

DispTemp()-----------在数码管上显示出温度值

I2C_Gets()---------主机通过I2C总线从从机接收多个字节的数据

Ø较特殊的处理方法

✓I2C起始和停止条件

其中一种情况是在SCL线是高电平时SDA线从高电平向低电平切换这个情况表示起始条件。

当SCL是高电平时SDA线由低电平向高电平切换表示停止条件。

✓LM75A_GetTemp函数中,0x00是温度寄存器。

函数首先将buf[0]给t,再将t左移8位,于是t的低8位为空,最后加上buf[1],结果为t的高8位为buf[0],低8为buf[1],通过右移5位去掉无关位,最后返回温度寄存器的数值。

●电压检测

Ø流程图

初始化ADC接口

读取A/D转换结果

将ADC值转换成电压值,并显示

 

Ø所用函数的功能

ReadAdc()------读取A/D转换结果

AdcInit()------初始化ADC接口

Delay_acd()----延时(t*10)ms

DispVol()-------将ADC值转换成电压值,并显示

Ø较特殊的处理方法

✓电压的显示的核心就是把模拟信号转化为数字信号

●按键检测

Ø流程图

读取按键值

通过函数的定义找到按键值所对应的key值

 

Ø所用函数的功能

KeyScan()-----找到按键值所对应的key值

●显示部分

Ø所用函数的功能

T1INTSVC()-----定时器T1的中断服务函数

DispClear()----清除数码管的所有显示

DispChar()-----在数码管上显示字符

DispStr()------在数码管上显示字符串

DispDotOn()----显示指定位的小数点

DispInit()-----数码管扫描显示初始化

Ø较特殊的处理方法

✓就是往DispBuf()里面的相应位置写入数据

●主程序部分

Ø流程图

与“总的系统流程图类似”,这里就不再画出,请见第7页

Ø较特殊的处理方法

✓就是通过一个循环,不断检测按键值,并且通过key的值实现不同的操作

✓在温度和电压交替显示时,我们使用了变量counter,以此将延时的时间变长,当counter在0-3时显示温度,当counter在3-12时显示电压。

4.系统调试

(1)硬件调试

●SmartSOPC实验箱

SmartSOPC多功能教学实验开发平台集众多种功能于一体,是SOPC、EDA、DSP、

ARM、ARM7SOC以及51教学实验、科研开发的最佳选择。

开发平台采用核心板加主板的结构,更换核心板即可实现不同的功能。

SmartSOPC多功能教学实验开发平台标配一台LA1024高性能逻辑分析仪。

LA1024分析仪是集逻辑分析仪、总线分析仪、逻辑笔等多种测量开发仪器于一身,是嵌入式系统开发利器、数字电路设计好帮手。

基于标配QuickSOPC核心板的开发平台可进行SOPC、EDA、DSP的开发和实验。

与一般的实验箱不同,SmartSOPC主板上大部分外设都不需要进行跳线设置,做实验时方便简单;此外每个外设的信号都设置了测试点,方面用户使用逻辑分析仪进行信号测量。

一切为设计为用户考虑是本开发平台的出发点。

考虑到核心板对用户的实用性,各核心板(Quick51除外)除设计最小系统外,还设计有按键、LED以及电源插座等。

用户通过在用户扩展PACK上实现自己的功能电路(如主板上的某部分电路),核心板就能脱离主板而单独使用,这样核心板可用于用户自己的设计中,亦可用于电子设计大赛。

●Quick51核心板

Quick51核心板是与SmartSOPC相配套的8051单片机核心板。

Quick51核心板是一款自由的,开放全部系统资源的单片机实验板。

单片机芯片采用philips最新推出的拥有64KBFlash的增强型8052内核单片机P89LV51RD2,工作电压3.3V。

Quick51核心板和SmartSOPC结合,可以完成各种实验,本次实验也是基于这两个硬件的基础之上完成的。

●跳线的连接情况

基本跳线设置:

跳线编号

跳线名称

跳线接法

功能描述

JP1

/EA跳线

VCC与/EA短接(默认)

执行存储于片内Flash的程序

/EA与GND短接

执行存储于片外Flash的程序

JP2

/PSEN跳线

/PSEN与GND断开(默认)

正常模式

/PSEN与GND短接

用于某些型号单片机的ISP下载

JP3

复位跳线

WDT与RST短接

看门狗复位

RST与RC短接(默认)

阻容复位

JP4~JP6

Flash扩展地址跳线

A16~A18全接GND(默认)

不使用扩展地址(64KB以内)

A16~A18分别接P10~P12

使用扩展地址(可达512KB)

JP7

串行口跳线

RXD短接、TXD短接(默认)

RXD、TXD用于串行口通信

RXD断开、TXD断开

RXD、TXD可作为I/O使用

电压检测的跳线设置:

SmartSOPC实验箱B2区JP6的跳线全部断开;

Quick51实验板J14的PB-LE用杜邦线连接到J9;

Quick51实验板的P1端口用8芯排线连接到SmartSOPC实验箱B3区的COM6;

Quick51的J11(PB端口)用8芯排线连接到SmartSOPC实验箱B3区的COM3;

Quick51实验板J5的/INT0用杜邦线连接到SmartSOPC实验箱D4区的nCS;

Quick51实验板J5的/INT1用杜邦线连接到SmartSOPC实验箱D4区的DAT;

Quick51实验板J5的T0用杜邦线连接到SmartSOPC实验箱D4区的CLK。

温度测试的跳线设置:

请参照《Quick51跳线设置表》检查Quick51电路板上跳线JP1~JP7是否为默认设置;

SmartSOPC实验箱C2区的SCL用杜邦线连接到Quick51实验板J5的RXD;

SmartSOPC实验箱C2区的SDA用杜邦线连接到Quick51实验板J5的TXD;

Quick51实验板J14的PB-LE用杜邦线连接到J9;

Quick51实验板的P1端口用8芯排线连接到SmartSOPC实验箱B3区的COM6;

Quick51的J11(PB端口)用8芯排线连接到SmartSOPC实验箱B3区的COM3;

SmartSOPC实验箱B2区JP6的跳线全部断开。

(2)软件调试

●按键0

数码显示管全部显示“p”

●按键1

数码管上显示出当前的电压采样结果,单位:

伏特(V)。

轻轻左右旋动SmartSOPC实验箱D4区的电位器,改变ADC采样电压,数码管上显示的结果会跟着变化。

同时用万用表测量焊盘ADIN处的电压值,与显示结果对比,看是否基本一致。

●按键2

SmartSOPC实验箱B3区的数码管实时地显示出当前温度,单位:

℃。

●按键3

电压值与温度值交替显示

●按键8

数码显示管全部显示“p”

5.附录

(1)主程序

#include"Disp.h"

#include"I2C.h"

#include"VolTab.h"

#include

#include

#include

//定义TLC549操作接口

sbitCS=P3^2;

sbitDAT=P3^3;

sbitCLK=P3^4;

//

sbitKEY1=P2^0;

sbitKEY2=P2^1;

sbitKEY3=P2^2;

sbitKEY8=P2^7;

unsignedcharkey;

unsignedintcounter;

/*****************************************************************

温度检测函数模块

*****************************************************************/

/*

函数:

LM75A_GetTemp

功能:

读出LM75A的温度值

返回:

LM75A温度寄存器的数值(乘以0.125可得到摄氏度值)

*/

intLM75A_GetTemp()

{

unsignedcharbuf[2];

intt;

I2C_Gets(0x90,0x00,2,buf);

t=buf[0];

t<<=8;

t+=buf[1];

t>>=5;//去掉无关位

returnt;

}

 

/*

函数:

ByteToStr()

功能:

字节型变量c转换为十进制字符串

*/

voidByteToStr(unsignedcharidata*s,unsignedcharc)

{

codeunsignedcharTab[]={100,10};

unsignedchari;

unsignedchart;

for(i=0;i<2;i++)

{

t=c/Tab[i];

*s++='0'+t;

c-=t*Tab[i];

}

*s++='0'+c;

*s='\0';

}

 

/*

函数:

DispTemp()

功能:

在数码管上显示出温度值

参数:

t:

补码,除以8以后才是真正温度值

*/

voidDispTemp(intt)

{

codeunsignedcharTab[8]="01345689";

unsignedcharbuf[4];

bits;//符号位

unsignedchari;//整数部分

unsignedchard;//小数部分

unsignedcharx;//临时变量

//分离出符号

s=0;

if(t<0)

{

s=1;

t=-t;

}

//分离出整数和小数部分

i=t/8;

d=t%8;

//整数部分转换成字符串

ByteToStr(buf,i);

x=4-strlen(buf);

//清除所有显示

DispClear();

//显示符号

if(s)DispChar(x,'-');

x++;

//显示整数部分

//if(buf[0]==0)

//{

x+=3;

buf[0]=buf[1];

buf[1]=buf[2];

buf[2]='\0';

//}

DispStr(x-5,buf);

//显示小数点

DispDotOn

(1);

//显示小数部分

DispChar(2,Tab

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1