锁具寿命自动检测系统的现状89C51单片机为核心的软硬件设计原理毕业论文.doc_第1页
锁具寿命自动检测系统的现状89C51单片机为核心的软硬件设计原理毕业论文.doc_第2页
锁具寿命自动检测系统的现状89C51单片机为核心的软硬件设计原理毕业论文.doc_第3页
锁具寿命自动检测系统的现状89C51单片机为核心的软硬件设计原理毕业论文.doc_第4页
锁具寿命自动检测系统的现状89C51单片机为核心的软硬件设计原理毕业论文.doc_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

摘 要本文综述了锁具寿命自动检测系统的现状,在总结各种模式的锁具寿命自动检测控制系统利弊的基础上,提出了一种基于89C51的锁具寿命自动检测仪控制系统,并详细介绍了该系统的原理与构成。重点论述了以89C51单片机为核心的软硬件设计原理,利用步进电机和直流电机来模拟实际锁具的上锁与开锁,并给出了硬件原理图和软件设计流程。通过实际运行表明,该系统具有成本低、测试速度快、结构简单、性能稳定等优点,有着良好的市场前景。关键词:89C51;步进电机;直流电机;锁具寿命AbstractThis paper reviews the status quo of the automatic detection system of the locks life ,on the basis of summing up the pros and cons of various modes of automatic detection system of the locks life ,an automatic detection system of the locks life based on 89C51 is presented , and describe the principle and pose of the system in details .The paper focuses on the designing principles of the hardware and software which use the 89C51 microcontroller as the core ,and the system use stepper motor and the DC motor to stimulate the lock and unlock of the actual lock ,and presents the schematic of the hardware and the designing process of the software .The practical application shows that the system has the advantages of low cost ,high speed ,simple structure ,and stability and has good market prospects .Keywords: 89C51; Stepper motor; DC motor;Locks life目录1 绪论11.1 锁具寿命测试仪11.2 选题的背景和意义12 方案论证22.1 方案的提出22.2 方案的可行性分析22.3 结论33 系统硬件设计43.1 系统的总体设计43.2 系统的模块化设计43.2.1 89C51及其外围电路43.2.2 LED显示电路73.2.3 锁型选择电路及故障报警电路93.2.4 232串口电路103.2.5 步进、直流电机及其控制电路114 系统软件设计164.1 C语言介绍164.1.1 C语言的发展164.1.2 C语言的主要功能174.2 程序设计思想184.3 模块化设计194.3.1 显示模块194.3.2 上锁开锁模块204.3.3 锁型模块214.3.4 报警模块274.3.5 延时、显示延时模块275 系统调试295.1 系统硬件调试295.1.1 调试方法295.1.2 调试过程295.1.3 调试结论295.2 系统软件调试295.2.1 Wave6000、Keil简介295.2.2 调试过程305.2.3 调试结果325.3 结论32致 谢33参考文献34附录电路原理图35附录 程序清单361 绪论1.1 锁具寿命测试仪锁具性能系列测试仪所测试的锁具性能指标是指锁具寿命、钥匙拔出力、球形门锁和抽屉锁的扭矩、门锁斜舌和挂锁锁粱闭合力、锁斜舌轴向静压力等。而锁具的寿命测试包括单舌和双舌门锁、球形门锁、抽屉锁、蟹钳形自行车锁、侧开或直开挂锁。锁具性能系列测试仪的测试从宏观上讲可分为两大类,即锁具的耐久性测试和锁具的灵活度及牢固度测试。锁具耐用度测试仪是用来进行锁具寿命测试的专用检测仪器。检测部门用其对生产锁具的企业产品质量进行抽样检测,检测结果是判断锁具是否合格的重要依据。测试时将锁具装在测试仪上,由步进电机通过传动机构带动锁体和钥匙运动,模拟锁具的使用状况,测量其使用寿命。不同种类的锁具其开启次数在相关的标准中都有明确地规定。一般开启次数都在15万次至10万次之间。我国的锁具产品无论其内在质量还是外观都在不断的改进和完善,使锁具产品在防范盗窃事件的发生、保障国家和人民财产的安全、在环境装饰和家庭装饰中都发挥了重要的作用。1.2 选题的背景和意义对于耐久性测试仪器,由于从总体方案判定,采用了单片计算机技术、电子技术,使总体控制系统将机、电有机地结合在一起,不但提高了测试仪器的可靠性,而且还具有很大范围的通用性。从可行性上看,如用传统的机械方式完成这样复杂的动作是完全不可能的。无疑该耐久性测试仪器所具有的价值及近似完善的性能必将在锁具质量监控中发挥重要作用。而且其有些性能可移植于生产过程控制中,对于锁具行业控制手段的提高具有非常积极的意义。2 方案论证2.1 方案的提出锁具寿命自动测试仪是利用89C51单片机来实现的。硬件方面:通过89C51单片机控制步进电机和直流电机模拟现实中锁具的上锁与开锁;利用LED来显示测试锁具的次数;利用拨码开关来选择锁具类型;利用232串口实现程序的下载;当电路发生故障时,用报警电路报警。软件方面:利用C语言和Wave6000编程,再利用SIC-ISP下载到89C51单片机中,实现模拟锁具的选择。2.2 方案的可行性分析当今社会科技不断进步,新的技术推动着社会的发展。就锁具寿命测试仪而言,现在已经发展到很高的水平。PLC技术运用在锁具寿命测试仪上,使锁具寿命测试仪的性能得到了很大的提高。传统的锁具寿命自动测试仪是利用单片机来实现的。现在就其两种方法进行比较。在经济上来比较,PLC的成本要远远高于单片机的成本。因为单片机的技术已经成熟,价格比较便宜,而PLC是新兴的技术,价格上比较昂贵。根据题目要求设计锁具寿命测试仪结构,如图2.1所示。步进电机固定在底座上,在其轴上装夹有锁具,直流电机也固定在底座上,在其轴上安装有齿轮,通过齿轮齿条副,将直流电机的圆周运动变换为钥匙的直线运动。测试前的准备工作:首先把锁具放在锁具卡具里面固定好,然后把钥匙放在钥匙卡具里面卡好,之后根据锁具类型调整测试仪初始位置。步进电机装夹的锁具钥匙钥匙卡具直流电机齿轮齿条副图2.1锁具寿命测试仪结构锁具寿命测试仪测试过程; 直流电机正转将钥匙插入锁具; 步进电机正转锁死斜舌,继续正转锁死方舌; 步进电机反转开启方舌,继续反转开启斜舌; 直流电机反转将钥匙拔出锁具; 记录一次锁具寿命。通过不断的重复试验就可以测试出锁具的寿命。步进电机转动角度是根据步进电机的转速和时间调整的,同样插进钥匙的深度是通过直流电机的速度和时间调整的。2.3 结论综上所述,通过比较发现利用单片机实现锁具寿命自动检测系统设计是可以实现的。3 系统硬件设计3.1 系统的总体设计锁具寿命测试仪控制系统的硬件设计是整个系统设计的基础,硬件设计能否实现直接影响到整个系统。根据题目要求:能连续模拟各种锁具的使用过程,能显示记录锁具使用次数,设计出系统的总体结构。利用拨码开关来实现连续模拟各种锁具,用步进电机和直流电机来模拟锁具的使用过程,用LED来显示锁具的测试次数。该系统设计的电路图见附录。3.2 系统的模块化设计采用模块化的设计思想,再根据题目要求,系统可分为89C51及其外围电路、LED显示电路、锁型选择电路、232串口电路、报警电路和步进、直流电机电路。3.2.1 89C51及其外围电路89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 主要特性 与MCS-51 兼容; 4K字节可编程闪烁存储器; 寿命:1000写/擦循环; 数据保留时间:10年; 全静态工作:0Hz-24Hz; 三级程序存储器锁定; 128*8位内部RAM; 32可编程I/O线; 两个16位定时器/计数器; 5个中断源; 可编程串行通道; 低功耗的闲置和掉电模式; 片内振荡器和时钟电路。 管脚说明89C51管脚图如3.1图所示。图3.1 89C51管脚图Vdd:供电电压。 Vss:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高可用作输入,P1口被外部下拉为低电平时将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高且作为输入。并因此作为输入时,P2口的管脚被外部拉低将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下所示: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取值期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 RST:复位输入。当振荡器复位器件时要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 振荡器特性 XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。输入内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。在本题目中用到的振荡器是 芯片擦除 三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 3.2.2 LED显示电路数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳极数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳极数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴极数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴极数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。共阴、共阳数码管段码表如表3.1。本题目用到共阳极数码管。3和8为公共引脚接,A-7接P0.0口,B-6接P0.1口,C-4接P0.2口,D-2接P0.3口,E-1接P0.4口,F-9接P0.5口,G-10接P0.6口。数码管结构图如图3.2所示,数码管的内部电路见图3.3所示。表3.1 共阴、共阳数码管段码表数字0123456789共阴0x3F0x060x5B0x4F0x660x6D0x7D0x070x7F0x6F共阳0xC00xF90xA40xB00x990x920x820xF80x800x90图 3.2 数码管结构图ABCDEFGDP3,8764219105图3.3 数码管的内部电路数码管电路图如图3.4所示。图3.4 数码管电路图3.2.3 锁型选择电路及故障报警电路题目的一个要求是:能够连续模拟各种锁具的使用过程。每种锁具转动的角度、插入钥匙的深度都不尽相同。这就要求锁具寿命自动测试仪在设计时要考虑锁具的类型选择,基于设计的目的,现设计出四种锁具类型可供选择。电路图如图3.1所示。P3是双向I/O口,数码开关的5脚接P3.5口,6脚接P3.4口,7脚接P3.3口,8脚接P3.1口。在锁具寿命自动检测控制系统中,锁具的寿命总是有限的,当锁具坏了,锁具寿命自动检测控制系统就不能正常工作,这时就发出报警,以提示测试人员测试结束。报警电路如图3.1所示。3.2.4 232串口电路 计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。RS- 232-C接口(又称 EIA RS-232-C)是目前最常用的一种串行通讯接口。典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5+15V,负电平在-5-15V电平。当无数据传输时,线上为TTL,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。接收器典型的工作电平在+3+12V与-3-12V。接口的信号内容实际上RS-232-C的25条引线中有许多是很少使用的,在计算机与终端通讯中一般只使用39条引线。RS-232-C最常用的9条引线的信号内容见表3.2所示 接口的电气特性 在RS-232-C中任何一条信号线的电压均为负逻辑关系。即:逻辑“1”,-5 -15V;逻辑“0”+5 +15V。噪声容限为2V。即要求接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号作为逻辑“1” 。表 3.2引脚序号信号名称符号流向功能2发送数据TXDDTEDCEDTE发送串行数据3接收数据RXDDTEDCEDTE接收串行数据4请求发送RTSDTEDCEDTE请求DCE切换到放送方式5允许发送CTSDTEDCEDCE告诉DTE线路已接通6数据设备准备好DSRDTEDCEDCE准备好7信号地信号公共地8载波检测DCDDTEDCE表示DCE接受到远程载波20数据终端准备好DTRDTEDCEDTE准备好22振铃指示RIDTEDCE表示DCE与线路接通,出现振铃接口的物理结构 RS-232-C接口连接器一般使用型号为DB-25的25芯插头座,通常插头在DCE端,插座在DTE端。一些设备与PC机连接的RS-232-C接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据”、“接收数据”和“信号地”。所以采用DB-9的9芯插头座,传输线采用屏蔽双绞线。 在编制程序完成后通过RS-232串口写到单片机中,结构图如图3.5所示。DB-9的9芯插头座:5脚接地,2接RS-232的14脚,3接RS-232的13脚。RS-232引脚:1脚接电解电容接3脚,2脚接电解电容然后接电源,4脚接电解电容接5脚,6脚接电解电容接地,7、8、9、10脚悬空,11接89C51的P3.0,12接89C51的P3.1,13接DB-9的9芯插头座的3脚,14接DB-9的9芯插头座的2脚,15接地,16接电源。图 3.5 RS-232串口结构图3.2.5 步进、直流电机及其控制电路步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制非常简单。 步进电机的工作原理该步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图3.6是该四相反应式步进电机工作原理示意图。图 3.6 四相反应式步进电机工作原理示意图开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着D、C、B、A方向转动。四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图3.7 a、b、c所示:图3.7 直流电机的工作原理输出或输入为直流电能的旋转电机,称为直流电机,它是能实现直流电能和机械能互相转换的电机。当它作电动机运行时是直流电动机,将电能转换为机械能;作发电机运行时是直流发电机,将机械能转换为电能。直流电机由定子和转子两部分组成,其间有一定的气隙。其构造的主要特点是具有一个带换向器的电枢。直流电机的定子由机座、主磁极、换向磁极、前后端盖和刷架等部件组成。其中主磁极是产生直流电机气隙磁场的主要部件,由永磁体或带有直流励磁绕组的叠片铁心构成。直流电机的转子则由电枢、换向器(又称整流子)和转轴等部件构成。其中电枢由电枢铁心和电枢绕组两部分组成。电枢铁心由硅钢片叠成,在其外圆均匀分布着齿槽,电枢绕组则嵌置于这些槽中。换向器是一种机械整流部件。由换向片叠成圆筒形后,以金属夹件或塑料成型为一个整体。各换向片间互相绝缘。换向器质量对运行可靠性有很大影响。直流电机的励磁方式是指对励磁绕组如何供电、产生励磁磁通势而建立主磁场的问题。根据励磁方式的不同,直流电机可分为下列几种类型。 他励直流电机 励磁绕组与电枢绕组无联接关系,而由其他直流电源对励磁绕组供电的直流电机称为他励直流电机。M表示电动机,若为发电机,则用G表示。永磁直流电机也可看作他励直流电机。 并励直流电机 并励直流电机的励磁绕组与电枢绕组相并联。作为并励发电机来说,是电机本身发出来的端电压为励磁绕组供电;作为并励电动机来说,励磁绕组与电枢共用同一电源,从性能上讲与他励直流电动机相同。 串励直流电机 串励直流电机的励磁绕组与电枢绕组串联后,再接于直流电源。这种直流电机的励磁电流就是电枢电流。 复励直流电机 复励直流电机有并励和串励两个励磁绕组。若串励绕组产生的磁通势与并励绕组产生的磁通势方向相同称为积复励。若两个磁通势方向相反,则称为差复励。不同励磁方式的直流电机有着不同的特性。一般情况直流电动机的主要励磁方式是并励式、串励式和复励式,直流发电机的主要励磁方式是他励式、并励式和和复励式。步进电机,直流电机的电路图如图3.8所示。图 3.8 步进电机,直流电机的电路图4 系统软件设计4.1 C语言介绍C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。4.1.1 C语言的发展C语言的原型ALGOL 60语言。(也称为A语言)1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本可移植的C语言编译程序。即是著名的ANSI C。1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著C语言程序(The C Programming Language),从而使C语言成为当时世界上流行最广泛的高级程序设计语言。1988年,随着微型计算机的日益普及, C语言出现了许多版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准3.C语言的主要特点 。C语言发展迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE PLUS、DBASE 都是由C 语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,像PC- DOS 、WORDSTAR等就是用这种方法编写的。4.1.2 C语言的主要功能随着微型计算机的日益普及,出现了许多C 语言版本。由于没有统一的标准,使得这些C 语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C 语言制定了一套ANSI标准,成为现行的C语言标准。而在这里我们将主要以美国Borland 公司的产品Turbo C2.0作为介绍对象,简要介绍一下C语言的基本知识。 数据类型 在C语言中,每个变量在使用之前必须定义其数据类型。Turbo C有以下几种类型:整型(int)、浮点型(float)、字符型(char)、指针型()、无值型(void)以及结构(struct)和联合(union)。其中前五种是C语言的基本数据类型、后两种数据类型(结构和联合)则是C语言的扩展数据类型。 关键字和标识符、运算符 所谓关键字就是已被C语言本身使用、不能作其它用途的字。例如关键字else,就再不能用作变量名、函数名等。所谓标识符是指常量、变量、语句标号以及用户自定义函数的名称。C标识符的定义十分灵活。 C的运算符非常丰富,主要分为三大类:算术运算符、关系与逻辑运算符、按位运算符。 变量 C规定所有变量在使用前都必须加以说明。一条变量说明语句由数据类型和其后的一个或多个变量名组成,例如“int x”。变量可以在程序中三个地方说明:函数内部、函数的参数定义中或所有的函数外部。根据所定义位置的不同,变量可分为局部变量、形式参数和全程变量。C像其它高级语言一样也使用数组变量。所谓数组就是指具有相同数据类型的变量集,并拥有共同的名字。数组中的每个特定元素都使用下标来访问。 控制流程语句 C提供了丰富、灵活的控制流程语句,主要有:条件语句、循环语句和开关语句。条件语句的一般形式为ifelse。C提供三种基本的循环语句:for语句、while语句和dowhile语句。而在编写程序时,经常会碰到按不同情况分转的多路问题, 这时可用嵌套ifelseif语句来实现,但ifelseif语句使用不方便,并且容易出错。对这种情况,C提供了一个switch开关语句。 指针(point) 学习C语言,指针是较难理解的一个概念。我们知道变量在计算机内占有一块存贮区域(也就是有一个“地址”),变量的值就存放在这块区域之中,在计算机内部,通过访问或修改这块区域的内容来访问或修改相应的变量。C语言中,对于变量的访问形式之一,就是先求出变量的地址,然后再通过地址对它进行访问,这就是指针及指针变量。指针变量的一般定义为“类型标识符标识符”,其中标识符是指针变量的名字,标识符前加了“”号, 表示该变量是指针变量,而最前面的“类型标识符”表示该指针变量所指向的变量的类型。一个指针变量只能指向同一种类型的变量,也就是说,我们不能定义一个指针变量,既能指向一整型变量又能指向双精度变量。 4.2 程序设计思想程序的设计主要是围绕上述的操作来进行,在软件的设计过程中,以实现各个预定功能作为各个模块的设计原则。各独立功能一般都设计了相应的函数,例如文本编辑函数、初始化函数、运行函数等。使所设计的软件具有层次清楚,修改方便等特点。在计算机控制步进电机运动时,要注意在换向时,给出一定的延时。以避免由于机器运行的惯性造成位置的偏差,延时的长短可在实际调试过程中确定。此外,在软件的设计中还对一些常见的错误以及可能发生的误操作进行了必要的处理。出现错误时,软件中设计了报警功能。4.3 模块化设计4.3.1 显示模块在锁具寿命测试仪测试锁具时,会有实时显示测试的次数。下面的程序就是用来显示测量次数。unsigned char code Tab=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;上面一段小程序是共阳数码管段码表,下面的程序是显示程序。void display(unsigned long n) P0=Tabn/10000000; P2=0xfe; delay(10); P0=Tabn%10000000/1000000; /数码管千万位数字 P2=0xfd; delay(10); P0=Tabn%1000000/100000; /数码管百万位数字 P2=0xfb; delay(10); P0=Tabn%100000/10000; /数码管十万位数字 P2=0xf7; delay(10); P0=Tabn%10000/1000; /数码管万位数字 P2=0xef; delay(10); P0=Tabn%1000/100; /数码管千位数字 P2=0xdf; delay(10); P0=Tabn%100/10; /数码管百位数字 P2=0xbf; delay(10); P0=Tabn%10; /数码管十位数字 P2=0x7f; delay(10); /数码管个位数字 P2=0xff;4.3.2 上锁开锁模块上锁函数的主要功能是:把16制代码送到P1口,使步进电机转动void motor_lock(unsigned int a) int i; for(i=0;ia;i+) P1=0x06; /将二进制0000 0110送到P1口 displaydelay(10); /延时 P1=0x05; /将二进制0000 0101送到P1口 displaydelay(10); P1=0x09; /将二进制0000 1001送到P1口 displaydelay(10); P1=0x0A; /将二进制0000 1010送到P1口 displaydelay(10); 停止函数void motor_stop(unsigned int b) int i; for(i=0;ib;i+) P1=0xff; /将二进制1111 1111送到P1口,使步进电机停止转动 displaydelay(10); /延时 解锁函数void motor_unlock(unsigned int c) int i; for(i=0;ic;i+) P1=0x0A; /将二进制0000 1010送到P1口 displaydelay(10); /延时 P1=0x09; /将二进制0000 1001送到P1口 displaydelay(10); P1=0x05; /将二进制0000 0101送到P1口 displaydelay(10); P1=0x06; /将二进制0000 0110送到P1口 displaydelay(10); 4.3.3 锁型模块本程序段是锁具类型的选择,当使用拨码开关选择了锁具类型时,函数就跳转到相应的锁型函数中。如果在测试锁具时出现错误,函数会自动跳转到出错子函数中执行报警提示。 锁型模块的流程图如图4.1所示由于四种锁型在流程图上的表示是一样的,在此就锁型1的流程图作以分析,其它三种锁型也一样。图4.1 锁型模块的流程图锁型选择程序段:while(1) if(K1=0) d=1; if(d=1) chucuo(); else if(L1=0&L2!=0&L3!=0&L4!=0) /若L1为0,L2、L3、L4不为1 lock1(); else if(L2=0&L1!=0&L3!=0&L4!=0) /若L2为0,L1、L3、L4不为1 lock1(); else if(L3=0&L1!=0&L2!=0&L4!=0) /若L3为0,L1、L2、L4不为1 lock1(); else if(L4=0&L1!=0&L2!=0&L3!=0) /若L4为0,L1、L2、L3不为1 lock1(); else display(number); 型锁1测试寿命函数程序段:void lock1(void) displaydelay(20,number); KEY_IN=0; /进钥匙 displaydelay(10,number); /延时并显示 KEY_IN=1; /停止进钥匙 displaydelay(20,number); /延时并显示 motor_lock(1); /锁 motor_stop(5); /停顿 motor_lock(2); /反锁 motor_stop(5); /停顿 motor_unlock(3); /解锁 motor_stop(5); /停顿 displaydelay(20,number); KEY_OUT=0; /出钥匙 displaydelay(10,number); /延时并显示 KEY_OUT=1; /停止进钥匙 displaydelay(20,number); /延时并显示 number+; /测试完毕,测试次数加一 型锁2测试寿命函数程序段:void lock2(void) displaydelay(500,number); KEY_IN=0; /进钥匙 displaydelay(100,number); /延时并显示 KEY_IN=1; /停止进钥匙 displaydelay(500,number); /延时并显示 motor_lock(3); /锁 motor_stop(10); /停顿 motor_lock(7); /反锁 motor_stop(10); /停顿 motor_unlock(10); /解锁 motor_stop(10); /停顿 displaydelay(500,number); KEY_OUT=0; /出钥匙 displaydelay(100,number); /延时并显示 KEY_OUT=1; /停止进钥匙 displaydelay(500,number); /延时并显示 number+; /测试完毕,测试次数加一 型锁3测试寿命函数程序段:void lock3(void) displaydelay(500,number); KEY_IN=0; /进钥匙 displaydelay(100,number); /延时并显示 KEY_IN=1; /停止进钥匙 displaydelay(500,number); /延时并显示 motor_lock(5); /锁 motor_stop(10); /停顿 motor_lock(10); /反锁 motor_stop(10); /停顿 motor_unlock(15); /解锁 motor_stop(10); /停顿 displaydelay(500,number); KEY_OUT=0; /出钥匙 displaydelay(100,number); /延时并显示 KEY_OUT=1; /停止进钥匙 displaydelay(500,number); /延时并显示 number+; /测试完毕,测试次数加一 型锁4测试寿命函数程序段:void lock4(void) displaydelay(500,number); KEY_IN=0; /进钥匙 displaydelay(100,number); /延时并显示 KEY_IN=1; /停止进钥匙 displaydelay(500,number); /延时并显示 motor_lock(8); /锁 motor_stop(10); /停顿 motor_lock(12); /反锁 motor_stop(10); /停顿 motor_unlock(20); /解锁 motor_stop(10); /停顿 KEY_OUT=0; /出钥匙 displaydelay(500,number); displaydelay(100,nu

温馨提示

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

评论

0/150

提交评论