1、信息工程学院 毕业设计论文摘要大规模集成电路的出现极大地促进了微型计算机的快速发展,使我们的生活发生了翻天覆地的变化。正如微型计算机的出现给现代科技的发展注入了新鲜的血液,单片机技术的发展也给工业测控领域带来了新的技术变革。现在,在各个技术领域,单片机都得到了广泛的应用。单片机拥有体积小、重量轻、抗干扰能力强、对环境要求不高、高性价比、开发较为容易,等诸多优点。它已走入千家万户,不论是洗衣机、电冰箱、空调、还是汽车都可以见到它的身影。所以,单片机技术的发展水平已经成为衡量一个国家工业发展水平的重要参考。陀螺转速测量仪是单片机的简单应用。它利用陀螺角速度传感器来采集物体转速的实时数据,并利用LE
2、D数码管作动态扫描从而显示实时转速。该陀螺转速测量仪具有测量精度高,抗干扰性强,适用范围广等多个优点,拥有广阔的市场应用前景。关键词:微型计算机;单片机;陀螺;转速仪AbstractLSI appears greatly promoted the rapid development of the microcomputer, so that our life has undergone enormous changes. As the emergence of the microcomputer to the development of modern science and technolo
3、gy has injected fresh blood, but also to the development of SCM technology in the field of industrial measurement and control technology has brought new changes. Now, in various technical fields, microcontrollers have been widely used. SCM has small size, light weight, anti-interference ability, les
4、s demanding on the environment, high cost, relatively easy to develop, and many other advantages. It has entered every household, whether washing machines, refrigerators, air conditioners, or car can see its shadow. Therefore, the level of development of SCM technology has become the measure of a co
5、untrys level of industrial development an important reference.Gyro Speed Gauge is simple microcontroller applications. It uses gyro angular velocity sensor to collect real-time data of the object speed, and make use of digital LED to display real-time dynamic scanning speed. The gyro speed measureme
6、nt instrument has a number of advantages of high precision, strong anti-interference, wide application, has a broad market .Keywords: microcomputers; microcontroller; gyroscope; Tachometer目录1绪论- 4 -1.1课题研究的背景及意义- 4 -1.2国内外的研究现状- 4 -2.STC89C52单片机概述- 5 -2.1 STC89C52的基本知识- 5 -2.1.1特性:- 5 -2.1.2基本参数- 6
7、-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 -附录二:硬件部分电路图- 2
8、1 -附录三:软件程序- 22 -1绪论1.1课题研究的背景及意义随着微型计算机技术的发展和不断进步,利用单片机来设计的智能电子式转速表已经越来越适合市场的需求。要想提高转速测量的精度,我们必须使用数字测速的方法。不管在在日常的生活还是工程实践中我们往往经常遇到需要测量转速的场合。例如对电机转速的测量,汽车发动机转速的测量等等,这越来越需要我们能有一个更加方便更加准确的转速测量仪。随着微型计算机的不断发展,单片机被越来越多的用于制作智能式的数字式转速测量仪,测量转速时,转速测量结果被直接显示在LED上,这样更加方便更加直观,也提高了测量仪的抗干扰性,操作简单且小巧易携。市场上的转速测量仪器可分
9、为以下五类:1离心式转速表, 2磁性式转速表, 3电动式转速表, 4磁电式转速表, 5电子式转速表 我选择的研究课题是基于微型固态陀螺转速仪的设计。具体就是利51单片机和陀螺角速度传感器设计出一种智能化的电子式转速测量仪。1.2国内外的研究现状目前国内已经研制出了技术相当成熟的基于单片机的智能转速测量系统。主要是51系列单片机的应用,目前已经大量投放市场。经过大量实践证明,智能转速测量仪相比于传统的机械式转速表,它们不仅测量精度高,而且操作简单,小巧易携,而且抗干扰性能优越,使转速的测量更加灵活便捷。目前流行于国内的的技术成熟的转速测量系统主要有光电式转速测量仪,也有少量的激光转速仪,但是技术
10、不够成熟。它们无一不是使用单片机作为智能芯片,来控制测量系统。国外研究相比国内已经有了更大的进步,他们目前已经开发出了数字式转矩转速测量仪,激光转速测量仪等多种测量精度更高更加智能化的转速测量系统。而且技术更加成熟,特别是单片机开发技术,已经远远超越我们。2.STC89C52单片机概述2.1 STC89C52的基本知识该芯片是STC公司开发的一款功能强大,性价比优良的CMOS 8位微控制器,它具有可编程Flash存储器,大小为8k。STC公司在设计上继续沿用了经典的MCS-51内核,但在此基础上做了大量的改善,使得STC89C52拥有比51系列单片机更为强大的功能。在电子设计中,使用STC89
11、C52作为控制芯片相比于51系列单片机来说能获得更高的性价比,它可以使你的设计更加灵活,更加合理。因此我决定使用STC89C52单片机作为控制芯片。 STC89C52单片机不仅拥有3个16 位定时器/计数器、8k字节可编程Flash、32 位I/O 口线、内置4KB EEPROM,还有看门狗定时器、512字节RAM、一个7向量4级中断结构、MAX810复位电路、4个外部中断、全双工串行口等结构。这些使得该芯片具有超强的控制能力和可开发潜质,可以完成复杂的运算,逻辑和通信功能。另外 STC89C52 还可以实现0Hz 静态逻辑操作,它还拥有两种可选择的节电模式。第一种:空闲模式。在这种模式下,C
12、PU不再工作,但是定时器和计数器、RAM、串口、中断部分仍可以继续工作。第二种:掉电保护模式。在这种模式下,随机存取存储器里的内容被保存,单片机暂时停止一切工作,直到下一个复位信号出现为止,单片机才恢复工作。该芯片的最高工作频率为35MHz。并且6机器周期和12机器周期均可选择。2.1.1特性:STC89C52RC单片机具有以下特性:8K字节程序存储空间; 512字节数据存储空间;内带2K字节EEPROM存储空间;可直接使用串口下载;AT89S52单片机:8K字节程序存储空间;256字节数据存储空间;带有2KB的eeprom空间。2.1.2基本参数1. STC89C52是一种加强版的8051
13、单片机,它的指令代码完全兼容传统的80512. 它的工作电压有两种:第一种适用于5V 单片机为5.5V3.3V 第二种适用于3V单片机为3.8V2.0V 3. 它的频率范围:0MHz40MHz4. 用户应用程序空间为8K 字节5. 片上集成512 字节RAM6.拥有32个通用型的I/O口7. ISP/IAP,不需要专用编程器,也不需要专用仿真器,可通过串口直接下载用户程序8. 具有EEPROM 功能9. 具有看门狗功能10. 通用异步串行口(UART),还可用定时器软件实现多个UART11. 外部中断4 路,下降沿中断或低电平触发电路,掉电模式下可以通过外部低电平触发中断的方式唤醒12. 共3
14、个 16 位定时器/计数器。即定时器T0、T1、T213. 工作温度范围:-40+85(工业级)/075(商业级)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(R
15、eset)功能:复位信号输入端。 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位地址线用。
16、不扩展外部存储器时,P2口也可以作为用户I/O口线使用,P2口也是准双向口。P3口是双功能口,该口的每一位均可独立地定义为第一I/O功能或第二I/O功能。作为第一功能使用时操作同P1口。STC89C52的引脚排布如图1所示: 图12.2 单片机的应用从目前来看,单片机之所以被广泛应用于日常生活和工业生产中的各个领域,不仅是因为微电子技术和大规模集成电路的飞速发展,也是因为单片机本身拥有性价比高、质量小、控制能力强、运算速度快等诸多优点。无论是从经济成本的方面,还是实用性方面考虑,单片机都是作为控制芯片的不二之选。按照单片机的特点,其应用可分为单机应用和多机应用两个方面。在一个系统中,只用1片单
17、片机的叫做单机应用,这是目前应用最多的一种方式。单机应用的主要应用领域有:1. 测控系统。使用单片机可以自由的搭建各种简单的工业控制系统。例如自动控制,数据采集系统等,从而达到控制和检测的目的,实现工业的智能化生产。如一般温度控制、湿度控制、转速控制等。2. 智能仪表。使用单片机来研制更加智能,更加方便的,更加准确的新型测量和控制仪表。如:温度、湿度、流量、转速等的测量、显示、控制仪表,通过采用单片机软件编程技术,不仅可以完全测量,而且还具有运算、误差修正、线性化、零漂移处理、监控等多种功能。3. 机电一体化产品。单片机与传统的机械产品相连接,可以使传统的机械产品结构更加简单,控制更加智能化。
18、这种新一代的机电一体化产品种类繁多,如智能窗户、医疗器械、智能康复诊疗仪等。4. 智能接口。在计算机控制系统中,我们利用单片机来管理和控制各个接口并让它们与主机并行工作,这样不仅可以大大降低成本,还可以极大地提升我们系统的运行速度。例如:在大型数据采集系统中,用单片机对摸/数转换接口进行控制不仅可提高采集速度,而且还能对数据进行预处理,如数字滤波、线性处理、误差休整等。5. 智能民用产品。在全自动洗衣机、儿童玩具、汽车导航仪、收银机、空调等各种民用电器的设计中引入单片机作为系统的控制芯片,不仅大大降低了产品的生产成本,而且极大的提高了产品的性能,也使产品更加智能化。单片机的多机应用系统可分为多
19、能集散系统、局部网络系统两个方面。1. 多能集散系统。多功能集散系统是为了满足工程系统多种外围功能的要求而设置的多机系统。2. 局部网络系统。单片机网络系统的出现,使单片机的发展一进入了一个全新的时代。目前单片机构成的网络系统的主要是分布式测控系统、单片机主要被用于系统中的通信控制,以及构成各测控系统的子系统。由此可见,在这个单片机被广泛应用的时代,单片机已经成为我们生活中不可或缺的一部分,在我们的生活中随处可见它的身影,无论是工业生产还是我们的日常生活都越来越离不开单片机。未来随着单片机技术的不断进步,它的应用将会变得更加广泛。3.传感器模块和显示模块3.1 传感器模块转速测量的方法大体上可
20、以分为两类,一类是比较传统简单的直接法,即直接观测机械的旋转运动,测量一定时间内机械旋转的圈数,从而算出机械运动的转速,这种方法不仅比较麻烦而且容易产生较大的误差,我们一般不采用,为了提高测量精度我们决定采用另一种方法间接测量法,即测量由机械转动导致其他物理量的变化,从这些物理量的变化与转速的关系来得到转速,这里我们一般需要传感器来把物体的转速转化成电压电流之类的物理量,便于我们后期处理。同时从测速仪是否与转轴接触又可以分为接触式,非接触式。目前最流行的转速测量方法有以下几种:霍尔元件测速法、离心式转速表测速法、测速发电机测速法、漏磁测速法、闪电测速法和震动测速法。本设计我准备采用L3G420
21、0三轴陀螺仪(如图2)角速度传感器模块,用来采集被测量的物体的转速信号。大名鼎鼎的IPhone4手机上 用的就是这款传感器,L3G4200D是一个低功率的三轴陀螺仪,它提供了三种不同的用户可选择全量表(250 /500 /2000dps)。它包括一个传感元件和一个集成电路接口,能够实时的输出代表了被测物体转速的数字脉冲信号,我们在单片机当中进行编程对该信号进行解读并驱动1602LCD显示屏对结果进行显示。该数字陀螺仪可以让用户设定全部量程,量程范围从250dps2000dps,超广泛的测量范围使得该器件适合测量多种不同的运动,我们可以根据所需测量的物体来自主选择合适的量程。这款器件不仅包含一个
22、16位数据的输出端口,还具有可配置的高低通滤波器等嵌入式数字功能,这些都是的我们的测量更加简单。就算时间推移或温度变化,这款器件仍然保持连续稳定的输出,原理图如图3所示。 图2 图33.2 液晶显示模块本设计使用LCD1602显示器作为转速仪的显示模块。LCD1602的内部控制芯片为HD44780,它可以同时显示32个字符,功能强大,结构简单,不仅如此,它还具有低功耗,可显示内容丰富,轻巧等诸多优点。它采用单+5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比。LCD1602 外观如图4(a) 所示。1602 字符型LCD 模块的管脚分布如图4(b) 所示, 其管脚各功能如表1 所示
23、。图4 (a) LCD1602外观图 (b) LCD1602管脚分布图4.整体设计4.1硬件部分设计4.1.1电源部分如图5所示是一个带有桥式整流电路的电容滤波的7808稳压的稳压电路,通过变压器将220V的交流电通过这些环节得到5V左右的交流电压,以便提供单片机的工作电压。图54.1.2 复位电路MCS-51单片机的复位电路是用来执行单片机的初始化操作。单片机开始运行时,都需要先复位,其作用是使CPU和系统中的其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。下图所示是本系统的复位电路。图
24、6复位电路复位电路的工作机制:如图6所示电容CJ3可以起到按键去除抖动的作用,这里的电容还有一个更重要的作用就是上电复位,因为考虑到芯片刚刚上电时由于供电不稳定而做出错误的计算,所以增加一个上电复位以达到延时启动CPU的目的,使芯片能够正常工作。虽然现在很多芯片自带了上电延时功能,但是我们一般还是会增加额外的上电复位电路,提高可靠性。 上电复位是如此工作的,此时不用考虑按键和图中1K电阻的作用。上电瞬间,电压VCC短时间内从0V上升到5V,这一瞬间相当于交流电,电容相当于导线,5V的电压全部加在10K电阻上,也就是说,这时RST的电平状态为高电平。但是从上电开始,电容自己就慢慢充电,其两端电压
25、呈曲线上升,最终达到5V,也就是说其正端电位为5V,负端电位为0V,其负端也就正好是RST,此时RST为低电平,单片机开始正常工作。添加按键是为了手动复位,一般那个1K电阻可以不加。当按键按下时,电容两端构成回路并放电,使单片机的RST端重新变为高电平,按键抬起时电容又充电使RST变回低电平。4.1.3 晶振电路每一个单片机系统都必须要有晶振电路存在,它的作用是为系统提供基本的时钟信号。晶振就是单片机的心脏,用它的上下变化产生的时钟来触发单片机操作。单片机的运行速度和晶振的频率是成正比的,晶振的频率越高,系统的时钟频率也会越高,单片机的运行速度也会越快。STC89C52单片机内部有一个用于构成
26、振荡器的高增益反相放大器。我们可以利用这个高增益的反相放大器和晶振来构成一个自激振荡器,来作为系统的时钟电路,具体如图7所示,芯片引脚XTAL1是该高增益反相放大器的输入端,输出端为引脚XTAL2。这两个引脚连接晶振和电容,就构成一个稳定的时钟电路。电路中的电容C1、C2典型值通常选择22pF,此系统电路的晶体振荡器的值为11.0592MHz。虽然对外接电容虽然没有严格要求,但电容的大小会影响振荡频率的高低、振荡器的稳定性和起振的速度。陶瓷电容我们的首选,电容值应该选择为22pF。另外,为了更好地保证晶体振荡器稳定而又可靠的工作,在焊接电路时,晶振和电容的位置应该尽量的靠近单片机芯片,以免产生
27、不必要的寄生电容,从而影响晶振电路的正常工作。晶体振荡电路如图7示:图74.2软件部分设计 设计完硬件部分之后,就要来设计软件部分了,一个完整的电子产品是离不开软件的,软件是硬件的灵魂,没有软件的支撑,硬件就是一堆废铁,根本不能发挥出它应有的作用。软件的设计也离不开硬件的支持,我们只有在硬件的基础上设计出合适的硬件才能组成完美的产品。我们首先要明白系统对软件的需求,然后分析问题的实质,找到解决问题的办法。然后提出程序的整体设计方案和各个模块的设计方案。通过整理发现,单片机需要识别传感器传送来的信号,再经过计算后驱动数码管显示结果。我们需要画出系统的流程图,一步一步进行设计。在此使用C语言来编写
28、程序。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:
29、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,开放中断。
30、ET2:定时器/计数器T2的溢出中断允许位 ES:串行口中断允许位。 ET1:定时器/计数器T1的溢出中断允许位。 EX1:外部中断 INT1的中断允许位。ET0:定时器/计数器T0的溢出中断允许位。 EX0:外部中断 INT0的中断允许位。 4.2.3 程序流程图1、主程序流程图8显示开始初始化定时器计时器刷新数码管延时2ms 图8流程图2、显示子程序流程图9开始显示缓存初始化LED显示初始化数码显示图9示子程序流程图3、定时计数子程序流程图10开定时器开计数器定时0.5s计数0.5s读出计数器值并清零计数器定时重新装初始值并启动定时器开始图10时计数子程序5.系统调试5.1硬件调试在焊接好
31、整个仪器后,首先进行脱机调试,仔细检查各个引脚焊接是否正确,是否有虚焊的,各个元器件型号是否正确,焊接位置和焊接方法是否正确。并用万用表按照原理图对所焊电路进行一步一步仔细地检查,确保焊接无误。最后再联机调试,接通电源,对各个输出端的输出信号波形进行分析。5.2软件调试首先根据程序框图编写好程序,用软件进行调试。调试时先用软件进行编译仿真,检查是否有语法错误。然后开始执行,看程序的运行结果是否符合预期的设计,如果不符合,就不断进行修改,直到符合要求。其次是对每个模块中的子程序进行调试,可利用软件进行单步运行和断点运行调试。通过检查各个I/O口状态,检测执行结果是否符合设计要求。总结经过三个多月
32、的紧张学习和工作,我终于完成了最后的毕业设计。国内外有多种新型的转速测量仪,可以说我所设计的是最简单的一种。但是这已经涵盖了我大学四年所学习的所有内容。一方面是单片机的应用,另一方面是程序的编写,要想顺利的完成一项电子设计,我们不仅需要了解和学习书本上的专业知识,而且还要熟练使用Altium Designer、Matlab等各种软件。通过这次毕业设计,我认识到了自己的不足,刚开始的时候就产生了畏难的情绪,总感觉做不出来。都说万事开头难,当设计进行到一定程度之后,我发现并不是像想象中的那么难,只是自己的专业知识还是远远不够的,后悔大一开始的时候没有好好学习。这也让我认识到了学习的重要性,在这次毕
33、业设计的过程中,我是一边学习,一边实践,才艰难的完成了我的毕设。在以后的工作生活中我会树立起终身学习的目标,不断地完善自己的专业技能并且跟上时代的脚步,成为对社会有用的人才。其实做什么事情都是一样只要有恒心,就一定能完成。虽说万事开头难,但是世上无难事,只怕有心人,不管是什么样的困难,只要我们肯努力肯吃苦,就没有战胜不了的困难。在这次毕业设计的几个月中,使我深深地体会到团队合作精神的重要性。一个人是很难做到的,只有大家在一起研究讨论才能完成。在对课题研究中,我们往往会遇到各种各样的问题,很多问题都不是我们单枪匹马可以解决的,这就需要们得到老师和同学的帮助,遇到不懂的地方我们一定要学会咨询老师,
34、学会和同学要探讨,交流不同意见,千万不可闭门造车。我在老师的鼓励和帮助下不断进步,最终还是在一定程度上完成了这次毕业设计。在这里,我要感谢我的导师闫老师,是她的认真负责和不断督促才让我找到了前进的方向和动力,可以说我能够完成这项毕业设计离不开闫老师的辛勤付出。附录一:元器件清单元器件清单序号名称规格型号数量封装1.单片机STC89C511DIP402.桥式整流器13.稳压管780514.电源插座15.电解电容100UF/50V1RB.2/.410UF/50V26.瓷片电容30PF2RAD0.17.独石电容0.118.按键39.LED发光二极管1RAD0.110.晶振6MHz1XTAL111.电
35、阻2K4RAD0.4100810K12001510112.LED数码管LCD16021附录二:硬件部分电路图附录三:软件程序#include #include /Keil library #include /Keil library#include #define uchar unsigned char#define uint unsigned int#define DataPort P0 /LCD1602数据端口sbit SCL=P10; /IIC时钟引脚定义sbit SDA=P11; /IIC数据引脚定义sbit LCM_RS=P20; /LCD1602命令端口sbit LCM_RW=P2
36、1; /LCD1602命令端口sbit LCM_EN=P22; /LCD1602命令端口 /*L3G4200D内部寄存器地址*#define WHO_AM_I 0x0F#define CTRL_REG1 0x20#define CTRL_REG2 0x21#define CTRL_REG3 0x22#define CTRL_REG4 0x23#define CTRL_REG5 0x24#define REFERENCE 0x25#define OUT_TEMP 0x26#define STATUS_REG 0x27#define OUT_X_L 0x28#define OUT_X_H 0x29
37、#define OUT_Y_L 0x2A#define OUT_Y_H 0x2B#define OUT_Z_L 0x2C#define OUT_Z_H 0x2D#define FIFO_CTRL_REG 0x2E#define FIFO_SRC_REG 0x2F#define INT1_CFG 0x30#define INT1_SRC 0x31#define INT1_TSH_XH 0x32#define INT1_TSH_XL 0x33#define INT1_TSH_YH 0x34#define INT1_TSH_YL 0x35#define INT1_TSH_ZH 0x36#define
38、 INT1_TSH_ZL 0x37#define INT1_DURATION 0x38#defineSlaveAddress 0xD2 /定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改typedef unsigned char BYTE;typedef unsigned short WORD;uchar dis4; /显示数组BYTE BUF8; /接收数据缓存区 uchar ge,shi,bai,qian,wan; /显示变量int dis_data; /变量float temp; void delay(unsigned int k);void InitLcd()
39、; /初始化lcd1602void InitL3G4200D(); /初始化L3G4200Dvoid WriteDataLCM(uchar dataW);void WriteCommandLCM(uchar CMD,uchar Attribc);void DisplayOneChar(uchar X,uchar Y,uchar DData);void DisplayListChar(uchar X,uchar Y,uchar *DData,L);void Single_WriteL3G4200D(uchar REG_Address,uchar REG_data); /单个写入数据uchar S
40、ingle_ReadL3G4200D(uchar REG_Address); /单个读取内部寄存器数据 /-void Delay5us();void L3G4200D_Start();void L3G4200D_Stop();void L3G4200D_SendACK(bit ack);bit L3G4200D_RecvACK();void L3G4200D_SendByte(BYTE dat);BYTE L3G4200D_RecvByte();void L3G4200D_ReadPage();void L3G4200D_WritePage();void display_x();void di
41、splay_y();void display_z();/*/void lcd_printf(uchar *s,int temp_data)if(temp_data0)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; /*/void delay(unsigned int k)unsigned int i,j;fo
42、r(i=0;ik;i+)for(j=0;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;/*/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)