《基于STC12C5410AD单片机的倾角测试系统毕业设计.doc》由会员分享,可在线阅读,更多相关《基于STC12C5410AD单片机的倾角测试系统毕业设计.doc(64页珍藏版)》请在三一办公上搜索。
1、基于STC12C5410AD单片机的倾角测试系统毕业设计基于STC12C5410AD单片机的倾角测试系统毕业设计目 录目 录i摘 要IAbstractII第一章 绪论11.1课题背景及意义11.2 本文主要工作及章节安排1第二章 角度测量系统硬件设计22.1 硬件功能及总体结构22.2 信号采集模块22.2.1 加速度传感器MMA7260Q简介22.2.2结构与原理32.2.3 倾角测试模块电路设计52.3 LED显示模块62.3.1 SPI简介62.3.2显示功能设计72.4单片机编程下载及串口通讯设计82.5 DS1302简介92.6 微控制器模块102.6.1 STC12系列单片机简介1
2、02.6.2 单片机系统电路设计112.7 其他电路设计122.7.1键盘电路设计122.7.2声光报警电路设计12第三章 软件设计143.1数据处理143.1.1 角度数据采集设计143.1.2 数字滤波及工程变换部分153.2数据存储部分163.3 DS1302软件设计193.4键盘功能设置223.5 通信部分253.6 其他部分软件设计273.6.1 报警部分软件设计:273.6.2 LED显示程序设计28第四章 实验测试结果及倾角测试原理304.1实验测试结果304.2 倾角测试原理及角度计算方法30总 结32致 谢33参考文献34附录 部分程序代码35第一章 绪论1.1课题背景及意义
3、在很多情况下,人们想确定物体相对于重力场是出于垂直位置还是水平位置.在很多国家,对起重机是有规定的,要求对其进行某种形式的倾斜监控,特别是对于运输人的设备.离轨车辆需要倾斜度信息以避免发生事故,或使某些重要部件保持一定的角度.一些车辆,如自倾斜火车,利用倾斜来补偿离心加速度.在这里,倾角仪用来帮助使用重力垂直于地面.光学仪器,如平面激光仪,经常需要处于水平或垂直位置.在学多情况下,需要测量两个相互垂直方向的倾斜度 1-5 。在国内在生产生活的各个领域,倾角的测量已普遍存在。一般的测量方法是:以单片机为中心,系统在单片机的控制下进行数据采集、数据处理、温度补偿、控制和显示,并完成与上位机的通信等
4、1-7。1.2 本文主要工作及章节安排本文以单片机STC12C5410AD单片机为核心搭建硬件平台,使用加速度传感器MMA7260Q测量物体倾斜角度,并利用串口实现数据的传输。并进行了实际实验。本文分五章对研究课题进行阐述:第一章:绪论。阐述课题的背景及意义,研究现状,最后给出了全文的主要工作和章节安排。第二章:倾角测量系统硬件设计。详细介绍了以STCSTC12C5410AD为核心的硬件电路设计,包括倾角采集模块、串行通信模块、微处理器外围电路。重点介绍了基于加速度传感器MMA7260Q的数据采集模块、微处理器模块的电路设计。第三章:倾角测量系统软件设计。重点介绍了下位机程序,包括数据采集程序
5、和数据存储通信程序,并对各个子程序进行了详细介绍。第四章:给出了实验的方法及测试结果,对倾角测试的原理及倾角的计算做出了详细介绍。第二章 角度测量系统硬件设计2.1 硬件功能及总体结构系统由单片机、倾角传感器、键盘编码器、键盘、数码管驱动器和数码管等组成。 系统的功能是通过倾角传感器采集角度信息,传送给单片机。通过LED数码管显示时间角度信息。配备有声光报警电路,并通过键盘修改相应参数,通过串口完成与上位机的通信8,9。系统结构如图2.1所示。图2.1系统结构图2.2 信号采集模块2.2.1 加速度传感器MMA7260Q简介MMA7260Q是一种低成本单芯片三轴向高灵敏度加速度传感器,基于表面
6、微机械结构,集成信号调理电路、单极点低通滤波器和温度补偿部分,并且具有4种不同的灵敏度选择模式。同时它包含一种睡眠模式,MMA7260Q能在XYZ 三个轴向上以极高的灵敏度读取低重力水平的坠落、倾斜、移动、放置、震动和摇摆10。主要具有以下特点: 三轴向加速度测量;测量范围可选:1.5g、2g、4g、6g;低功耗,工作电压:2.2V3.6V,工作电流500;休眠模式:3;封装:16引脚6mm6mm1.45mmQFN封装;高灵敏度:800mV/g(量程为1.5g);启动时间短:1ms;低噪音:达到更高的分辨率、更高的精确度。2.2.2结构与原理1结构MMA7260Q功能框图如图2.2所示。在IC
7、内部主要由双芯片构成,即重力检测单元(负责加速度的侦测)与IC控制单元(负责信号处理) 。重力检测单元将检测到的加速度变化量信号送到C - V转换电路,而后进行取样、保持及信号放大处理,最后用低通滤波器滤除高频噪音,在温度补偿处理后即可输出加速度信息。图2.2MMA7260Q功能框图 2原理重力感测单元(G - CELL)由基于半导体材料的微机械结构构造而成。物理模型可以构造成一对固定的面板,中间包含一块可移动的面板,如图2.3所示。当系统被给定一加速度时,中间板就会漂移。中间板移动时,它到一边(固定的面板)的距离增加,而到另一边的距离相应地减少,这种距离的变化可用来表征加速度。G - CEL
8、L 的面板构成了两个背对背的电容,当中间面板随着加速度移动时,两个面板之间的距离就会改变,因此电容值也随之改变, C =A/D。这里A是指面板面积,是介电常数, D是面板间距。在ASIC (专用集成电路)(Application Specific Integrated Circuit)中使用开关电容测量出G-CELL 的电容值,并从他们的差值中解析出加速度数据。ASIC再进行信号调理和信号滤波(使用开关电容) ,最后输出正比于加速度的电压。图2.3简化的换能物理模型灵敏度选择( g - Select) :根据g - Select1、g - Select2两脚输入电平的不同,MMA7260Q具有
9、4种灵敏度选择模式,如表2.1所示。根据不同的产品应用可以选择不同的灵敏度,而且在应用时可以任意改变。睡眠模式( Sleep Mode) :当要提供MMA7260Q 12引脚(Sleep Mode)低电平时,传感器在低功耗模式下运行,此时运行电流仅为3A。当提供其高电平时,传感器就会保持正常的运行模式。表2.1 MMA7260Q灵敏度选择模式g-Select1g-Select2g值灵敏度001.5g800mV/g012g600mV/g104g300mV/g116g200mV/g可按照下面规则选择g值:1.5g适合自由落体或精确的倾斜补偿应用;2g适合手持式运动检测或游戏控制;4g适合与低震动监
10、控、运输和处理;6g适合高震动监控与较高的震动读取。2.2.3 倾角测试模块电路设计MMA7260Q的供电电压在2. 23. 6V之间,输出信号在03V以内,电源本采用3.3伏电压供电 ,而且输出的信号可直接输入STC12的A/D通道而不必对信号电压进行变换。MMA7260Q与STC12单片机的接口电路如图2.4所示。图2.4接口电路图本文应用中选择g值为1.5g,加速度传感器灵敏度选择引脚g-select1、g-select2全部接为低电平。计算公式如公式2-1所示。=1.65 (2-1)=800mv/g,=0.852.45之间变化给MMA7260Q的12引脚()提供高电平,即不是工作在睡眠
11、模式。MMA7260Q内部使用开关电容作为滤波器,为降低时钟带来的噪声,在输出通道上采用简单的RC滤波,在输出通道上使用1k的电阻和0. 1F的电容构成RC滤波器即可(如图5, XOUT、YOUT、ZOUT ) 。另外,A / D采样率的选择不能干扰加速度计采样频率(11kHz) ,以防混叠误差。2.3 LED显示模块2.3.1 SPI简介1SPI简介串行外设接口(Serial Peripheral Interface,简称SPI)实际上是一种串行总线接口标准,SPI方式可允许同时同步接收和传送8位数据,是一种全双工串行总线。其速度比UART串行接口要快。SPI支持在同一总线上将多个从机连接到
12、一个主机。同一总线上也可以有多个主机,当两个或多个主机试图同时进行数据传输时,需要进行碰撞检测11。STC12C5410AD单片机集成了SPI接口,它是一个全双工高速同步通信接口,既可以和其他微处理器通信,也可以与具有SPI兼容接口的器件,如存储器、A/D转换器、D/A转换器、LED或LCD驱动器等进行同步通信。SPI也可以在一个多主机系统中负责内部处理器之间的通信。SPI接口有两种操作模式:主模式和从模式。在主模式中支持高达3Mbit/s的速率(工作频率为12MHz时,如果CPU主频采用20MHz到36MHz,则可更高);从模式时速度无法太快,速度在fosc/8以内较好。此外,SPI接口还具
13、有传输完成标志和写冲突标志保护功能。SPI接口由MISO(与P1.6共用)、MOSI(与P1.5共用)、SCLK(与P1.7)和/SS(与P1.4共用)4根信号线构成。2SPI接口的数据通信过程在SPI中,传输总是由主机启动的。作为主机时,如果SPI使能(SPEN=1)并选择作为主机,主机对SPI 数据寄存器的写操作将启动SPI时钟发生器和数据的传输。在数据写入SPDAT之后的半个到一个SPI位时间后,数据将出现在MOSI引脚。需要注意的是,主机可以通过将对应器件的/SS引脚驱动为低电平实现与之通信。写入主机SPDAT寄存器的数据从MOSI引脚移出发送到从机的MOSI引脚。同时从机SPDAT寄
14、存器的数据从MISO引脚移出发送到主机的MISO引脚。传输完一个字节后,SPI 时钟发生器停止,传输完成标志(SPIF)置位并产生一个中断(如果SPI中断使能)。主机和从机CPU的两个移位寄存器可以看作是一个16位循环移位寄存器。当数据从主机移位传送到从机的同时,数据也以相反的方向移入。这意味着在一个移位周期中,主机和从机的数据相互交换。2.3.2显示功能设计系统当前角度,角度下限值和时间都采用LED数码管来显示。显示当前角度用到4位数码管,显示上下限报警值时要同时显示,用到4位数码管,时间显示当前的分秒。所以系统用8个数码管就可以完成显示功能。采用该单片机的SPI串行接口进行控制,需要把串行
15、数据转换在并行数据来控制数码管显示。系统选74HC595有8位串行输入/输出或者并行输出功能的芯片。74HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线,输出寄存器可以直接清除100MHz的移位频率。/G(13脚): 高电平时禁止输出(高阻态)。用一个引脚控制它,可以方便地产生闪烁和熄灭效果。74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保
16、持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。系统首先由SPI分别向两片74HC595先发送段码再发送位码,两片74HC595实现数码管段码和位码的控制,显示方式采用动态扫描方式。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。显示模块电路如图2.5,2.6所示图2.5 单片机与74HC595连接图图2.6 LED驱动电路2.4单片机编程下载及串口通讯设计该系列单片机是采用串口下载用户程序,有在系统编程功能。目前采用RS232接口与计
17、算机通信,但随着计算机技术的发展,支持热插拔的USB标准接口将取代RS232接口,因此计算机将越来越少配置甚至不配置RS232接口。RS232接口与USB接口虽然都属于串行接口,但它们的数据格式、通信协议、信号电平以及机械连接方式则不同。这样单片机不能编程下载和和上位机通讯,这样给开发带来了麻烦。解决这一问题就得把现有的单片机异步通讯接口转换成USB接口。方案是采用USBRS232桥接器件如CP2102,CP2103进行设计,计算机通过USB接口虚拟一个RS232接口,与传统设备器件连接,设备对计算机接口的形式为USB接口。设计现在CP2102来实现RS232USB之间的转换。Silicon
18、Laboratories公司推出的USB接口与RS232接口转换器CP2102CP2103是一款高度集成的USB-UART桥接器,提供一个使用最小化元件和PCB空间来实现RS232转换USB的简便解决方案。CP2102CP2103包含了一个USB功能控制器、USB收发器、振荡器和带有全部调制解调器控制信号的异步串行数据总线(UART)。CP2102CP2103作为USBRS232双向转换器,一方面可以从主机接收USB数据并将其转换为RS232信息流格式发送给外设;另一方面可从RS232外设接收数据转换为USB数据格式传送至主机,其中包括控制和握手信号。图2.7是CP2102与USB接口图,该芯
19、片可以从USB接口处获取电源。R,T分别接单片机的TXD(发射端)和RXD(接收端)。图2.7 CP2102与USB接口2.5 DS1302简介DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图2.8所
20、示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中12。图2.8 DS1302电路连接图2.6 微控制器模块2.6.1 STC12系列单片机简介宏晶STC12C5410AD单片机是新一代单片机,它主要特点是高速,高可靠,宽电压,低功耗,超强抗干扰,无法解密11。该单片机有以下性能:1) 高速:1个时钟周期/机器时间,增强8051内核,速度比普通51单片快812倍。2) 宽电压:5.5V3.5V,2.2V3.8V(STC12LE5410AD系列)。3) 低功耗设计:空闲模式,掉电模式(可由外部中断唤醒)。4) 工
21、作频率:035MHz,相当于普通8051:0420MHz。5) 12K/10K/8K/6K/4K/2K字节片内的程序Flash存储器,可以擦写10万次以上 6) 512字节片内数据存储器 ,内部集成了2K字节的数据Flash存储器(EEPROM)。7) ISP/IAP,在系统可编程/在应用可编程,无需编程器和仿真器。8) 10位ADC,8通道STC12C2052AD为8位ADC,4路PWM可选,4通道捕获/比较功能(PWM/PCA/CCU)-可用来再实现4个定时器或四个外部中断(支持上升沿/下降沿中断)9) 6个16位定时器,包括T0、T1,PCA也是4个定时器。10) 硬件看门狗(WTD),
22、高速SPI通讯接口,全双工异步串行口通讯(UART)兼容普通8051串口。11) 通用I/O口,可以设置为4种工作模式,有准双向口/弱上拉,仅为输入/高阻,开漏,推挽/强上拉。每个I/O口驱动能力均可达20mA,但整个芯片最大不得超过55mA.选择STC12C5410AD单片机为主控器件,单片机的片上资源能满足系统的功能要求,减少了外围器件,加强了系统的抗干扰能力,提高系统稳定性,降低了开发成本和开发难度。2.6.2 单片机系统电路设计1) MMA7260Q与单片机的接口。单片机STC12C5410AD的P1为通用数字I/O与12位AD转换器模拟输入通道复用端口。本文中使用MSP430F161
23、2的P1.0/ADC0、P1.1/ADC1、P1.2/ADC2作为模拟输入通道,分别与加速度传感器MMA7260Q三轴向模拟信号输出XOUT、YOUT、ZOUT连接,实现加速度信号的采集;。MMA7260Q与STC12C5410AD接口电路如图2.9所示。图2.9 MMA7260Q与MSP430接口示意图2) 74HC595与单片机接口单片机的 SPI由MISO(与P1.6共用)、MOSI(与P1.5共用)、SCLK(与P1.7)和/SS(与P1.4共用)4根信号线构成。由于只是选择主机模式故/SS信号线不用。74HC595与单片机接口电路如图2.10所示图2.10 74HC595与单片机接口
24、2.7 其他电路设计2.7.1键盘电路设计系统涉及到压力的上下限报警值的设定,时间的设定,由于没有过多的键,考虑到单片机的I/O口,所以用独立式键盘来实现,如图2.11所示。 接收按键信号的时候,会出现前沿和后沿抖动, 采用用软件延时的办法消除抖动13。图2.11 键盘电路设计2.7.2声光报警电路设计报警功能主要是角度超过设定的上线报警值或低于设定的下线报警值时候会发出报警信号,系统采用较为常用的方案设计声光报警。声音报警用蜂鸣器来实现,光报警采用高亮度红光LED来实现。报警声音可以有高低报警,LED闪烁报警14。原理图如图2.12所示。 图2.12声光报警电路设计第三章 软件设计软件采用K
25、eil uVision3作为下位机系统的开发平台。3.1数据处理3.1.1 角度数据采集设计 MMA7260Q输出为模拟信号,采集过程需进行AD转换。 STC12C5410AD单片机集成有8路高速模数转换器(ADC)。,它是一种逐次比较型模数转换器,速度可达到100KHz(10万次/秒),10位的转换精度,ADC输入通道与P1口复用,上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D 使用的口可继续作为I/O口使用。A/D采样率的选择不能干扰加速度计采样频率(11kHz) ,以防混叠误差。AD转换频率: 11.0592MHZ/210=52
26、khz 52khz/2=26khzA/D转换结果计算公式如下: (ADC_DATA7:0,ADC_LOW21:0)= 1024Vin/Vcc其中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。数据采集子程序流程图如图3.1所示。图3.1数据采集子程序流程图3.1.2 数字滤波及工程变换部分 采样结束后进行数字滤波,数字滤波有多种方式,由于角度变化,可慢可快,所以为了适应快速变化的角度的测量,相比之下,采用了均值滤波,由于它实现简单,占用单片机的资源较少,是一种比较好的选择。其滤波效果与所选择的采样次数有关,次数越大,效果越好,但花费时间越长15。-
27、滤波程序- float filter(void)/AD滤波 平均值滤波 float sum=0; float ad_data; char count; for(count=0;countN;count+) sum+=Get_data(); return (sum/N); 将滤波后的结果带入公式: 800 (3.1)就可以得到角度值。以下为程序代码:int ChengeADtoAngle(float m1) /m1为数字量 float q2,q1; q1=(m1/1023)*4335; /q1为得到的电压值 4335为实际单片机的电压值q2=(q1-1650)/800); /分子分母同时扩大10
28、00倍 return(572.96*asin(q2); / 将角度 扩大10倍3.2数据存储部分为了观察角度的变化及对角度的历史数据经行分析,需要将该数据与出现该数据的时间同时记录。这种记录对数据的分析及对异常数据出现的原因的查找具有重要意义若采用单片机计时,一方面占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机资源。DS1302时钟芯片可以用于时间记录,很好地解决了这个问题。STC12C5410AD单片机内部集成了2K字节的数据Flash存储器(EEPROM),地址范围是2800H2FFFH。这2K字节的数据Flash存储器分为4个扇区,每个扇区包含512字节。数据Flash擦除只
29、有扇区擦除,没有字节擦除。对于数据Flash存储器的操作有三个基本命令,分别是字节读、字节编程和扇区擦除。进行字节编程时,只能将“1”改为“0”,或“1”保持为“1”,“0”保持为“0”。考虑到数据Flash只有扇区擦除,所以将数据按扇区存储,不按字节数存储。 角度数据分为整数和小数部分存储,这是由于用UART传输方便而定的。角度数据再加上时间标签共9个字节。称之为一个数据块。每个扇区可存储56个数据块。考虑到数据存储空间有限,于是采取的这样的存储方法:采样的角度值与上一次的角度值比较,如果相差不大的话,则舍弃本次角度值,如果相差很大,则经进行存储,程序流程图如图3.2所示。图3.2 数据存储
30、子程序部分子程序/-扇区擦除功能-void sector_erase(unsigned int addr) /送地址 ISP_CONTR = 0x83; /系统工作时钟8;/-地址右移八位取高地址 ISP_ADDRL = addr&0x00ff; EA=0; /以免中断打断 ISP_TRIG = 0x46; ISP_TRIG = 0xb9; EA=1; iap_disable();/-字节编程-void byte_program(unsigned int addr, char dat) /送地址addr 和数据 dat ISP_CONTR = 0x83; ISP_CMD = 0x02; /2为
31、字节编程 ISP_ADDRH = addr8; ISP_ADDRL = addr&0x00ff; ISP_DATA = dat; EA=0; ISP_TRIG = 0x46; ISP_TRIG = 0xb9; EA=1; iap_disable();/-字节读功能-unsigned char byte_read(unsigned int addr)/送地址 unsigned char dat; ISP_CONTR = 0x83; ISP_CMD = 0x01;/1为字节读功能 ISP_ADDRH = addr8; ISP_ADDRL = addr&0x00ff; EA=0; ISP_TRIG
32、= 0x46; ISP_TRIG = 0xb9; dat= ISP_DATA; EA=1; iap_disable(); return(dat);3.3 DS1302软件设计DS1302是SPI总线驱动方式。它要向寄存器写入控制字,还需要读取相应寄存器的数据。1) DS1302的控制字节表 4.1 DS1302的控制字1RAMA4A3A2A1A0RD/CK/WR DS1302 的控制字如图所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中。位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0
33、表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。2) 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。3) DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表2。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。表4.2 DS1302的控制字和各寄
34、存器名称命令字取值范围写操作读操作 秒寄存器80H81H00-99 分寄存器82H83H00-99 时寄存器84H85H112或00-23 日寄存器86H87H0128,29 月寄存器88H89H01-12 周寄存器8AH8BH01-07 年寄存器8CH8DH00-99开始变量初始化使DS1302不具有写保护复位产生1个高电平写DS1302地址延时一段时间向该地址写数据复位产生1个高电平数据写完?写DS1302地址延时一段时间读该地址写数据数据读完?显示数据 图3.3 DS1302实时时钟流程图部分程序:/-Ds1302-void DS1302InputByte(unsigned char d
35、) /实时时钟写入一字节(内部函数) unsigned char i; ACC = d; for(i=8; i0; i-) DS1302_IO = ACC0; DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC 1; unsigned char DS1302OutputByte(void) /实时时钟读取一字节(内部函数) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; return(ACC); void Write1
36、302(unsigned char ucAddr, unsigned char ucDa)/ucAddr: DS1302地址, ucData: 要写的数据 DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 写1Byte数据 DS1302_CLK = 1; DS1302_RST = 0;unsigned char Read1302(unsigned char ucAddr)/读取DS1302某地址的数据 unsigned char uc
37、Data; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 ucData = DS1302OutputByte(); / 读1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData);3.4键盘功能设置 在软件的编写上,可以采用软件查询方式对按键进行识别16。读键子程序如图3.4所示。键值功能设计:系统默认显示的是当前时间和当前角度值,当第一次按下S1时,显示切换到角度上下限的显示,第二次按下调节角度下限的小数位,第三次按下调节角度
38、下限的个位,依次按下,依次调节各位。S2作为调节角度上下限时的加一及角度正负号的切换用。S3作为调节角度上下限时的减一及角度正负号的切换用。S4作为调节完毕后返回当前时间和当前角度值显示之用。键盘功能程序代码请见附录。键盘识别程序代码如下。定时扫描有键按下?延时4ms有键按下?延时4ms读取键值开始图3.4读键子程序/-获取键值-void getkey(void)if(P00=0&key_last0=1) delay_flag=0; /delay_flag在定时器中4ms到置1 while(delay_flag=0); /延时4ms,去抖动if(P00=0&key_last0=1) key_n
39、um=0; key_last0=0; delay_flag=0; /去抖动 while(delay_flag=0); /延时4ms,去抖动 else if(P00=1) key_last0=1; else if(P00=1) key_last0=1;if(P01=0&key_last1=1) delay_flag=0; while(delay_flag=0); /去抖动if(P01=0&key_last1=1) key_num=1; key_last1=0; delay_flag=0; while(delay_flag=0); /延时4ms,去抖动 else if(P01=1) key_las
40、t1=1; else if(P01=1) key_last1=1;if(P02=0&key_last2=1) delay_flag=0; while(delay_flag=0); /延时4ms,去抖动if(P02=0&key_last2=1)key_num=2; key_last2=0;delay_flag=0; /去抖动 while(delay_flag=0); /延时4ms,去抖动 else if(P02=1) key_last2=1; else if(P02=1) key_last2=1;if(P03=0&key_last3=1) delay_flag=0; while(delay_fl
41、ag=0); /延时4ms,去抖动if(P03=0&key_last3=1) key_num=3; key_last3=0; delay_flag=0; while(delay_flag=0); /延时4ms,去抖动 /去抖动 else if(P03=1) key_last3=1; else if(P03=1) key_last3=1;3.5 通信部分上位机与单片机通信按应答方式经行。由上位机给单片机发送一组命令数据,单片机受到命令经过分析后认为正常,则按照命令执行操作。将操作结果返回给上位机。若经过分析认为不正常,则返回给上位机出错信息。单片机向上位机发送的数据的方式考虑了两种,第一种是等数据存储器容量存满了后在一块发,这种方式实时性不够,为了使角度数据的变化能够及时的传到上位机,采用定时发送,定时时间和上传的次数由上位机来定,这样一来就解决了实时性问题。由于是定时发送,通过对数据的分析知道上位机收到的数据可能有重复的,或者是有FF字样。这可由时间标签,加以区分,而FF为数据存储器中尚未写进的字节单元,通过上位机软件可以滤除。上位机用串口调试助手来进行数据发送,为了使数据直观,命令码全部使用BCD码,由单片机传来的数据也使