基于单片机的计步器设计_第1页
基于单片机的计步器设计_第2页
基于单片机的计步器设计_第3页
基于单片机的计步器设计_第4页
基于单片机的计步器设计_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 摘 要计步器是一种颇受欢迎的日常锻炼进度监控器,可以激励人们挑战自己,增强体质,帮助瘦身。早期设计利用加重的机械开关检测步伐,并带有一个简单的计数器。晃动这些装置时,可以听到有一个金属球来回滑动,或者一个摆锤左右摆动敲击挡块。计步器功能可以根据计算人的运动情况来分析人体的健康状况。而人的运动情况可以通过很多特性来进行分析。与传统的机械式传感器不同,ADXL345是电容式三轴传感器,由它捕获人体运动时加速度信号,更加准确。信号通过低通滤波器滤波,由单片机内置AD转换器对信号进行采样、AD转换。软件采用自适应算法实现计步功能,减少误计数,更加精确。单片机STC89C52控制液晶显示计步状态。整机

2、工作电流只有1-1.5mA,实现超低功耗关键字:计步器 单片机 低功耗1绪论1.1论文研究的背景、目的及意义在这个快速发展的时代中,随着消费水平的增加,除了物质方面的追求,人们也更加关注自己的身体健康,希望自己拥有一个健康的体魄。这时,计步器的出现就是为了解决人们困扰许久的问题。计步器最初是由伦纳德*达芬奇构想的,计步器的作用,顾名思义计步,通过人们不停地行走,计步器也就不停地记录。在此基础上,可以给计步器再添加更丰富的功能,比如通过计数来估算消耗多少了脂肪,还可以在移动设备上创建APP,相熟的使用者之间还能实时更新,进行排名,更刺激人们想要获胜的胜负欲而坚持运动,百利而无一害。最早的计步器原

3、理很简单,远不如现在使用的计步器复杂,通过重力感应传感器(机械摆锤),通过摆锤的撞击,激发触发开关,通过开关量的变化有单片机记录数值,最后通过LCD显示。电子计步器就是由一个传感器和计数器构成。因为在运动时,人的身体的手臂、腰部、膝盖处等都会有相应的剧烈反应,例如运动时,手臂会有相应摇摆的动作,膝盖也会有向前向后的反映,但在这些反映中,腰部的运动是最明显的,所以建议安装计步器时,安装在腰部最为合适。本设计的计步器想利用加速度计的原理来计步,其根本原理就是通过加速度传感器,通过加速度传感器中的霍尔传感器,由电磁感应原理获得加速度信息,并通过单片机判断,最终记录并显示出来。 1.2设计研究内容通过

4、一系列的查询,找资料,咨询。最后进行比较,本设计决定使用低功耗、高精度、体积也较小的三轴加速度传感器ADXL345作为本设计的传感器,STC89C52单片机作为微控制器,及LCD1602液晶显示屏作为输出数据的显示屏。当然,在有能力的情况下,可以试做实物并编写符合要求的程序,进行最终调试。体选择方案见第二章。2方案设计及选择2.1设计要求(1)保证计步器的有效性(2)能有效检测人体行走运动(3)可以显示和记录单位时间内的步数(4)使用MCU处理数据2.2传感器的选择方案一:选择压力传感器压力传感器就是利用压电效应为原理的。可以将传感器放在鞋的底部,但一般放置鞋底的都是柔性的,通过抬脚放脚的动作

5、,电压的有无来判断运动是否发生。再将采集到的电信号输送给单片机。但性价比不高,设计困难,不建议采用到本设计中。 方案二:水银开关(倾侧开关)传感器人体运动会导致倾斜,水银水珠会因为重力原因偏向一侧,高灵敏的震动传感器运用水银开关来检测周围的震动强度。所以当人运动就会震动,然后传感器就会被震动,又因为采用水银开关且对检测外界震动很灵敏,所以当超过震动的临界值时,就输出低电平,反之没超过就输出高电平,然后用单片机来检测。此传感器通过检测水银开关的通断与否,来判断加速度的方向并且由于直接该开关量输出方便,机械性能简单等等优点,普遍用于要求不高的场合,但由于其检测方向单一,可选检测方位较小,局限性较大

6、,故现代计步器并不采用。方案三:选择三轴加速度传感器三轴加速度传感器相对于其他传感器,体积更小,反应更快,十分符合设计要求。其采用电子原理设计,整体封装较小,适合体积要求较为严格的场所。其检测方向多样,可选方位较多,无单一局限性。顾名思义,加速度不是一个标量,它有具体的方向,也就证明了,在分析物体运动时,要测得空间三个方向才能确定具体数据。很适合放置于本设计的计步器中。为选择一款最适合本课题的计步传感器将三种传感器对比如表1类型压力传感器水银开关传感器三轴加速度传感器工作电流-80mA1.5mA工作精度精度高精度低精度高价格(元)45元0.5元10.5元 随着加速度传感器不断的发展和改进,它拥

7、有更多的性能,满足更多的使用需求。所以现在的三轴传感器性价比高,精度也高,功耗也越少,很符合该课题的设计理念。故选择加速速度传感器。三轴加速度传感器中选择方案一:BMA250传感器 Bosch Sensortec的BMA250是一款先进的数字输出的低功耗(139uA)超小,数字式三轴加速度传感。它是2mmX2mm的小型封装和数字接口,支持两种操作模式:流数据模式和中断发动机模式,特别能使用在手机、计算机外设、电子罗盘、人机界面、虚拟现实的特性和游戏控制器。还具有从2g16g四个可编程的测量范围,具有较高的精度,其十位的数据可提供最高精度4mg。方案二:MMA8452Q传感器有一款12bit分辨

8、率,功耗较低,还是电容式微机械的数字式三轴加速度传感器MMA8452Q传感器。MMA8452Q具有低功耗,高分辨率,通过LINUX的嵌入式开发可以自由分配服务选项,可以配置两个中断引脚。它不仅仅能让用户自己选择2g/4g/8g的量程,还有丰富的嵌入式功能1。它输出数据有高通滤波数据和非滤波数据。它的低功耗特点表现在当处于静止状态时能自动调节到低功耗模式,并一直持续到新模式的运行。主要用于日常电子设备检测冲击和振动等场合中。方案三:ADXL345传感器ADXL345三轴加速度传感器是美国ADI公司在08年推出的具有MEMS技术的三轴传感器,还具有SPI和IC数字输出的特点。具有可变量程、高分辨率

9、、功耗超低,小巧而纤薄的优点。它提供一些特殊的运动侦查功能,可探测出是否处于状态,在移动设备中得到广泛的运用,很符合本设计的要求。此外还集成了一个32级FIFO缓冲器,主要可用来储存数据,从而就能使主处理器的负担降到最小。为选择一款最适合本课题的加速度传感器对比如表2加速度计代表型号BMA250MMA8452QADXL345超低功耗典型值139 A6uA165uAVs = 2.5V低至23uA封装2mmX2mm小型封装14.5mmX20.5mm3mm5mm1mm,LGA封装价格(元)3.5元22元5元 结合上述表格的内容和性价比的考虑,和许多其他方面的考虑,故本课题选择三轴加速度计ADXL34

10、5传感器。2.3 计步器微控制器的选择单片机是由I/O口、RAM、ROM、定时器集成在一起的芯片。方案一:采用32位微控制器采用STM32单片机作为主控器。STM32单片机有如下特点:(1)拥有ARM最新的Cortex-M3内核,只需6个的clk的调整时间。(2)只需7个滤波电容就能构成最小系统。(3)RAM可以通过位绑定技术按位来访问。(4)装备了可编程的掉电监测器。(5)有带电池供电的数据备份寄存器。(6)2个12位的AD拥有高达1M的采样速率。(7)GPIO的刷新速率可以自行设定。(8)可检测PWM脉宽和频率(硬件直接支持)。(9)集成霍尔接口和电机控制。(10)SPI带硬件的CRC校验

11、能达到18Mb/s的通讯速度。 方案二:采用16位微控制器HCS12微控制器,以其处理快、耗能小、功能强、价格低等特点在工业上大量使用。Freescale在设计的时候引入了新的片上调试技术-BDM,为了寻址更大的空间,设计了页寄存器,包括RPAGE/PPAGE/GPAGE/EPAGE等等,在整个程序执行上时序会稍慢一点。不过HCS12在汽车电子领域应用比较广泛。方案三:采用8位微控制器STC公司推出了一款低功耗且高性能的COMS 8位微控制器。STC89C52单片机不仅拥有8051单片机的功能,还在此基础上开发了51单片机没有的功能带有8k字节系统可编程Flash存储器。操作容易,初学者很容易

12、上手,适用于简单的嵌入式控制系统中。综合上述几种MCU优点和缺点并且根据本设计要求的考虑,慎重地选择8位微控制器STC89C52单片机作为本设计的单片机。2.4计步器显示器的选择方案一:CRT(阴极射线管)显示器CRT显示器的组成部分是由电子枪第一控制栅极,第二控制栅极,垂直偏转板,水平偏转板,磷光显示屏等组成。它的工作原理是:通过电子枪发射正电子,经过第一控制栅极,第二控制栅极,经过垂直偏转板和水平偏转板,改变电子的运动方向,轰击屏幕,多次扫描后,将会在显示屏上显示图案。CRT显示屏成本高,而且画质不清晰。当场频过低时,人烟会感觉屏幕有明显的闪烁,图像稳定性差,容易造成眼睛疲劳。方案二:LC

13、D(液晶)显示器LCD是通过电光效应来对外界光线进行调制。它的制作是在两个极化的材料上加上水晶溶液。水晶重新组成是在有电流时,目的让他们穿透不了。现在市场的LCD液晶屏种类很多,我们按照自己的设计方案进行选择。综合上述两种显示器的讨论,发现CRT显示器成本较高、会有一定的辐射、长时间使用会造成眼睛的疲劳等缺点,最终决定选取LCD显示器作为本设计的显示器。2.5系统的总体设计现在本设计的硬件设施都通过比较决策出来了,分别是ADXL345三轴加速度传感器作为传感器采集器、STC89C52微控制器作为设计的主控单片机、LCD1602作为输出步数的显示器。详细的系统方案如图一显示。 加速度传感器ADX

14、L345传感器采集器微处理器STC89C52MCU 液晶显示屏LCD1602数据显示 图2.1系统整体方框图3计步器系统的硬件设计 图3.1总体电路图(详细见附录一)3.1计步器最小系统模块STC公司推出了一款低功耗且高性能的COMS 8位微控制器。STC89C52单片机不仅拥有8051单片机的功能,还在此基础上开发了51单片机没有的功能带有8k字节系统可编程Flash存储器等。它拥有全双工串行口操作简单,容易理解,适用于简单、低功耗的嵌入式控制系统中。本设计是以STC89C52微处理器为主,外接一个手动复位电路和一个12M的晶振,接上VCC和地组成一个最小系统模块。如图3所示 图3.2 最小

15、系统模块3.2计步器传感器采集模块 三轴传感器ADXL345其内部结构如图4所显示:加速度变化都是由G-Cell传感器感知,再通过内部处理后再以电压信号输出。(经过容压变换、放大增益后的变化值再经过滤波器的滤波等) 图3.3 ADXL345传感器的内部功能框图ADXL345三轴传感器内部的G-C理想物理的结构可以看成是由三块电容极板组成,如图5所示。当有加速度变化的产生,内置的传感器就能检测到,并通过极板与极板之间的距离变化影响电容值的变化。 图3.4 内置传感器物理模型加速度ADXL345传感器的功能框图如图6,当它安装到腰部上后,这三个方向上的数据也就随之确定下了。 图3.5 ADXL34

16、5的功能框图ADXL345三轴传感器的引脚配置(顶视图): 图3.6 ADXL345三轴传感器的引脚功能图 如图3.7,显示的是ADXL345三轴加速度传感器底座,各个管脚的名称如图: 图3.7 传感器连接模块这个传感器模块就是一个转换接口模块,原理就是靠其内部产生电容值的变化运行,类似于整个系统的信号采集模块。3.3计步器显示器模块最近两年,LCD显示器的人气急剧上升。LCD显示器可以通过背面的可调电阻,通过改变可调电阻的阻值改变LCD显示器的显示清晰度。LCD1602显示器又是工业字符型液晶显示器,有背光和不带背光两种,能够同时显示16X02(16列2行)即32个字符,它可以专门用来显示字

17、母、数字、符号等点阵型液晶模块,功能十分强大。LCD1602采用标准的16脚接口,如图9显示: 图3.8 LCD1602 管脚分配 详细管脚信息见图3.9 图3.9 管脚名称LCD1602模块内部的11条指令如下图3.10所示 图3.10 内部模块的11条指令LCD1602的第7-14脚为8位双向数据通信端口,有两层显示,还自带字符库,有的字符只需要直接调用即可。而且LCD1602显示器内含复位电路,LCD1602有两层显示,还自带字符库,有的字符只需要直接调用即可。它微功耗,常用在袖珍仪表和低功耗应用系统中。 3.4计步器按键模块按键分为独立按键和矩阵按键,矩阵按键设计复杂,独立键盘每一个按

18、键都需要连接MCU的一个输入输出端口,本设计通过嵌入式开发优化了过多的按键,因此采用独立式按键。 如图12,2条输入线接到MCU的IO口上,当按键S2按下时,电流通过一个10K电阻然后再通过按键S2最终进入电源负极形成一条通路,那么这条线路的电压全都加到了10K电阻上,这个引脚就是低电平。松开按键后,线路断路,没有电流通过,节点和电源正极就应该是等电位点,这个等电位点是一个高电平。我们观察这个I/O口的高低电平来判断按键S2是否按下。 图3.11 按键电路4计步器软件设计4.1计步器软件流程图(1) 主程序流程初始化预采样显示步数自适应阀值开始按键按下判断阀值是否有效算法计算Y显示输出步数计数

19、 YCount%50=0清零按键按下N结束继续计数 图4.1流程图自适应的方法通过软件来完成,因为每个人的情况都不同,加速度传感器最大值的输出、动态的临界值和动态精度称为动态参数。想要消除高频的噪声,则动态精度参数起到决定性作用;判断一步生成就必须使动态临界值满足相应的条件。旧数据动态阈值新数据。于是在进入测试后应第一个就进行预采样,然后进行自适应,最后获得动态临界值。通过软件设置50步做为一个单元,因为人不在同一个时间,同一个状态,所以都不同,重新记录一次临界值。误计数是指在不同的时间里的临界值,打个比方,如果计步器还在工作,但是人已经不在运动了,在这个时候把前面和后面的临界值做比较,如果没

20、有超过规定的范围,那么则表示是有效的临界值,那么就会防止计数出现错误,提高了计数的精确度,从而达到高精度的设计要求。4.2计步器算法的实现 “加速度最大变化”是用来分析散步或跑步的重要参数。左右、前后、上下是人的三个分量,如图14所示,ADXL345三轴传感器用来检测三维轴上的加速度。如果运动轴测量的精度和加速度计测量轴的精度之间的关系使计步器显示未知的方向,那么该测量精度不可靠。 图4.2 人体运动时感测到的分量 我们探讨一下步行的特点。我们定义一步伐作为一个单元的行走周期,并有一定的关系,每一个阶段的步行周期和垂直和向前加速。 为了实现检测的步数,人体行走了解姿态可以检测行走的步数。走路的

21、时候,会产生脚加速度、腿加速度、腰加速度、手臂加速度并且会在一个点有一个最高值。最准确的检测加速度是检测脚加速度,但是我们往往选择检测腰部,因为携带方便。图15显示的是跑步者的一个上下,前后和左右加速度对应的三个轴经典的测量结果。把计步器安装好,不管在什么情况下,加速度的变换结果至少会在三维轴其中的一轴中产生,所以检测运动的周期取决于最大值检测和XYZ轴加速度动态临界值的算法。 图4.3 跑步者测得的三轴加速度图样(1)步伐参数数字滤波器能够使信号的波形变得更加的平滑,所以该计步器就必须要使用它,它的组成有一个求和单元,还包括四个寄存器。如图16所示,但是要想实现信号的越来越平滑,则必须加很多

22、寄存器,不过会使响应速度越来越慢,因此本设计不用该思路。 图4.4数字滤波器下图说明人使用计步器滤波数据中变化最大的数据。如果跑步,则最大值会更大。 图4.5 变化最大轴的滤波数据 X、Y、Z轴加速度的连续刷新值的最大和最小就是动态临界值含义和动态精度的含义,50次的数据采集设为一个周期。(最大值+最小值)/2为“动态临界值”。运动与否是通过临界值来判断的。50次数据采集为一个周期,故它是动态的,响应速度也极快。除动态阈值外,还可以利用动态精度再来执行进一步滤波。在运动时,三维轴中变化最大的加速度称为峰值检测。计步器将加速度忽略的可能性只有在加速度变化很小的情况下。用户在使用ADXL345传感

23、器时,要注意输出数据速率可以更方便实现用户使用的目的。如图18,要想配置数据速率那么就要把25度赋值TA,2.5伏赋值给VS,1.8伏赋值给VDD I/O。 图4.6 可配置数据速率 20ms的数据速率是该算法的核心,记录行走两步更新数据的次数使用interval寄存器来纪录的。两步相差的时间有效范围在10到100,其他的都是无效的数据。(2)距离参数根据上述算法计算步伐参数之后,我们可以使用公式获得距离参数 正常情况下,当用户的跑步的速度很快或者体形比较高大时,那么每一步的长度就会相对速度慢者或矮小者比较长些。在设计中以两秒更新一次数据,数据包括距离,包括速度,还包括消耗的卡路里。综上所述,

24、我们可以以两秒的计数方法得到现在跨步的准确距离。如图19的实现数据就是当前的跨步距离。 图4.7跨步长度与速度以及身高的关系 能精确得到的时间间隔是两秒。当cpu以100次的采样只发送一次的命令时,它是以50Hz的数据速率。开始两秒间隔的步数是由一个变量叫作“最后一个计步器”来记录的,结束两秒间隔步数是由一个变量叫作“计步器价值”来记录的,他们的差为两步数。该传感器里一个缓存器不需要进行每20ms为一个单位读取数据,即使是数据速率设置成50赫兹,这样就会大大的减轻cpu的负担。如果人最快五步一秒,那么只需要0.2秒更新一次数据,这样能保证结果会被显示器实时显示,那么我们只需要设置0.2秒中断c

25、pu,然后再从传感器中读取相应的数据。 该缓存器中的触发模式存储在cpu中断前面的所有信息,给用户带来了极大的方便性。 (3)速度参数因为公式,并每2秒步数和跨步长度均可根据上述算法计算,因此可以使用公式获得速度参数。 (4)消耗的卡路里参数人身体内卡路里的消耗的速率我们计算不出,但是我们可以通过一些关键因素来对我们身体内卡路里消耗进行估算,它与运动速度有如下关系 以上所用的速度参数单位设为m/s,需将km/h转换为m/s可得公式。 更新一次两秒是卡路里的参数,它与距离和速度相关。把公式 变成公式是对用户的体重的考虑。用户的重量是一个输入量,那么一小时就是:两秒间隔乘以1800。 如果卡路里不

26、消耗,那么就表明用户在运动后休息,则他们的速度等于0,距离不变化且步数也不变化。那么就可以用公式来进行计算(1C/kg/h为正在休息所消耗的卡路里。 卡路里消耗的总量等于两秒间隔所消耗的卡路里所有量之和。(3)详细软件程序见附录二5计步器测试及分析5.1计步器系统调试及功能 设计的计步器最起码要能实现计步的功能,不仅仅要记录短时间内的步数,还能记录总步数,能实现基本功能即可。5.2计步器系统的测试如图20为记录在实际步数中显示5步数以及总步数不置0情况下。下图21是记录以5步为周期的复位实际步数且总步数不清0的情况。通过对比可以发现,实际的实物记录的总步数误差率不超过10%左右,总体设计是可行

27、的。 图5.1 图5.2 . 结束语经过了这段时间的努力,计步器初步设计方案已经有了头绪了。在自己的摸索、收集材料和老师的指导下,本次设计的计步器能够实现简单计步和显示运动总步数的功能。在选择传感器分类时,曾在ADXL345加速度传感器上费时较多,也就对此类型传感器有了更多的了解。ADXL345加速度传感器是由美国ADI公司研发的,此外,和它同系类的加速度传感器还有ADXL335加速度传感器和ADXL346加速度传感器,它们都有低功耗、小巧纤薄的优点,当时在选择的时候还一度陷入了纠结,都是很优秀的传感器。ADXL345三轴加速度传感器是ADXL335加速度传感器的升级版,可对16g的加速度进行

28、13bit的分辨率测量,输出形式以16位二进制补码输出。因为ADXL345传感器的特殊感测功能(倾斜的静态重力加速度和因为振动产生的动态加速度),所以特别适用与移动设备中。ADI公司的另两款三轴加速度传感器在其他应用场合也得到广泛的使用。例如ADXL335封装是4mmX4mmX1.45mmLFCSP,可以使用在对成本极其敏感或模拟输出加速度、游戏系统、图像稳定的场合。ADXL346加速度传感器封装是3mmX3mmX0.95mm超薄塑料封装,比ADXL345加速度传感器高级些,它的内置功能也比ADXL345的多,适用于对PCB尺要求较高、医疗仪器、个人导航设备、工业仪器仪表等场合。致 谢时光荏苒

29、,大学三年已经接近了尾声,不知道心里在这时是什么滋味,留不住的是永远是时间,有过遗憾,有过惊喜,有过逃避,有过勇敢。学校让我们储备许多无形的财富。毕业设计是我们结束三年学业的最后一项作业,也是最后一次检测,把它放在最后完成,就可以看得出它的重要性,它既是对我们在校三年学习的一次全面性检查与综合运用,同时也为我们今后步入社会打好基础。不管以后会从事什么样的工作,也不会忘记从这次锻炼里收获到的宝贵经验。刚开始着手做毕业设计的时候,由于缺乏经验,真的是困难重重,没有头绪,都不知道要从哪里着手,还好有老师的帮助和指导,不厌其烦的给我们开会分析讲解如何选择合适的课题,如何做好毕业设计,给我们分析在以后做

30、论文的时候会遇到什么样的问题,都由什么样的困难。是老师的悉心指导使我对自己的课题有了更加清晰透彻的了解,才能更快更准确的完成这篇论文。这次的毕业论文,我前前后后大概用了4个多月的时间,在整个过程中,我通过查看大量的相关资料,整理文档,多与同学们交流经验、相互帮忙,并多向老师请教等方式,让自己掌握了不少的知识和相关技能,虽然这个过程比较艰辛,但不管怎么样,我坚持了下来收获也是巨大的。不仅培养和提高了我独立分析解决问题的能力,也增长了我对自己以后工作能力的信心,最主要的手大大的提高了自己的动手能力,考虑问题也能够更加全面、严谨,相信在一定程度上培养了严谨细致的工作作风,这个过程使我深深的体会到了成

31、功前的艰难和成功后的喜悦。希望在以后工作中,自己也能凭借这这次的经验解决其他的问题。最后还是郑重感谢在学习期间给了我极大关心和支持的各位老师以及关心帮助我的朋友和同学。参考文献1 曹赟,周宇,徐寅林. 加速度传感器在步态信号采集系统中的应用J. 信息化研究,2009,35(9).2 钱朋安,葛运建,唐毅等. 加速度计在人体运动检测中的应用J.计算机技术与应用进展,2004:632-636.3 陈义华.基于加速度传感器的定位系统研究D.福建:厦门大学,20064 孟维国.三轴加速度计ADXL345的特点及其应用J. 电子设计工程,2007(2):47-505 贾朱红,张晓冬. 基于IC总线的单主

32、多从MCU之间的通信J.微计算机信息,2009,25(3-2):101.6 高吉祥. 模拟电子线路设计M. 北京:北京电子工业出版社,20077 陈尔绍. 电子控制电路实力M. 北京:电子工业出版社,2004.8 王彦朋. 大学生电子设计与应用M. 北京:中国电力出版社,2007.9 屈翠香,李刚.具有数字信号输出的三轴加速度传感器ADXLL345J.国外电子元器件,1999(8):8-12.10 彭勃,何晓平, 苏伟. 微机械静电伺服加速度计J.中国惯性技术学报,2000,8(1):63-66.11 刘宗林,李圣怡,吴学忠.新型三周加速度计J.传感及技术学报,2004,17(3):488-4

33、92.12 周华,沈连官,尤辉,等.电容式微加速度计结构的建模与仿真J.光学精密工程,1999,7(4):59-64. 13 段晓敏,李杰,刘文怡等.基于MEMS加速度计的数字倾角测量仪的设计J.电子设计工程,2009,17(8):71-72.14 Elliott D. GPS原理与应用.寇艳红译M. 北京:电子工业出版社,2007(7):347-348.15 AnMog Devices,Inc .Three-axis,2/4/8/16g digital accelerometer ADXL345 datasheetEBOL.(2008)2009-11-20.16 Christopher J.

34、Fisher, Tomoaki Tsuzuki,et al. Utilization of the first out (FIFO)buffer in analog reviees,he. Digital aceelerometers ISB/OL.(2009)2009-1 1-20.17 Lee L L,Tasy C L,Harada K Novel Zero Ripple DC Current Transformer DsignJ.IEEE Trans Magn,1999,35(5):3514-3516.18 Won-Ju Yoon, Sang-Hwa Chung,Seong-Joon L

35、ee.Implcmentation and performance evaluation of an active RFID system for fast tag collectionJ. Computer Communication,2008,31(I7):4107-4116.19 Gracfa A. Moron C. Biaxial Magnetometer SensorJ.IEEE Trans. Magrl 2002,38(5):3312-3314.20 李兴昌.科技论文的规范表达M.北京:清华大学出版社,1995.34-50.附录一 总设计图 附录二 元件清单元件序号元件名称元件型号

36、元件个数1单片机STC89C5212传感器模块ADXL34513显示屏LCD160214按键35晶振12M16电容37电阻58导线若干附录三 软件程序/*/ GY-29 ADXL345 IIC测试程序/ 使用MCUSTC89C51 / 晶振:11.0592M/ 显示:LCD1602/ 编译环境 Keil uVision2/ 参考宏晶网站24c04通信程序/ 时间:2011年3月1日/ QQ:531389319/*#include #include /Keil library #include /Keil library #include #define uchar unsigned char#

37、define uint unsigned int #define DataPort P3 /LCD1602数据端口sbit SCL=P10; /IIC时钟引脚定义sbit SDA=P11; /IIC数据引脚定义sbit LCM_RS=P22; /LCD1602命令端口 sbit LCM_RW=P23; /LCD1602命令端口 sbit LCM_EN=P24; /LCD1602命令端口 sbit key=P12;#define SlaveAddress 0xA6 /定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改 /ALT ADDRESS引脚接地时地址为0xA6,接电

38、源时地址为0x3Atypedef unsigned char BYTE;typedef unsigned short WORD;BYTE BUF8; /接收数据缓存区 uchar ge,shi,bai,qian,wan; /显示变量uchar ge1,shi1,bai1,qian1,wan1; /显示变量int jishu=0;int dis_data; /变量int data_xyz3;void delay(unsigned int k);void InitLcd(); /初始化lcd1602void Init_ADXL345(void); /初始化ADXL345void WriteData

39、LCM(uchar dataW);void WriteCommandLCM(uchar CMD,uchar Attribc);void DisplayOneChar(uchar X,uchar Y,uchar DData);void conversion(uint temp_data);void Single_Write_ADXL345(uchar REG_Address,uchar REG_data); /单个写入数据uchar Single_Read_ADXL345(uchar REG_Address); /单个读取内部寄存器数据void Multiple_Read_ADXL345();

40、/连续的读取内部寄存器数据/-void Delay5us();void Delay5ms();void ADXL345_Start();void ADXL345_Stop();void ADXL345_SendACK(bit ack);bit ADXL345_RecvACK();void ADXL345_SendByte(BYTE dat);BYTE ADXL345_RecvByte();void ADXL345_ReadPage();void ADXL345_WritePage();/-/*void conversion(uint temp_data) wan=temp_data/10000

41、+0x30 ; temp_data=temp_data%10000; /取余运算 qian=temp_data/1000+0x30 ; temp_data=temp_data%1000; /取余运算 bai=temp_data/100+0x30 ; temp_data=temp_data%100; /取余运算 shi=temp_data/10+0x30 ; temp_data=temp_data%10; /取余运算 ge=temp_data+0x30; /*/void delay(unsigned int k) unsigned int i,j; for(i=0;ik;i+) for(j=0;

42、j121;j+) ; /*/void WaitForEnable(void) DataPort=0xff; LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();while(DataPort&0x80); LCM_EN=0; /*/void WriteCommandLCM(uchar CMD,uchar Attribc) if(Attribc)WaitForEnable(); LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_(); LCM_EN=1;_nop_();_nop_();LCM_EN=0; /*/

43、void WriteDataLCM(uchar dataW) WaitForEnable(); LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_(); LCM_EN=1;_nop_();_nop_();LCM_EN=0; /*/void InitLcd() WriteCommandLCM(0x38,1); WriteCommandLCM(0x08,1); WriteCommandLCM(0x01,1); WriteCommandLCM(0x06,1); WriteCommandLCM(0x0c,1); /*/void DisplayOneChar(u

44、char X,uchar Y,uchar DData) Y&=1; X&=15; if(Y)X|=0x40; X|=0x80; WriteCommandLCM(X,0); WriteDataLCM(DData); /*延时5微秒(STC90C52RC12M)不同的工作环境,需要调整此函数,注意时钟过快时需要修改当改用1T的MCU时,请调整此延时函数*/void Delay5us() _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();/*延时5毫秒(S

45、TC90C52RC12M)不同的工作环境,需要调整此函数当改用1T的MCU时,请调整此延时函数*/void Delay5ms() WORD n = 560; while (n-);/*起始信号*/void ADXL345_Start() SDA = 1; /拉高数据线 SCL = 1; /拉高时钟线 Delay5us(); /延时 SDA = 0; /产生下降沿 Delay5us(); /延时 SCL = 0; /拉低时钟线/*停止信号*/void ADXL345_Stop() SDA = 0; /拉低数据线 SCL = 1; /拉高时钟线 Delay5us(); /延时 SDA = 1; /

46、产生上升沿 Delay5us(); /延时/*发送应答信号入口参数:ack (0:ACK 1:NAK)*/void ADXL345_SendACK(bit ack) SDA = ack; /写应答信号 SCL = 1; /拉高时钟线 Delay5us(); /延时 SCL = 0; /拉低时钟线 Delay5us(); /延时/*接收应答信号*/bit ADXL345_RecvACK() SCL = 1; /拉高时钟线 Delay5us(); /延时 CY = SDA; /读应答信号 SCL = 0; /拉低时钟线 Delay5us(); /延时 return CY;/*向IIC总线发送一个字

47、节数据*/void ADXL345_SendByte(BYTE dat) BYTE i; for (i=0; i8; i+) /8位计数器 dat = 1; /移出数据的最高位 SDA = CY; /送数据口 SCL = 1; /拉高时钟线 Delay5us(); /延时 SCL = 0; /拉低时钟线 Delay5us(); /延时 ADXL345_RecvACK();/*从IIC总线接收一个字节数据*/BYTE ADXL345_RecvByte() BYTE i; BYTE dat = 0; SDA = 1; /使能内部上拉,准备读取数据, for (i=0; i8; i+) /8位计数器 dat = 1; SCL = 1; /拉高时钟线 Delay5us(); /延时 dat |= SDA; /读数据 SCL = 0; /拉低时钟线 Delay5us(); /延时 return dat;/*单字节写入*void Single_Write_ADXL345(uchar REG_Add

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论