版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息工程学院毕业设计论文50--摘要大规模集成电路的出现极大地促进了微型计算机的快速发展,使我们的生活发生了翻天覆地的变化。正如微型计算机的出现给现代科技的发展注入了新鲜的血液,单片机技术的发展也给工业测控领域带来了新的技术变革。现在,在各个技术领域,单片机都得到了广泛的应用。单片机拥有体积小、重量轻、抗干扰能力强、对环境要求不高、高性价比、开发较为容易,等诸多优点。它已走入千家万户,不论是洗衣机、电冰箱、空调、还是汽车都可以见到它的身影。所以,单片机技术的发展水平已经成为衡量一个国家工业发展水平的重要参考。陀螺转速测量仪是单片机的简单应用。它利用陀螺角速度传感器来采集物体转速的实时数据,并利用LED数码管作动态扫描从而显示实时转速。该陀螺转速测量仪具有测量精度高,抗干扰性强,适用范围广等多个优点,拥有广阔的市场应用前景。关键词:微型计算机;单片机;陀螺;转速仪AbstractLSIappearsgreatlypromotedtherapiddevelopmentofthemicrocomputer,sothatourlifehasundergoneenormouschanges.Astheemergenceofthemicrocomputertothedevelopmentofmodernscienceandtechnologyhasinjectedfreshblood,butalsotothedevelopmentofSCMtechnologyinthefieldofindustrialmeasurementandcontroltechnologyhasbroughtnewchanges.Now,invarioustechnicalfields,microcontrollershavebeenwidelyused.SCMhassmallsize,lightweight,anti-interferenceability,lessdemandingontheenvironment,highcost,relativelyeasytodevelop,andmanyotheradvantages.Ithasenteredeveryhousehold,whetherwashingmachines,refrigerators,airconditioners,orcarcanseeitsshadow.Therefore,thelevelofdevelopmentofSCMtechnologyhasbecomethemeasureofacountry'slevelofindustrialdevelopmentanimportantreference.GyroSpeedGaugeissimplemicrocontrollerapplications.Itusesgyroangularvelocitysensortocollectreal-timedataoftheobjectspeed,andmakeuseofdigitalLEDtodisplayreal-timedynamicscanningspeed.Thegyrospeedmeasurementinstrumenthasanumberofadvantagesofhighprecision,stronganti-interference,wideapplication,hasabroadmarket.Keywords:microcomputers;microcontroller;gyroscope;Tachometer目录1.绪论 -4-1.1课题研究的背景及意义 -4-1.2国内外的研究现状 -4-2.STC89C52单片机概述 -5-2.1STC89C52的基本知识 -5-2.1.1特性: -5-2.1.2基本参数 -6-2.1.3引脚排列和基本功能 -6-2.2单片机的应用 -8-3.传感器模块和显示模块 -9-3.1传感器模块 -9-3.2液晶显示模块 -11-4.整体设计 -13-4.1硬件部分设计 -13-4.1.1电源部分 -13-4.1.2复位电路 -13-4.1.3晶振电路 -14-4.2软件部分设计 -15-4.2.1定时器的初始化 -15-4.2.2中断允许控制 -16-4.2.3程序流程图 -17-5.系统调试 -18-5.1硬件调试 -18-5.2软件调试 -18-总结 -19-附录一:元器件清单 -20-附录二:硬件部分电路图 -21-附录三:软件程序 -22-1.绪论1.1课题研究的背景及意义随着微型计算机技术的发展和不断进步,利用单片机来设计的智能电子式转速表已经越来越适合市场的需求。要想提高转速测量的精度,我们必须使用数字测速的方法。不管在在日常的生活还是工程实践中我们往往经常遇到需要测量转速的场合。例如对电机转速的测量,汽车发动机转速的测量等等,这越来越需要我们能有一个更加方便更加准确的转速测量仪。随着微型计算机的不断发展,单片机被越来越多的用于制作智能式的数字式转速测量仪,测量转速时,转速测量结果被直接显示在LED上,这样更加方便更加直观,也提高了测量仪的抗干扰性,操作简单且小巧易携。市场上的转速测量仪器可分为以下五类:1.离心式转速表,2.磁性式转速表,3.电动式转速表,4.磁电式转速表,5.电子式转速表我选择的研究课题是基于微型固态陀螺转速仪的设计。具体就是利51单片机和陀螺角速度传感器设计出一种智能化的电子式转速测量仪。1.2国内外的研究现状目前国内已经研制出了技术相当成熟的基于单片机的智能转速测量系统。主要是51系列单片机的应用,目前已经大量投放市场。经过大量实践证明,智能转速测量仪相比于传统的机械式转速表,它们不仅测量精度高,而且操作简单,小巧易携,而且抗干扰性能优越,使转速的测量更加灵活便捷。目前流行于国内的的技术成熟的转速测量系统主要有光电式转速测量仪,也有少量的激光转速仪,但是技术不够成熟。它们无一不是使用单片机作为智能芯片,来控制测量系统。国外研究相比国内已经有了更大的进步,他们目前已经开发出了数字式转矩转速测量仪,激光转速测量仪等多种测量精度更高更加智能化的转速测量系统。而且技术更加成熟,特别是单片机开发技术,已经远远超越我们。2.STC89C52单片机概述2.1STC89C52的基本知识该芯片是STC公司开发的一款功能强大,性价比优良的CMOS8位微控制器,它具有可编程Flash存储器,大小为8k。STC公司在设计上继续沿用了经典的MCS-51内核,但在此基础上做了大量的改善,使得 STC89C52拥有比51系列单片机更为强大的功能。在电子设计中,使用STC89C52作为控制芯片相比于51系列单片机来说能获得更高的性价比,它可以使你的设计更加灵活,更加合理。因此我决定使用STC89C52单片机作为控制芯片。STC89C52单片机不仅拥有3个16位定时器/计数器、8k字节可编程Flash、32位I/O口线、内置4KBEEPROM,还有看门狗定时器、512字节RAM、一个7向量4级中断结构、MAX810复位电路、4个外部中断、全双工串行口等结构。这些使得该芯片具有超强的控制能力和可开发潜质,可以完成复杂的运算,逻辑和通信功能。另外STC89C52还可以实现0Hz静态逻辑操作,它还拥有两种可选择的节电模式。第一种:空闲模式。在这种模式下,CPU不再工作,但是定时器和计数器、RAM、串口、中断部分仍可以继续工作。第二种:掉电保护模式。在这种模式下2.1.1特性:STC89C52RC单片机具有以下特性:8K字节程序存储空间;512字节数据存储空间;内带2K字节EEPROM存储空间;可直接使用串口下载;AT89S52单片机:8K字节程序存储空间;256字节数据存储空间;带有2KB的eeprom空间。2.1.2基本参数1.STC89C52是一种加强版的8051单片机,它的指令代码完全兼容传统的80512.它的工作电压有两种:第一种适用于5V单片机为5.5V~3.3V第二种适用于3V单片机为3.8V~2.0V3.它的频率范围:0MHz~40MHz4.用户应用程序空间为8K字节5.片上集成512字节RAM6.拥有32个通用型的I/O口7.ISP/IAP,不需要专用编程器,也不需要专用仿真器,可通过串口直接下载用户程序8.具有EEPROM功能9.具有看门狗功能10.通用异步串行口(UART),还可用定时器软件实现多个UART11.外部中断4路,下降沿中断或低电平触发电路,掉电模式下可以通过外部低电平触发中断的方式唤醒12.共3个16位定时器/计数器。即定时器T0、T1、T213.工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)14.PDIP封装2.1.3引脚排列和基本功能STC89C52RC引脚功能
1电源:
VCC-电源接+5V;
VSS-接地线;
2.时钟:
XTAL1—晶体振荡电路反相输入端XTAL2—晶体振荡电路反相输出端。
3.四根控制线:ALE/PROG:地址锁存允许/片内EPROM编程脉冲
ALE功能:用来锁存P0口送出的低8位地址;
PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。PSEN:外ROM读选通信号。
RST/VPD:复位/备用电源。
RST(Reset)功能:复位信号输入端。
VPD功能:在Vcc没有电的情况下,接通用电源。
EA/Vpp:内外ROM选择/片内EPROM编程电源。
EA功能:内外ROM选择端口;
Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
4.I/O口线:P0、P1、P2、P3共四个八位口。
其中只有P0口能直接用于对外部存储器的读/写操作,所以P0口又称为三态双向口,又称数据总线口。P0口也用以输出外部存储器的低8位地址。由于是分时输出,故应在外部加锁存器将此地址数据锁存,地址锁存,信号用ALE。
P1口是专门供用户使用的I/O口,是准双向口。
P2口是从系统扩展时作高8位地址线用。不扩展外部存储器时,P2口也可以作为用户I/O口线使用,P2口也是准双向口。
P3口是双功能口,该口的每一位均可独立地定义为第一I/O功能或第二I/O功能。作为第一功能使用时操作同P1口。STC89C52的引脚排布如图1所示:图12.2单片机的应用TC"单片机的应用"\l1从目前来看,单片机之所以被广泛应用于日常生活和工业生产中的各个领域,不仅是因为微电子技术和大规模集成电路的飞速发展,也是因为单片机本身拥有性价比高、质量小、控制能力强、运算速度快等诸多优点。无论是从经济成本的方面,还是实用性方面考虑,单片机都是作为控制芯片的不二之选。按照单片机的特点,其应用可分为单机应用和多机应用两个方面。在一个系统中,只用1片单片机的叫做单机应用,这是目前应用最多的一种方式。单机应用的主要应用领域有:1.测控系统。使用单片机可以自由的搭建各种简单的工业控制系统。例如自动控制,数据采集系统等,从而达到控制和检测的目的,实现工业的智能化生产。如一般温度控制、湿度控制、转速控制等。2.智能仪表。使用单片机来研制更加智能,更加方便的,更加准确的新型测量和控制仪表。如:温度、湿度、流量、转速等的测量、显示、控制仪表,通过采用单片机软件编程技术,不仅可以完全测量,而且还具有运算、误差修正、线性化、零漂移处理、监控等多种功能。3.机电一体化产品。单片机与传统的机械产品相连接,可以使传统的机械产品结构更加简单,控制更加智能化。这种新一代的机电一体化产品种类繁多,如智能窗户、医疗器械、智能康复诊疗仪等。4.智能接口。在计算机控制系统中,我们利用单片机来管理和控制各个接口并让它们与主机并行工作,这样不仅可以大大降低成本,还可以极大地提升我们系统的运行速度。例如:在大型数据采集系统中,用单片机对摸/数转换接口进行控制不仅可提高采集速度,而且还能对数据进行预处理,如数字滤波、线性处理、误差休整等。5.智能民用产品。在全自动洗衣机、儿童玩具、汽车导航仪、收银机、空调等各种民用电器的设计中引入单片机作为系统的控制芯片,不仅大大降低了产品的生产成本,而且极大的提高了产品的性能,也使产品更加智能化。单片机的多机应用系统可分为多能集散系统、局部网络系统两个方面。1.多能集散系统。多功能集散系统是为了满足工程系统多种外围功能的要求而设置的多机系统。2.局部网络系统。单片机网络系统的出现,使单片机的发展一进入了一个全新的时代。目前单片机构成的网络系统的主要是分布式测控系统、单片机主要被用于系统中的通信控制,以及构成各测控系统的子系统。由此可见,在这个单片机被广泛应用的时代,单片机已经成为我们生活中不可或缺的一部分,在我们的生活中随处可见它的身影,无论是工业生产还是我们的日常生活都越来越离不开单片机。未来随着单片机技术的不断进步,它的应用将会变得更加广泛。3.传感器模块和显示模块3.1传感器模块转速测量的方法大体上可以分为两类,一类是比较传统简单的直接法,即直接观测机械的旋转运动,测量一定时间内机械旋转的圈数,从而算出机械运动的转速,这种方法不仅比较麻烦而且容易产生较大的误差,我们一般不采用,为了提高测量精度我们决定采用另一种方法间接测量法,即测量由机械转动导致其他物理量的变化,从这些物理量的变化与转速的关系来得到转速,这里我们一般需要传感器来把物体的转速转化成电压电流之类的物理量,便于我们后期处理。同时从测速仪是否与转轴接触又可以分为接触式,非接触式。目前最流行的转速测量方法有以下几种:霍尔元件测速法、离心式转速表测速法、测速发电机测速法、漏磁测速法、闪电测速法和震动测速法。本设计我准备采用L3G4200三轴陀螺仪(如图2)角速度传感器模块,用来采集被测量的物体的转速信号。大名鼎鼎的IPhone4手机上用的就是这款传感器,L3G4200D是一个低功率的三轴陀螺仪,它提供了三种不同的用户可选择全量表(±250/±500/±2000dps)。它包括一个传感元件和一个集成电路接口,能够实时的输出代表了被测物体转速的数字脉冲信号,我们在单片机当中进行编程对该信号进行解读并驱动1602LCD显示屏对结果进行显示。该数字陀螺仪可以让用户设定全部量程,量程范围从±250dps~±2000dps,超广泛的测量范围使得该器件适合测量多种不同的运动,我们可以根据所需测量的物体来自主选择合适的量程。这款器件不仅包含一个16位数据的输出端口,还具有可配置的高低通滤波器等嵌入式数字功能,这些都是的我们的测量更加简单。就算时间推移或温度变化,这款器件仍然保持连续稳定的输出,原理图如图3所示。图2图33.2液晶显示模块本设计使用LCD1602显示器作为转速仪的显示模块。LCD1602的内部控制芯片为HD44780,它可以同时显示32个字符,功能强大,结构简单,不仅如此,它还具有低功耗,可显示内容丰富,轻巧等诸多优点。它采用单+5V电源供电,外围电路配置简单,价格便宜,具有很高的性价比。LCD1602外观如图4(a)所示。1602字符型LCD模块的管脚分布如图4(b)所示,其管脚各功能如表1所示。
图4(a)LCD1602外观图(b)LCD1602管脚分布图4.整体设计4.1硬件部分设计4.1.1电源部分如图5所示是一个带有桥式整流电路的电容滤波的7808稳压的稳压电路,通过变压器将220V的交流电通过这些环节得到5V左右的交流电压,以便提供单片机的工作电压。图54.1.2复位电路MCS-51
单片机的复位电路是用来执行单片机的初始化操作。单片机开始运行时,都需要先复位,其作用是使CPU和系统中的其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。下图所示是本系统的复位电路。图6复位电路复位电路的工作机制:如图6所示电容CJ3可以起到按键去除抖动的作用,这里的电容还有一个更重要的作用就是上电复位,因为考虑到芯片刚刚上电时由于供电不稳定而做出错误的计算,所以增加一个上电复位以达到延时启动CPU的目的,使芯片能够正常工作。虽然现在很多芯片自带了上电延时功能,但是我们一般还是会增加额外的上电复位电路,提高可靠性。
上电复位是如此工作的,此时不用考虑按键和图中1K电阻的作用。上电瞬间,电压VCC短时间内从0V上升到5V,这一瞬间相当于交流电,电容相当于导线,5V的电压全部加在10K电阻上,也就是说,这时RST的电平状态为高电平。但是从上电开始,电容自己就慢慢充电,其两端电压呈曲线上升,最终达到5V,也就是说其正端电位为5V,负端电位为0V,其负端也就正好是RST,此时RST为低电平,单片机开始正常工作。添加按键是为了手动复位,一般那个1K电阻可以不加。当按键按下时,电容两端构成回路并放电,使单片机的RST端重新变为高电平,按键抬起时电容又充电使RST变回低电平。4.1.3晶振电路每一个单片机系统都必须要有晶振电路存在,它的作用是为系统提供基本的时钟信号。晶振就是单片机的心脏,用它的上下变化产生的时钟来触发单片机操作。单片机的运行速度和晶振的频率是成正比的,晶振的频率越高,系统的时钟频率也会越高,单片机的运行速度也会越快。STC89C52单片机内部有一个用于构成振荡器的高增益反相放大器。我们可以利用这个高增益的反相放大器和晶振来构成一个自激振荡器,来作为系统的时钟电路,具体如图7所示,芯片引脚XTAL1是该高增益反相放大器的输入端,输出端为引脚XTAL2。这两个引脚连接晶振和电容,就构成一个稳定的时钟电路。电路中的电容C1、C2典型值通常选择22pF,此系统电路的晶体振荡器的值为11.0592MHz。虽然对外接电容虽然没有严格要求,但电容的大小会影响振荡频率的高低、振荡器的稳定性和起振的速度。陶瓷电容我们的首选,电容值应该选择为22pF。另外,为了更好地保证晶体振荡器稳定而又可靠的工作,在焊接电路时,晶振和电容的位置应该尽量的靠近单片机芯片,以免产生不必要的寄生电容,从而影响晶振电路的正常工作。晶体振荡电路如图7示:图74.2软件部分设计设计完硬件部分之后,就要来设计软件部分了,一个完整的电子产品是离不开软件的,软件是硬件的灵魂,没有软件的支撑,硬件就是一堆废铁,根本不能发挥出它应有的作用。软件的设计也离不开硬件的支持,我们只有在硬件的基础上设计出合适的硬件才能组成完美的产品。我们首先要明白系统对软件的需求,然后分析问题的实质,找到解决问题的办法。然后提出程序的整体设计方案和各个模块的设计方案。通过整理发现,单片机需要识别传感器传送来的信号,再经过计算后驱动数码管显示结果。我们需要画出系统的流程图,一步一步进行设计。在此使用C语言来编写程序。4.2.1定时器的初始化ST89C52有两个定时器/计数器T0和T1,每个定时器/计数器均可设置成为16位,也可以设置成为13位进行定时或计数。计数器的功能是对T0或T1外来脉冲的进行计数,外部输入脉冲负跳变时,计数器进行加1。工作方式寄存器TMOD的设定:GATEC/TM1M0GATEC/TM1M0TMOD各位的含义如下:GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0时工作于定时方式。M1、M0为工作方式选择位,用于对T0的四种工作方式,T1的三种工作方式进行选择,选择情况如下表1:M1M0=00为方式0;M1M0=01为方式1;表1:M1、M0为工作方式选择位M0M1工作方式方式说明00110101012313位定时/计数器16位定时/计数器8位自动重置定时/计数器两个8位定时/计数器(只有T0有)4.2.2中断允许控制MCS-51单片机中没有专门的开中断指令和关中断指令,对各个中断源的允许和屏蔽是由内部的中断允许寄存器IE的各位来控制的。中断允许寄存器IE的字节地址为A8H,可以进行位寻址表2:中断位寻址表IED7D6D5D4D3D2D1D0(A8H)EAET2ESET1EX1ET0EX0EA:中断允许总控位。EA=0,屏蔽所有的中断请求;EA=1,开放中断。ET2:定时器/计数器T2的溢出中断允许位ES:串行口中断允许位。ET1:定时器/计数器T1的溢出中断允许位。EX1:外部中断INT1的中断允许位。ET0:定时器/计数器T0的溢出中断允许位。EX0:外部中断INT0的中断允许位。4.2.3程序流程图1、主程序流程图8显示开始初始化定时器计时器刷新数码管延时2ms显示开始初始化定时器计时器刷新数码管延时2ms图8流程图2、显示子程序流程图9开始开始显示缓存初始化LED显示初始化数码显示图9示子程序流程图3、定时计数子程序流程图10开定时器开定时器开计数器定时0.5s计数0.5s读出计数器值并清零计数器定时重新装初始值并启动定时器开始图10时计数子程序5.系统调试5.1硬件调试在焊接好整个仪器后,首先进行脱机调试,仔细检查各个引脚焊接是否正确,是否有虚焊的,各个元器件型号是否正确,焊接位置和焊接方法是否正确。并用万用表按照原理图对所焊电路进行一步一步仔细地检查,确保焊接无误。最后再联机调试,接通电源,对各个输出端的输出信号波形进行分析。5.2软件调试首先根据程序框图编写好程序,用软件进行调试。调试时先用软件进行编译仿真,检查是否有语法错误。然后开始执行,看程序的运行结果是否符合预期的设计,如果不符合,就不断进行修改,直到符合要求。其次是对每个模块中的子程序进行调试,可利用软件进行单步运行和断点运行调试。通过检查各个I/O口状态,检测执行结果是否符合设计要求。总结经过三个多月的紧张学习和工作,我终于完成了最后的毕业设计。国内外有多种新型的转速测量仪,可以说我所设计的是最简单的一种。但是这已经涵盖了我大学四年所学习的所有内容。一方面是单片机的应用,另一方面是程序的编写,要想顺利的完成一项电子设计,我们不仅需要了解和学习书本上的专业知识,而且还要熟练使用AltiumDesigner、Matlab等各种软件。通过这次毕业设计,我认识到了自己的不足,刚开始的时候就产生了畏难的情绪,总感觉做不出来。都说万事开头难,当设计进行到一定程度之后,我发现并不是像想象中的那么难,只是自己的专业知识还是远远不够的,后悔大一开始的时候没有好好学习。这也让我认识到了学习的重要性,在这次毕业设计的过程中,我是一边学习,一边实践,才艰难的完成了我的毕设。在以后的工作生活中我会树立起终身学习的目标,不断地完善自己的专业技能并且跟上时代的脚步,成为对社会有用的人才。其实做什么事情都是一样只要有恒心,就一定能完成。虽说万事开头难,但是世上无难事,只怕有心人,不管是什么样的困难,只要我们肯努力肯吃苦,就没有战胜不了的困难。在这次毕业设计的几个月中,使我深深地体会到团队合作精神的重要性。一个人是很难做到的,只有大家在一起研究讨论才能完成。在对课题研究中,我们往往会遇到各种各样的问题,很多问题都不是我们单枪匹马可以解决的,这就需要们得到老师和同学的帮助,遇到不懂的地方我们一定要学会咨询老师,学会和同学要探讨,交流不同意见,千万不可闭门造车。我在老师的鼓励和帮助下不断进步,最终还是在一定程度上完成了这次毕业设计。在这里,我要感谢我的导师闫老师,是她的认真负责和不断督促才让我找到了前进的方向和动力,可以说我能够完成这项毕业设计离不开闫老师的辛勤付出。附录一:元器件清单元器件清单序号名称规格型号数量封装单片机STC89C511DIP40桥式整流器1稳压管78051电源插座1电解电容100UF/50V1RB.2/.410UF/50V2瓷片电容30PF2RAD0.1独石电容0.11按键3LED发光二极管1RAD0.1晶振6MHz1XTAL111.电阻2K4RAD0.4100810K12001510112.LED数码管LCD16021附录二:硬件部分电路图附录三:软件程序#include<REG51.H> #include<math.h>//Keillibrary#include<stdio.h>//Keillibrary #include<INTRINS.H>#defineucharunsignedchar#defineuintunsignedint #defineDataPortP0//LCD1602数据端口sbit SCL=P1^0;//IIC时钟引脚定义sbit SDA=P1^1;//IIC数据引脚定义sbitLCM_RS=P2^0;//LCD1602命令端口 sbitLCM_RW=P2^1;//LCD1602命令端口 sbitLCM_EN=P2^2;//LCD1602命令端口//**********L3G4200D内部寄存器地址*********#defineWHO_AM_I0x0F#defineCTRL_REG10x20#defineCTRL_REG20x21#defineCTRL_REG30x22#defineCTRL_REG40x23#defineCTRL_REG50x24#defineREFERENCE0x25#defineOUT_TEMP0x26#defineSTATUS_REG0x27#defineOUT_X_L0x28#defineOUT_X_H0x29#defineOUT_Y_L0x2A#defineOUT_Y_H0x2B#defineOUT_Z_L0x2C#defineOUT_Z_H0x2D#defineFIFO_CTRL_REG0x2E#defineFIFO_SRC_REG0x2F#defineINT1_CFG0x30#defineINT1_SRC0x31#defineINT1_TSH_XH0x32#defineINT1_TSH_XL0x33#defineINT1_TSH_YH0x34#defineINT1_TSH_YL0x35#defineINT1_TSH_ZH0x36#defineINT1_TSH_ZL0x37#defineINT1_DURATION0x38#define SlaveAddress0xD2 //定义器件在IIC总线中的从地址,根据ALTADDRESS地址引脚不同修改typedefunsignedcharBYTE;typedefunsignedshortWORD;uchardis[4];//显示数组BYTEBUF[8];//接收数据缓存区 ucharge,shi,bai,qian,wan;//显示变量intdis_data;//变量floattemp;voiddelay(unsignedintk);voidInitLcd();//初始化lcd1602voidInitL3G4200D();//初始化L3G4200DvoidWriteDataLCM(uchardataW);voidWriteCommandLCM(ucharCMD,ucharAttribc);voidDisplayOneChar(ucharX,ucharY,ucharDData);voidDisplayListChar(ucharX,ucharY,uchar*DData,L);voidSingle_WriteL3G4200D(ucharREG_Address,ucharREG_data);//单个写入数据ucharSingle_ReadL3G4200D(ucharREG_Address);//单个读取内部寄存器数据//voidDelay5us();voidL3G4200D_Start();voidL3G4200D_Stop();voidL3G4200D_SendACK(bitack);bitL3G4200D_RecvACK();voidL3G4200D_SendByte(BYTEdat);BYTEL3G4200D_RecvByte();voidL3G4200D_ReadPage();voidL3G4200D_WritePage();voiddisplay_x();voiddisplay_y();voiddisplay_z();/*******************************/voidlcd_printf(uchar*s,inttemp_data){ if(temp_data<0){ temp_data=-temp_data;*s='-'; } else*s='';*++s=temp_data/100+0x30;temp_data=temp_data%100;//取余运算*++s=temp_data/10+0x30;temp_data=temp_data%10;//取余运算*++s=temp_data+0x30; }/*******************************/voiddelay(unsignedintk) { unsignedinti,j; for(i=0;i<k;i++){ for(j=0;j<121;j++) {;}} }/*******************************/voidWaitForEnable(void) { DataPort=0xff; LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();while(DataPort&0x80); LCM_EN=0; } /*******************************/voidWriteCommandLCM(ucharCMD,ucharAttribc){ if(Attribc)WaitForEnable(); LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_(); LCM_EN=1;_nop_();_nop_();LCM_EN=0;} /*******************************/voidWriteDataLCM(uchardataW){ WaitForEnable(); LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_(); LCM_EN=1;_nop_();_nop_();LCM_EN=0;} /***********************************/voidInitLcd() { WriteCommandLCM(0x38,1); WriteCommandLCM(0x08,1); WriteCommandLCM(0x01,1); WriteCommandLCM(0x06,1); WriteCommandLCM(0x0c,1);DisplayOneChar(0,0,'x');DisplayOneChar(1,0,':');DisplayOneChar(0,1,'y');DisplayOneChar(1,1,':');DisplayOneChar(9,0,'z');DisplayOneChar(10,0,':');} /***********************************/voidDisplayOneChar(ucharX,ucharY,ucharDData){ Y&=1; X&=15; if(Y)X|=0x40; X|=0x80; WriteCommandLCM(X,0); WriteDataLCM(DData); } //*******************************************voidDisplayListChar(ucharX,ucharY,uchar*DData,L){ucharListLength=0;Y&=0x1;X&=0xF;while(L--){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}/**************************************延时5微秒(STC90C52RC@12M)不同的工作环境,需要调整此函数,注意时钟过快时需要修改当改用1T的MCU时,请调整此延时函数**************************************/voidDelay5us(){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();}/**************************************起始信号**************************************/voidL3G4200D_Start(){SDA=1;//拉高数据线SCL=1;//拉高时钟线Delay5us();//延时SDA=0;//产生下降沿Delay5us();//延时SCL=0;//拉低时钟线}/**************************************停止信号**************************************/voidL3G4200D_Stop(){SDA=0;//拉低数据线SCL=1;//拉高时钟线Delay5us();//延时SDA=1;//产生上升沿Delay5us();//延时}/**************************************发送应答信号入口参数:ack(0:ACK1:NAK)**************************************/voidL3G4200D_SendACK(bitack){SDA=ack;//写应答信号SCL=1;//拉高时钟线Delay5us();//延时SCL=0;//拉低时钟线Delay5us();//延时}/**************************************接收应答信号**************************************/bitL3G4200D_RecvACK(){SCL=1;//拉高时钟线Delay5us();//延时CY=SDA;//读应答信号SCL=0;//拉低时钟线Delay5us();//延时returnCY;}/**************************************向IIC总线发送一个字节数据**************************************/voidL3G4200D_SendByte(BYTEdat){BYTEi;for(i=0;i<8;i++)//8位计数器{dat<<=1;//移出数据的最高位SDA=CY;//送数据口SCL=1;//拉高时钟线Delay5us();//延时SCL=0;//拉低时钟线Delay5us();//延时}L3G4200D_RecvACK();}/**************************************从IIC总线接收一个字节数据**************************************/BYTEL3G4200D_RecvByte(){BYTEi;BYTEdat=0;SDA=1;//使能内部上拉,准备读取数据,for(i=0;i<8;i++)//8位计数器{dat<<=1;SCL=1;//拉高时钟线Delay5us();//延时dat|=SDA;//读数据SCL=0;//拉低时钟线Delay5us();//延时}returndat;}//单字节写入*******************************************voidSingle_WriteL3G4200D(ucharREG_Address,ucharREG_data){L3G4200D_Start();//起始信号L3G4200D_SendByte(SlaveAddress);//发送设备地址+写信号L3G4200D_SendByte(REG_Address);//内部寄存器地址,请参考中文pdf22页L3G4200D_SendByte(REG_data);//内部寄存器数据,请参考中文pdf22页L3G4200D_Stop();//发送停止信号}//单字节读取*****************************************ucharSingle_ReadL3G4200D(ucharREG_Address){ucharREG_data;L3G4200D_Start();//起始信号L3G4200D_SendByte(SlaveAddress);//发送设备地址+写信号L3G4200D_SendByte(REG_Address);//发送存储单元地址,从0开始 L3G4200D_Start();//起始信号L3G4200D_SendByte(SlaveAddress+1);//发送设备地址+读信号REG_data=L3G4200D_RecvByte();//读出寄存器数据 L3G4200D_SendACK(1); L3G4200D_Stop();//停止信号returnREG_data;}//*****************************************************************//初始化L3G4200D,根据需要请参考pdf进行修改************************voidInitL3G4200D(){Single_WriteL3G4200D(CTRL_REG1,0x0f);//Single_WriteL3G4200D(CTRL_REG2,0x00);//Single_WriteL3G4200D(CTRL_REG3,0x08);//Single_WriteL3G4200D(CTRL_REG4,0x30);//+-2000dpsSingle_WriteL3G4200D(CTRL_REG5,0x00);}//***********************************************************************//显示x轴voiddisplay_x(){BUF[0]=Single_ReadL3G4200D(OUT_X_L);BUF[1]=Single_ReadL3G4200D(OUT_X_H);//读取X轴数据dis_data=(BUF[1]<<8)+BUF[0];//合成数据temp=(float)dis_data*0.07;//2000度/秒量程dis_data=(int)temp;lcd_printf(dis,dis_data);//转换数据显示DisplayListChar(2,0,dis,4);//启始列,行,显示数组,显示长度}//***********************************************************************//显示y轴voiddisplay_y(){BUF[2]=Single_ReadL3G4200D(OUT_Y_L);BUF[3]=Single_ReadL3G4200D(OUT_Y_H);//读取Y轴数据dis_data=(BUF[3]<<8)+BUF[2];//合成数据 temp=(float)dis_data*0.07;//2000度/秒量程dis_data=(int)temp;lcd_printf(dis,dis_data);//转换数据显示DisplayListChar(2,1,dis,4);//启始列,行,显示数组,显示长度}//***********************************************************************//显示z轴voiddisplay_z(){BUF[4]=Single_ReadL3G4200D(OUT_Z_L);BUF[5]=Single_ReadL3G4200D(OUT_Z_H);//读取Z轴数据dis_data=(BUF[5]<<8)+BUF[4];//合成数据 temp=(float)dis_data*0.07;//2000度/秒量程 dis_data=(int)temp;lcd_printf(dis,dis_data);//转换数据显示DisplayListChar(11,0,dis,4);//启始列,行,显示数组,显示长度}//*********************************************************//******主程序********//*********************************************************voidmain(){ucharTemperature;delay(500); //上电延时 InitLcd();//液晶初始化InitL3G4200D();//初始化L3G4200DTemperature=Single_ReadL3G4200D(OUT_TEMP);//读取温度while(1)//循环{display_x();//显示X轴display_y();//显示Y轴display_z();//显示Z轴delay(100);//延时}}参考文献[1].\o"文摘"李朝春.
《单片机原理及接口技术》[M].北京:北京航空航天大学出版社,1994.[2]《检测与转换技术》[M].北京:机械工业出版社,1990.[\o"文摘"3].贾伯年,俞朴,宋爱国.
《传感器技术》[M].南京:东南大学出版社,2007.[4].李广弟《单片机基础》北京航空航天大学出版社[5].王煜东《传感器及运用》机械工业出版社[6].徐峥颖《Protel99SEEDA技术及应用》机械工业出版社[7].刘修文《图像电子元器件的检测与选用要决》中国电力出版社[8].童诗白《模拟电子技术基础》高等教育出版社[9].周绍英等《电机与拖动》中央广播电视大学出版社[\o"文摘"10].Corry,Mayfield,Cadman.
《COM/DCOMprogrammingguide》[M].北京:清华大学出版社,2000.[11].符意德《嵌入式系统原理及接口技术》北京:清华大学出版社[12].钱晓捷《微机原理与接口技术》机械工业出版社[13]何立民.MCS-51系列单片机应用系统设计.北京:北京航空航天大学出版社,1990[14]穆兰.单片微型计算机原理及接口技术.北京:机械工业出版社,1995[15]张毅刚.MCS-51单片机应用设计.哈尔滨:哈尔滨工业大学出版社,1990[16]蒋智勇.单片微型计算机原理及接口技术.沈阳:辽宁科学技术出版设,1992基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计\t"_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 22330.3-2026无规定动物疫病区标准第3部分:无猪水疱病区
- 电商行业社交电商与直播带货方案
- 质量管理体系建设指导书模板
- 采购供应商信息评估与分析工具
- 采购成本控制流程与操作指南模板
- 员工离职信息安全管理团队预案
- 产品质量担保期限延长承诺书(6篇)
- 活动赞助资金支配承诺书(9篇)
- 湖北省南漳县2026年初三第一次诊断考试英语试题文试题含解析
- 隐秘信息严格保护承诺书(8篇)
- 摊铺机操作工安全规程水平考核试卷含答案
- 投资企业面试常见问题针对不同岗位的面试技巧指导
- 2025年瓷砖及石材培训试题及答案
- 非遗展示空间设计
- 香港公司购货合同(标准版)
- 2025年贵州省高考地理试卷真题(含答案)
- 煤矿企业一线从业人员主要工种考试题库-《探放水工》理论知识
- 2026届新高考数学热点精准复习浅谈“四新”背景下数列备考
- 急性阑尾炎课件教学
- 老年康复护理床上运动
- 木材加工厂消防安全规范
评论
0/150
提交评论