毕业设计(论文)传感器采集系统软件设计与实现.doc

上传人:仙人指路1688 文档编号:3977604 上传时间:2023-03-30 格式:DOC 页数:49 大小:6.11MB
返回 下载 相关 举报
毕业设计(论文)传感器采集系统软件设计与实现.doc_第1页
第1页 / 共49页
毕业设计(论文)传感器采集系统软件设计与实现.doc_第2页
第2页 / 共49页
毕业设计(论文)传感器采集系统软件设计与实现.doc_第3页
第3页 / 共49页
毕业设计(论文)传感器采集系统软件设计与实现.doc_第4页
第4页 / 共49页
毕业设计(论文)传感器采集系统软件设计与实现.doc_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《毕业设计(论文)传感器采集系统软件设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)传感器采集系统软件设计与实现.doc(49页珍藏版)》请在三一办公上搜索。

1、 学校代码: 11059 学 号:0805070290 Hefei University毕业论文(设计)BACHELOR DISSERTATION论文题目: 传感器采集系统软件设计与实现 学位类别: 工 学 学 士 年级专业(班级): 08级自 动 化(3班) 作者姓名: X Y Z 导师姓名: A B C 完成时间: 2012年5月22日 传感器采集系统软件设计与实现中 文 摘 要以前工业现场的各种数据都是采用人工读数和记录,一直停留在手工和仪表的水平。但是随着时代的进步,工业现场需要采集和分析的数据越来越多,靠人力已经无法满足工业控制的需求,在此背景下,传感器采集系统便应运而生了。近年来,

2、传感器数据采集及其应用技术受到人们越来越广泛的关注,传感器采集系统也得到了迅速地发展并且不论在化工生产、采矿、科学研究、灾害预防、医疗、国防等领域得到广泛的应用。本课题设计的传感器采集系统由压力传感器、AD转换器AD7705、单片机STC89C52RC和LCD1286显示器组成。压力传感器受到压力,将压力信号转换成微小的模拟电压信号,然后再将模拟信号经过放大和滤波,再送给AD7705将模拟信号转换为数字信号,再传送给STC89C52RC单片机,单片机再对接收到的数据进行分析处理,将数据传送到LCD12864液晶显示屏上进行显示。本文主要完成传感器采集系统中的软件部分的设计和实现,包括主函数模块

3、、数据采样模块、键盘模块和显示屏模块。经过测试,验证传感器采集系统功能的正确性。关键词:数据采集系统;AD7705;STC89C52RC;LCD12864Software design and Implementation of sensor data acquisition system ABSTRACTPrevious industrial field data are reading and recording by hand.Its always stay in manual and the level instrument. But along with the time progr

4、ess, industrial site requires the acquisition and analysis of the data more and more by manpower, has been unable to meet the demand of industrial control, in this context, sensor data acquisition system will emerge as the times require. In recent years, sensor data acquisition and its application t

5、echnology has attracted more and more attention, sensor data acquisition system has been developing rapidly in chemical production, mining, scientific research, disaster prevention, medical, defense and other fields have a wide range of applications.The design of sensor data acquisition system consi

6、sts of pressure sensor,AD7705, STC89C52RC and LCD1286. Pressure sensor subjected to pressure, the pressure signal is converted into a low analog voltage signal, then the analog signal after amplification and filtering, and then use the AD7705converts the analog signal to digital signal, and then tra

7、nsmits to the STC89C52RC microcontroller, The microcontroller receive the data to analysis processing, sending the data to the LCD12864.This paper mainly to the completion of sensor data acquisition system in the software part of the design and implementation, including the main function module, dat

8、a sampling module, keyboard module and display module. After the test, verify the correctness of the sensor data acquisition system function.KEY WORD: Data acquisition system; AD7705; STC89C52RC;LCD12864.目录第一章 绪论11.1 课题背景11.2 课题的目的和意义11.3 论文章节安排2第二章 系统总体设计32.1 系统概述32.2 系统功能要求32.3 系统总体设计3第三章 系统软件设计53

9、.1 主控模块程序设计与实现53.2 数据采集模块设计与实现63.2.1 AD7705芯片63.2.2 数据采集模块软件设计与实现113.3 输入模块设计与实现133.4 输出模块设计与实现17第四章 系统调试224.1 开发系统简介224.2 实物调试24第五章 总结27参考文献28致 谢29附录一 程序代码30附录二 实物图44第一章 绪论1.1 课题背景以往工业现场的各种数据都是采用人工读数和记录,一直停留在手工和数字仪表的水平。但是随着时代的进步,工业现场需要采集和分析的数据越来越多,靠人力已经无法满足工业控制的需求,在此背景下,传感器数据采集系统便应运而生并正在飞速的发展着。现如今很

10、多工业控制领域和家用自动化都必须进行现场数据采集,然后根据现场采集的数据进行自动分析计算,判断现场状况,然后对现场进行处理, 这对传感器采集系统的性能提出了更高的要求1。1.2 课题的目的和意义近年来,数据采集及其应用技术受到人们越来越广泛的关注,数据采集系统也迅速地得到应用。在生产过程中,应用这一系统可对生产现场的工艺参数进行采集、监视和记录,为提高产品质量、降低成本提供信息和手段。在科学研究中,应用数据采集系统可获得大量的动态信息,是研究瞬间物理过程的有力工具,也是获取科学奥秘的重要手段之一。总之不论在哪个应用领域中,数据采集与处理越及时,工作效率就越高,取得的经济效益就越大。现如今,科技

11、发展速度日新月异,随着计算机被广泛运用,数据采集在许多领域有着十分重要的应用。它是连接计算机与外部物理世界的桥梁。利用各种通信方式,实现对现场环境的实时监控及数据参数分析,通过制订上位机(主机)与数据采集器(从机)的通信协议,实现两者之间阻塞式通信交互过程。在矿业、工业、农业等各种行业,尤其是在对信息实时性能要求较高或者恶劣的数据采集环境中更突出其应用的必要性2。例如:在矿井井下环境检测、工业生产、现代农业生产和科学技术研究的各行业中,常常利用计算机对各种数据进行采集分析。这其中有很多地方需要对各种数据进行采集,如压力、流速、液位、温度、频率等。通过对采集到的数据进行分析,将有极大的实际价值。

12、例如:通过对化工生产过程的压力和温度数据进行数据采集和分析,这对于提高原料利用率、减少成本、增加产量和实现安全生产都有十分重要的作用;通过对室内湿度和温度数据进行数据采集和分析,空调可以自动调节温度和湿度,这样更节能并且使得室内环境更舒适;通过对矿井井壁压力、矿井周围水流流速等数据进行监测,将有利于建立矿难预警机制,减少矿难造成的损失3。此外在该系统的基础上,可以进一步扩展其它的模块,如远程数据采集、温度测控等模块,以便广泛应用于电力、交通等系统中,实现远程监控。本次设计采用单片机作为控制器,通过传感器对压力进行采集,再利用液晶显示屏显示数据,从而在实现数据采集。在本次设计中,主要完成系统软件

13、部分的设计和实现,经过一段时间的努力,软件部分已经基本满足了要求。1.3 论文章节安排本文共分五章,具体结构安排如下:第一章,绪论,主要介绍论文课题研究的目的和意义、课题的研究背景、本次设计的设计简介以及论文章节的安排。第二章,系统整体设计,主要阐述传感器采集系统的功能和系统的整体设计方案。第三章,系统软件模块设计,在这个模块,将对系统的软件部分进行解释说明。第四章,系统的调试,主要阐述所设计调试中所遇到的问题以及其解决的方法。第五章,结论。在结论里对本次论文进行技术和心得总结。第二章 系统总体设计2.1 系统概述传感器采集4是指将温度、压力、流量、位移等模拟量采集转换成数字量后,再由计算机进

14、行存储、处理、显示或打印的过程。相应的系统被称为传感器采集系统。传感器采集的主要任务就是采集传感器输出的模拟信号并转换为计算机能识别的数字信号,然后送入计算机进行相应的计算和处理,得出所需要的数据。与此同时,将计算机得到的数据进行显示或打印,以便对某物理量的测量和监视,其中一部分数据还将被生产过程中的计算机控制系统用来控制某些物理量。本次设计的传感器采集系统则对传统的系统作了简化,要求将采集到的数据传到单片机进行相应的计算和处理,得出所需要的数据再通过显示器显示出来。2.2 系统功能要求本次设计需要实现的功能及要求有如下几点:1)能够高精度采集传感器数值;2)对传感器数值能够实时显示;3)系统

15、数据采集时间间隔能够现场自由设定。2.3 系统总体设计依据以上功能要求以及硬件要求,本设计主控芯片采用STC89C52RC单片机,键盘采用4*4矩阵键盘。整个系统可以分为传感器模块、数据采集模块、键盘模块、输出模块和主控模块来实现5。系统框图如图1所示。 数据采集模块主控模块输出模块4*4矩阵键盘输入模块传感器模块图1 系统整体框图首先传感器模块接收外部信号,然后将外部信号传给数据采集模块。数据采集模块接收到信号后进行放大滤波并进行AD转化变成数字信号,之后数据采集模块把转化而来的数字信号传给主控模块。主控模块将收到的数字信号进行分析处理,再通过输出模块输出。而4*4矩阵键盘输入模块用来设置采

16、样间隔时间的。从键盘输入数据传给主控模块,主控模块根据输入的数据来控制采样间隔时间6。第三章 系统软件设计3.1 主控模块程序设计与实现主控模块需要实现的功能有两点。一是将从键盘处接收到的数据经过函数处理来设置系统采样间隔时间;二是将AD7705处传来的数据进行处理,并传送给LCD12864将数据显示出来。系统主程序流程图如图2所示。开始显示压力读入按键值读取AD显示采样间隔时间系统初始化图2 系统主控模块程序流程图主函数主要作用是将12864程序、AD7705程序、4*4矩阵键盘程序组合起来,使他们共同完成所要求的功能。经测试,电路连接好后,压力传感器在0压力是在LCD12864上显示的初始

17、值为1040,满值为65535。所以先将AD输出数值赋值给,然后在数据处理时要用得到初始值0。处理后读数与所受压力成真比,经多次测试验证得公式:N遂得到压力值。将这个数据传送给12864便可显示出压力值。由于任务书里要求能够自由设定采样时间间隔,所以采用了延迟程序,其作用是使系统采样间隔设定为。主控模块含有delay01ms( )函数、delay100ms( )函数和主函数main( )。delay01ms( )是利用for循环语句实现的1*t ms的延时函数,它将用来防止键盘抖动干扰,delay100ms( )是for循环语句实现的100*t ms的延时函数,delay100ms( )中的参

18、数将由键盘输入的数据决定。此函数将用来设定系统数据采集时间间隔。main( )函数主要有两个动作:其一是将由AD传来的数据进行处理并将它们转化并显示到12864上去;其二是读键盘数据,用来设定系统数据采集时间间隔。首先调用lcdinit( )函数将12864液晶显示屏初始化。然后调用lcdstring( )函数分别在显示屏的第一行和第三行显示“压力:”和“采样间隔时间”字样,接着就是读键盘的程序,其从键盘读入两个数经过处理后将两个数从显示屏上显示出来,显示范围为0.0 S到9.9 S。接着调用Reset7705( )函数将AD7705初始化,再调用Adc7705Init(8)返回一次采样值。w

19、hile(1)是一个无限循环函数,在while(1)内主要完成的是AD实时采样显示功能。先调用延时函数delay100ms( ),产生一个100ms*n3 ms的延时,再利用x=AverAdc7705()读取AD采样数值,在将数据进行处理,写入12864使数据显示出来。主函数程序见附录一。3.2 数据采集模块设计与实现3.2.1 AD7705芯片AD7705是应用于低频测量的2通道的模拟前端7。该器件可以接受直接来自传感器的低电平的输入信号,然后产生串行的数字输出。利用-转换技术实现了16位无丢失代码性能。选定的输入信号被送到一个基于模拟调制器的增益可编程专用前端。片内数字滤波器处理调制器的输

20、出信号。通过片内控制寄存器可调节滤波器的截止点和输出更新速率,从而对数字滤波器的第一个陷波进行编程。AD7705只需2.73.3V或4.755.25V单电源。AD7705是双通道全差分模拟输入,当电源电压为5V、基准电压为2.5V时,这二种器件都可将输入信号范围从0+20mV到0+2.5V的信号进行处理。还可处理20mV2.5V的双极性输入信号,对于AD7705是以AIN(-)输入端为参考点,当电源电压为3V、基准电压为1.225V时,可处理0+10mV到0+1.225V的单极性输入信号,它的双极性输入信号范围是10mV1.225V。AD7705可以实现2通道系统所有信号的调理和转换。AD77

21、05是用于智能系统、微控制器系统和基于DSP 系统的理想产品。其串行接口可配置为三线接口。增益值、信号极性以及更新速率的选择可用串行输入口由软件来配置。该器件还包括自校准和系统校准选项,以消除器件本身或系统的增益和偏移误差。AD7705的引脚图如图3所示。图3 AD7705芯片引脚图AD7705片内包括8个寄存器,这些寄存器通过器件的串行口访问。第1个是通信寄存器,它管理通道选择,决定下一个操作是读操作还是写操作,以及下一次读或写哪一个寄存器。所有与器件的通信必须从写入通信寄存器开始。上电或复位后,器件等待在通信寄存器上进行一 次写操作。这一写到通信寄存器的数据决定下一次操作是读还是写,同时决

22、定这次读操作或写操作在哪个寄存器上发生。所以,写任何其它寄存器首先要写通信寄存器,然后才能写选定的寄存器。所有的寄存器(包括通信寄存器本身和输出数据寄存器)进行读操作之前,必须先写通信寄存器,然后才能读选定的寄存器。此外,通信寄存器还控制等待模式和通道选择,此外DRDY状态也可以从通信寄存器上读出。第2个寄存器是设置寄存器,决定校准模式、增益设置、单/双极性输入以及缓冲模式。第3个寄存器是时钟寄存器,包括滤波器选择位和时钟控制位。第4个寄存器是数据寄存器,器件输出的数据从这个寄存器读出。最后一个寄存器是校准寄存器,它存储的是通道校准数据8。1、通讯寄存器控制字表1 通讯寄存器控制字0/DRDY

23、(0)RS2RS1RS0R/WSTBYCH1CH00/DRDY 对于写操作,必须有一个“0”被写到这位,以便通信寄存器上的写操作能够准确完成。如果“1”被写到这位,后续各位将不能写入该寄存器。它会停留在该位直到有一个“0”被写入该位。一旦有“0”写到0/DRDY位,以下的7位将被装载到通信寄存器。对于读操作,该位提供器件的DRDY标志。该位的状态与DRDY输出引脚的状态相同。RS2-RS0是寄存器选择位。这3个位选择下次读/写操作在8个片内寄存器中的哪一个上发生,见表2(附寄存器大小)。当选定的寄存器完成了读/写操作后,器件返回到等待通信寄存器下一次写操作的状态。它不会保持在继续访问原寄存器的

24、状态。表2 寄存器的选择RS2RS1RS0寄存器寄存器位数000通信寄存器8001设置寄存器8010时钟寄存器8011数据寄存器16100测试寄存器8101无操作110偏移寄存器24111增益寄存器24R/W是读/写选择位。这个位选择下次操作是对选定的寄存器读还是写。“0”表示下次操作是写,“1“表示下次操作是读。 STBY控制AD7705的等待模式。此位上写“1”,则处于等待或掉电模式。在这种模式下,器件消耗的电源电流仅为10A。在等待模式时,器件将保持它的校准系数和控制字信息。写“0”,器件处于正常工作模式。 CHI-CH0控制通道选择。这2个位选择一个通道以供数据转换或访问校准系数,如表

25、3所示。器件内的3对校准寄存器用来存储校准系数。如表7和8所示指出了哪些通道组合是具有独立的校准系数的。当CH1为逻辑1而CH0为逻辑0时,由表可见对AD7705是AIN1(-)输入脚在内部自己短路。这可以作为评估噪声性能的一种测试方法(无外部噪声源)。在这种模式下,AIN1(-)/COMMON输入端必须与一个器件允许的共模电压范围内的外部电压相连接。表3 通道的选择CH1CH2AIN(+)AIN(-)校准寄存器对00AIN1(+)AIN1(-)寄存器对001AIN2(+)AIN2(-)寄存器对110AIN1(-)AIN1(-)寄存器对011AIN1(-)AIN2(-)寄存器对22、设置寄存器

26、控制字设置寄存器是一个8位寄存器,它既可以读数据又可将数据写入。表4为设置寄存器控制字。表4 设置寄存器控制字MD1MD0G2G1G0B/UBUFFSYNCMD1 MD0为0 1时AD工作在自校准模式。在通信寄存器的CH1和CH2选中的通道上激活自校准。这是一步校准完成此任务后,返回正常模式,即MD1和MD0皆为0。开始校准时DRDY输出脚或DRDY位为高电平,自校准后又回到低电平,这时,在数据寄存器产生一个新的有效字。零标度校准是在输入端内部短路(零输入)和选定的增益下完成的;满标度校准是在选定的增益下及内部产生的VREF/选定增益条件下完成的G2 G1 G0 是增益选择位,当为1 1 1时

27、增益128倍。B/U决定AD7705处于单极性/双极性工作状态。“0”表示选择双极性操作,“1”表示选择单极性工作。 BUF是缓冲器控制。“0”表示片内缓冲器短路,缓冲器短路后,电源电流降低。此位处于高电平时,缓冲器与模拟输入串联,输入端允许处理高阻抗源。 FSYNC是滤波器同步。该位处于高电平时,数字滤波器的节点、滤波器控制逻辑和校准控制逻辑处于复位状态下,同时,模拟调制器也被控制在复位状态下。当处于低电平时,调制器和滤波器开始处理数据,并在3*(1/输出更新速率)时间内(也就是滤器的稳定时间)产生一个有效字。FSYNC不影响数字接口,也不使DRDY输出复位(如果它是低电平)。3、时钟寄存器

28、控制字表5时钟寄存器控制字ZER0ZER0ZER0CLKDISCLKDIVCLKFS1FS0ZER0位上必须全部写上零,以确保AD7705/7706正确操作。否则,会导致器件的非指定操作。CLKDIS是主时钟禁止位。逻辑“1”表示阻止主时钟在MCLKOUT引脚上输出。禁止时,MCLKOUT输出引脚处于低电平。这种特性使用户可以灵活地使用MCLKOUT引脚,例如可将MCLKOUT做为系统内其它器件的时钟源,也可关掉MCLKOUT,使器件具有省电性能。当在MCLKIN上连一个外部主时钟,AD7705继续保持内部时钟,并在CLKDIS位有效时仍能进行正常转换。当在MCLKIN和MCLKOUT之间接一

29、个晶体振荡器或一个陶瓷谐振器,则当CLKDIS位有效时,AD7705时钟将会停止,也不进行模数转换。CLKDIV是时钟分频器位。CLKDIV置为逻辑1时,MCLKIN引脚处的时钟频率在被AD7705使用前进行2分频。例如,将CLKDIV置为逻辑1,用户可以在MCLKIN和MCLKOUT之间用一个4.9152MHz的晶体,而在器件内部用规定的2.4576MHz进行操作。CLKDIV置为逻辑0,则MCLKIN引脚处的频率实际上就是器件内部的频率。CLK是时钟位。CLK位应根据AD7705的工作频率而设置。如果转换器的主时钟频率为2.4576MHz(CLKDIV=0)或为4.9152MHz(CLKD

30、IV=1),CLK应置“0”。如果器件的主时钟频率为1MHz(CLKDIV=0)或2MHz(CLKDIV=1),则该位应置“1”。该位为给定的工作频率设置适当的标度电流,并且也(与FS1和FS0一起)选择器件的输出更新率。如果CLK没有按照主时钟频率进行正确的设置,则AD7705的工作将不能达到指标。FS1,FS2 是滤波器选择位,它与CLK一起决定器件的输出更新率。在本次软件设计中SCLK引脚被定义与单片机的P30口相连,DIN接P31, DOUT接P32,DRDY接P33。SCLK为串行时钟,施密特逻辑输入。将一个外部的串行时钟加于这一输入端口,以访问AD7705的串行数据。该串行时钟可以

31、是连续时钟以连续的脉冲串传送所有数据。反之,它也可以是非连续时钟,将信息以小批型数据发送给AD7705。DIN引脚是串行数据输入端。向片内的输入移位寄存器写入的串行数据由此输入。根据通讯寄存器中的寄存器选择位,输入移位寄存器中的数据被传送到设置寄存器、时钟寄存器或通讯寄存器。DOUT引脚是串行数据输出端。从片内的输出移位寄存器读出的串行数据由此端输出。根据通讯寄存器中的寄存器选择位,移位寄存器可容纳来自通讯寄存器、时钟寄存器或数据寄存器的信息。DRDY引脚是逻辑输出。这个输出端上的逻辑低电平表示可从AD7705的数据寄存 器获取新的输出字。完成对一个完全的输出字的读操作后,DRDY引脚立即 回

32、到高电平。如果在两次输出更新之间,不发生数据读出,DRDY将在下一次输出更新前500t CLKIN时间返回高电平。当DRDY处于高电平时,不能进行读操作,以免数据寄存器中的数据正在被更新时进行读操作。当数据被更新后,DRDY又将返回低电平。DRDY也用来指示何时AD7705已经完成片内的校准序列。AIN1(+)差分模拟输入通道1的正输入端;AIN1(-)差分模拟输入通道1的负输入端;AIN2(+)差分模拟输入通道2的正输入端;AIN2(-)差分模拟输入通道2的负输入端9。至于通道1与2的选择是通过软件来实现的。3.2.2 数据采集模块软件设计与实现在本次设计中我们选用的是通道1,即AIN1,所

33、以写入XXXXXX00。因为采用自校准;单极性;接缓冲,允许处理高阻电源,非复位,128倍放大,所以需要写入0x7e。AD7705驱动程序流程图如图4所示。开始读入数据并处理输出数据AD初始化 图4 AD7705驱动程序流程图此程序为AD7705的驱动程序,定义了Reset7705( )、Write( )、Read( )、Adc7705Init( )、Adc7705( )共5个函数。Reset7705( )是AD7705的复位函数,Write( )函数的作用是写入寄存器8位数据,Read( )的作用是从数据寄存器中读出16位数据,Adc7705Init( )是AD7705的初始化函数,Adc7

34、705( )定义了使用通道AIN1,AverAdc7705( )函数输出AD转化结果。Reset7705( )是AD7705的复位函数,其作用是将 AD7705的通信端口复位,Write( )函数是写入函数,当调用此函数时能够向寄存器写入8位数据,主要是在写控制字是需要使用此函数。Read( )函数是读函数,调用此函数能够从数据寄存器中读出16位数据,具体实现如下所示。unsigned int Read(void) unsigned int rtval=0; unsigned i; for(i=0;i16;i+) sclk=0; rtval=1;/i=0时,此操作不妨碍 rtval+=(0x0

35、001&(unsigned int)dout); sclk=1; /程序执行完后sclk仍为高电平 din=1; /为保证不乱写程序,此语句非常重要,否则试验表明很不稳定 return rtval; Adc7705Init( )函数主要功能是选择寄存器并向寄存器中写入控制字。本次设计中需要AD处于自校准、单极性、接缓冲、允许处理高阻电源、非复位以及128倍放大工作状态。具体实现如下所示。void Adc7705Init(unsigned char range) range=3; Reset7705(); /复位 /*写时钟寄存器*/ Write(0x20); /00100000下一个时钟寄存器

36、;写;正常工作模式;通道AN1。Write(0x07); /0x07:00000111主时钟打开;晶振2M;不分频;500Hz。 /*写设置寄存器*/ Write(0x10); /0x10:0001 0000 下一个设置寄存器;写;正常工作模式;通道AN1。Write(0x7e|range); /0x7e:0111 1110 自校准;单极性;接缓冲,允许处理高阻电源。/非复位,128倍放大。 Adc7705( )的作用是返回一次采样值,具体实现如下所示。unsigned int Adc7705(void) while(drdy=1); Write(0x38); /0x38:00111000 下

37、一个16位数据寄存器;读;正常工作模式;通道AIN1。 return Read(); AverAdc7705( )函数的功能是完成数字滤波并输出模拟信号所转化而来的数字信号。程序中连续调用采样Adc7705( )共计150次并将他们它们求平均,使达到到软件滤波的效果。具体实现如下所示。unsigned int AverAdc7705(void) unsigned long rtval=0; unsigned int i; for(i=0;i150;i+) rtval+=(unsigned long)Adc7705();/连续调用采样150次,求和 return (unsigned int)(r

38、tval/150);/求平均,得到一个较稳定的采样值3.3 输入模块设计与实现本程序是键盘的驱动程序,并且定义了各个按键的含义。键盘与单片机通过P1 I/O端口相连,采用的是低电平扫描方式。其硬件图如图5所示。Y3Y2Y1Y0X0X1X2X3图5 4*4矩阵键盘接口示意图低电平扫描是将共同点com连接Vcc。没有任何按键按下时,Y3、Y2、Y1、Y0端点都能保持为高电平(即1)。送入X3、X2、X1、X0的扫描信号中,只有一个低电平(即0),其余3个为高电平。整个工作过程可分为4个阶段,说明如下:1) 在第一阶段,主要目的是判断S4、S3、S2、S1有没有被按下。首先将1110B信号送入X3、

39、X2、X1、X0,也只有X0为低电平,其他各行都是高电平。接着读取Y3、Y2、Y1、Y0的状况。如果Y3、Y2、Y1、Y0为1110,则表示S1被按下;若Y3、Y2、Y1、Y0为1101,则表示S2被按下;若Y3、Y2、Y1、Y0为1011,则表示S3被按下;若Y3、Y2、Y1、Y0为0111,则表示S4被按下;若Y3、Y2、Y1、Y0为1111,则表示按键没有被按下,进入第二阶段。2) 在第二阶段,主要目的是判断S8、S7、S6、S5有没有被按下。首先将1101B信号送入X3、X2、X1、X0,也只有X1为低电平,其他各行都是高电平。接着读取Y3、Y2、Y1、Y0的状况。如果Y3、Y2、Y1

40、、Y0为1110,则表示S5被按下;若Y3、Y2、Y1、Y0为1101,则表示S6被按下;若Y3、Y2、Y1、Y0为1011,则表示S7被按下;若Y3、Y2、Y1、Y0为0111,则表示S8被按下;若Y3、Y2、Y1、Y0为1111,则表示按键没有被按下,进入第三阶段。3) 在第三阶段,主要目的是判断S12、S11、S10、S9有没有被按下。首先将1011B信号送入X3、X2、X1、X0,也只有X2为低电平,其他各行都是高电平。接着读取Y3、Y2、Y1、Y0的状况。如果Y3、Y2、Y1、Y0为1110,则表示S9被按下;若Y3、Y2、Y1、Y0为1101,则表示S10被按下;若Y3、Y2、Y1

41、、Y0为1011,则表示S11被按下;若Y3、Y2、Y1、Y0为0111,则表示S12被按下;若Y3、Y2、Y1、Y0为1111,则表示按键没有被按下,进入第四阶段。4) 在第四阶段,主要目的是判断S16、S15、S14、S13有没有被按下。首先将0111B信号送入X3、X2、X1、X0,也只有X3为低电平,其他各行都是高电平。接着读取Y3、Y2、Y1、Y0的状况。如果Y3、Y2、Y1、Y0为1110,则表示S13被按下;若Y3、Y2、Y1、Y0为1101,则表示S14被按下;若Y3、Y2、Y1、Y0为1011,则表示S154被按下;若Y3、Y2、Y1、Y0为0111,则表示S16被按下;若Y

42、3、Y2、Y1、Y0为1111,则表示按键没有被按下,进入第一阶段从新扫描11。此系统可通过4*4键盘实现自由设定采集时间间隔的设定,采样范围设定为0.0s到9.9s。其中用到0到9共10个按键。在软件实现时需要完成4*4键盘的底层驱动程序,键盘采用的是低电平扫描11。键盘与单片机P1口单片机相连。键盘驱动流程图如图6所示。NY开始键盘扫描有无按键闭合计算按键值图6 键盘驱动程序流程图本程序包含delay1ms( )和jianpan( )两个函数。delay1ms( )是利用while和for构成的循环语句构成的延时程序。jianpan( )是键盘扫描函数,采用的是低电平扫描,定义按键1到9分

43、别代表数字1到9,按键10到按键16都定义为0,键盘程序实现如下。uint jianpan(void) uchar temp; uint num=16;P1=0xff; /先向P1口写1;端口读状态P1=0xf0; temp=P1; if(temp!=0xf0) delayms(50); if(temp!=0xf0)/1111 0000 P1=0xfe;/1111 1110 temp=P1; switch(temp) case(0xfe):num=0;break; /1110 1110按键16 case(0xde):num=0;break; /1101 1110按键12case(0xbe):n

44、um=8;break; /1011 1110按键8case(0x7e):num=4;break; /0111 1110 按键4 P1=0xfd; /1111 1101 temp=P1; switch(temp) case(0xed):num=0;break; /1110 1101 按键15case(0xdd):num=0;break; /1101 1101按键11case(0xbd):num=7;break; /1011 1101按键7case(0x7d):num=3;break; /0111 1101按键3 P1=0xfb; /1111 1011 temp=P1; switch(temp) case(0xeb):num=0;break; /1110 1011按键14case(0xdb):num=0;break; /1101 1011按键10case(0xbb):num=6; break;/1011 1011按键6case(0x7b):num=2;break; /0111 1011按键2 P1=0xf7; /1111 0111 temp=P1; switch(temp) case(0xe

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号