直流电机转速控制院赛报告

更新时间:2024-05-22 07:59:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

杭州电子科技大学信息工程学院院赛设计报告

杭州电子科技大学信息工程学院

项目设计报告

项目:直流电机转速控制

学生姓名 指导教师 完成日期 2016年4月27日

1

杭州电子科技大学信息工程学院院赛设计报告

摘要

电机在各行各业发挥着重要的作用,而电机转速是电机重要的性能指标之一,因而测量电机的转速和电机的调速,使它满足人们的各种需要,更显得重要,而且随着科技的发展,PWM调速成为电机调速的新方式。

随着数字技术的迅速发展,微控制器在社会的各个领域得到了广泛的应用,由于数字系统有着模拟系统所没有的优势,如抗干扰性强、便于和PC机相联、系统易于升级维护。

本设计是以单片机AT89S52和L298控制的直流电机脉宽调制调速系统。利用AT89S52芯片进行低成本直流电动机控制系统的设计,能够简化系统构成、降低系统成本、增强系统性能、满足更多应用场合的需要。系统实现对电机的正转、反转、急停、加速、减速的控制,以及PWM的占空比在LCD上的实时显示。

关键词 直流电机;AT89S52;PWM调速;L298

1

杭州电子科技大学信息工程学院院赛设计报告

Abstract

Motors play important roles in all walks of life and the rotation speed of motors is one of the vatal performance indexs.In addition,it is more important to meet people’s demands by testing the rotation speed and the speed governing of motors.What’s more ,with the development of science,a new way of speed governing turned up which called PWM.

With the rapid development of digital technology, micro-controller in all areas of society have been widely used.Because digital system has many advantages which analog system does not have,such as strong anti-interference, simple interface with the PC, easy upgrade and maintenance for system.

This project is a speed governing system of the pulse width of DC motor controlled by microcontroller AT89S52 and L298.Making the use of the chip of AT89S52 ,I design a controlling system of DC motor of low cost.It can simplify the system structure reduce system cost,strengthen system performance and meet more needs

from

more

applications.And

the

system

can

control

the

corotation,reversal,scraming,accelerating and slowdown of motors and display the duty ratio of PWM on LCD in real time.

Keywords DC Motor AT89S52 PMW Speed Automatic L298

2

杭州电子科技大学信息工程学院院赛设计报告

目 录

摘要 .................................................................................................................................................. 1 Abstract ............................................................................................................................................ 2 第一章 绪论 ..................................................................................................................................... 1

1.1直流电机的介绍 ................................................................................................................. 1

1.1.1直流电机的发展 ...................................................................................................... 1 1.1.2直流电机控制方法和工作原理 .............................................................................. 1 1.2单片机及微处理器控制系统的发展 ................................................................................. 2 第二章 总体方案 ............................................................................................................................. 4

2.1系统框架设计 ..................................................................................................................... 4 2.2设计思路 ............................................................................................................................. 4 第三章 PWM脉宽调制原理 .......................................................................................................... 6

3.1 PWM调速原理 .................................................................................................................. 6 3.2 PWM调速方法 .................................................................................................................. 6 3.3 PWM实现方式 .................................................................................................................. 7 3.4 PWM控制流程图 .............................................................................................................. 7 第四章 系统硬件设计 ..................................................................................................................... 8

4.1系统基本组成 ..................................................................................................................... 8

4.1.1硬件模块组成 .......................................................................................................... 8 4.1.2单片机整个控制模块 .............................................................................................. 8 4.2 AT89S52的简介 ................................................................................................................. 8

4.2.1 AT89S52主要性能 .................................................................................................. 8 4.2.2 AT89S52各引脚功能介绍 ...................................................................................... 9 4.3独立式键盘控制模块(也可用无线遥控控制) ........................................................... 10 4.4 L298电机驱动模块 ......................................................................................................... 11

4.4.1 L298电机驱动简介 .............................................................................................. 11 4.4.2 L298内部的原理 .................................................................................................. 11 4.4.3 L298的逻辑功能 .................................................................................................. 12 4.4.4本系统中L298的连接 ......................................................................................... 13 4.5 光电测速模块 .................................................................................................................. 13

4.5.1光电测速的参数 .................................................................................................... 13 4.5.2光电测速的原理 .................................................................................................... 14 4.5.3测速模块的电路图: ............................................................................................ 15 4.5.4测速模块流程图 .................................................................................................... 15 4.6 LCD显示模块 .................................................................................................................. 16

4.6.1 1602LCD引脚功能说明 ....................................................................................... 16 4.6.2 1602LCD的RAM地址映射及标准字库表 ........................................................ 16 4.6.3 液晶显示模块的设计 ........................................................................................... 18 4.7 红外控制模块、蜂鸣器模块及其指示灯模块 ............................................................. 19

4.7.1红外线简介 ............................................................................................................ 19 4.7.2蜂鸣器简介 ............................................................................................................ 19 4.7.3 LED简介 ............................................................................................................... 19 4.7.4本系统中红外控制蜂鸣器及其指示灯模块的连接 ............................................ 19

3

杭州电子科技大学信息工程学院院赛设计报告

第五章 系统软件设计 ................................................................................................................... 20

5.1主程序流程图 ................................................................................................................... 20 5.2总硬件图 ........................................................................................... 错误!未定义书签。 结论 ................................................................................................................................................ 21 致谢 ................................................................................................................................................ 21 参考文献 ........................................................................................................ 错误!未定义书签。 附录 ................................................................................................................ 错误!未定义书签。 附录一:程序流程图 ............................................................................. 错误!未定义书签。 附录二:程序 ......................................................................................... 错误!未定义书签。

4

杭州电子科技大学信息工程学院院赛设计报告

第一章 绪论

1.1直流电机的介绍

1.1.1直流电机的发展

直流电动机在冶金、矿山、化工、交通、机械、纺织、航空等领域中已经得到广泛的应用。而以往直流电动机的控制只是简单的控制,很难进行调速,不能实现智能化。如今,直流电动机的调速控制已经离不开单片机的支持,单片机应用技术的飞速发展促进了自动控制技术的发展,使人类社会步入了自动化时代,单片机应用技术与其他学科领域交叉融合,促进了学科发展和专业更新,引发了新兴交叉学科与技术的不断涌现。现代科学技术的飞速发展,改变了世界,也改变了人类的生活。由于单片机的体积小、重量轻、功能强、抗干扰能力强、控制灵活、应用方便、价格低廉等特点,计算机性能的不断提高,单片机的应用也更加广泛特别是在各种领域的控制、自动化等方面。

在实际应用中,电动机作为把电能转换为机械能的主要设备,一是要具有较高的能量转换效率;二是应能根据生产工艺的要求调整转速。电动机的调速性能如何对提高产品质量、提高劳动生产率和节省电能有着直接的决定性影响。因此,调速技术一直是研究的热点。

1.1.2直流电机控制方法和工作原理

直流电动机转速的控制方法可分为两类:励磁控制法与电枢电压控制法。励磁控制法控制磁通,其控制功率虽然小但低速时受到磁场饱和的限制,高速时受到换向火花和转向器结构强度的限制,而且由于励磁线圈电感较大动态响应较差。所以常用的控制方法是改变电枢端电压调速的电枢电压控制法。

传统的改变端电压的方法是通过调节电阻来实现的,但这种调压方法效率低。随着电力电子技术的发展,创造了许多新的电枢电压控制方法。其中脉宽调制(Pulse Width Modulation,PWM)是常用的一种调速方法。其基本原理是用改变电机电枢电压的接通和断开的时间比(即占空比)来控制马达的速度,在脉宽调速系统中当电机通电时,其速度增加,电机断电时其速度降低。只要按照一定的规律改变通断电的时间,就可使电机的速度保持在一稳定值上。

直流电机可按其结构、工作原理和用途等进行分类,其中根据直流电机的用途可分为以下几种:直流发电机(将机械能转化为直流电能)、直流电动机(将

1

杭州电子科技大学信息工程学院院赛设计报告

直流电能转化为机械能)、直流测速发电机(将机械信号转换为电信号)、直流伺服电动机(将控制信号转换为机械信号)。

直流电机电路模型如图1-1所示,磁极N、S间装着一个可以转动的铁磁圆柱体,圆柱体的表面上固定着一个线圈abcd。当线圈中流过电流时,线圈受到电磁力作用,从而产生旋转。根据左手定则可知,当流过线圈中电流改变方向时,线圈的方向也将改变,因此通过改变线圈电路的方向实现改变电机的方向。直流电机模型见图1-1。

图1-1 直流电动机电路模型

图1.1 直流电机工作N+-AabcBdS

1.2单片机及微处理器控制系统的发展

单片微型计算机的诞生是计算机发展史上的一个新的里程碑。近年来,随着技术的发展和进步,以及市场对产品功能和性能的要求不断提高,直流电动机的应用更加广泛,尤其是在智能机器人中的应用。直流电动机的起动和调速性能、过载能力强等特点显得十分重要,为了能够适应发展的要求,单闭环直流电动机的调速控制系统得到了很大的发展。而作为单片嵌入式系统的核心—单片机,正朝着多功能、多选择、高速度、低功耗、低价格、大存储容量和强I/O功能等方向发展。随着计算机档次的不断提高,功能的不断完善,单片机已越来越广泛地应用在各种领域的控制、自动化、智能化等方面,特别是在直流电动机的调速控制系统中。这是因为单片机具有很多优点:体积小,功能全,抗干扰能力强,可靠性高,结构合理,指令丰富,控制功能强,造价低等。所以选用单片机作为控制系统的核心以提高整个系统的可靠性和可行性。

早期直流传动的控制系统采用模拟分离器件构成,由于模拟器件有其固有的缺点,如存在温漂、零漂电压,构成系统的器件较多,使得模拟直流传动系统的控制精度及可靠性较低。随着计算机控制技术的发展,微处理器已经广泛使用于

2

杭州电子科技大学信息工程学院院赛设计报告

直流传动系统,实现了全数字化控制。由于微处理器以数字信号工作,控制手段灵活方便,抗干扰能力强。所以,全数字直流调速控制精度、可靠性和稳定性比模拟直流调速系统大大提高。所以,直流传动控制采用微处理器实现全数字化,使直流调速系统进入一个崭新的阶段。

微处理器诞生于上个世纪七十年代,随着集成电路大规模及超大规模集成电路制造工艺的迅速发展,微处理器的性价比越来越高。此外,由于电力电子技术的发展,制作工艺的提升,使得大功率电子器件的性能迅速提高。为微处理器普遍用于控制电机提供了可能,利用微处理器控制电机完成各种新颖的、高性能的控制策略,使电机的各种潜在能力得到充分的发挥,使电机的性能更符合工业生产使用要求,还促进了电机生产商研发出各种如步进电机、无刷直流电机、开关磁阻电动机等便于控制且实用的新型电机,使电机的发展出现了新的变化。

对于简单的微处理器控制电机,只需利用用微处理器控制继电器、电子开关元器件,使电路开通或关断就可实现对电机的控制。现在带微处理器的可编程控制器,已经在各种的机床设备和各种的生产流水线中普遍得到应用,通过对可编程控制器进行编程就可以实现对电机的规律化控制。对于复杂的微处理器控制电机,则要利用微处理器控制电机的电压、电流、转矩、转速、转角等,使电机按给定的指令准确工作。通过微处理器控制,可使电机的性能有很大的提高。目前相比直流电机和交流电机他们各有所长,如直流电机调速性能好,但带有机械换向器,有机械磨损及换向火花等问题;交流电机,不论是异步电机还是同步电机,结构都比直流电机简单,工作也比直流电机可靠,但在频率恒定的电网上运行时,它们的速度不能方便而经济地调节[2]。高性能的微处理器如DSP (DIGITAL SIGNAL PROCESSOR即数字信号处理器)的出现,为采用新的控制理论和控制策略提供了良好的物质基础,使电机传动的自动化程度大为提高。在先进的数控机床等数控位置伺服系统,已经采用了如DSP等的高速微处理器,其执行速度可达数百万兆以上每秒,且具有适合的矩阵运算。

3

杭州电子科技大学信息工程学院院赛设计报告

第二章 总体方案

2.1系统框架设计

方案说明:直流电机PWM调速系统以AT89S52单片机为控制核心,由命令输入模块、LCD显示模块及电机驱动模块组成。采用独立式键盘作为命令的输入,单片机在程序控制下,定时不断给L298直流电机驱动芯片发送PWM波形,完成电机正,反转和急停控制;同时单片机不停的将PWM脉宽调制占空比送到LCD数码管完成实时显示,见图2-1。

图2-1 系统框架设计

采用传统的直流电机调速系统的模拟电路容易随时间漂移,会产生一些不必要的热损耗,以及对噪声敏感等。而在用了PWM技术后,避免了以上的缺陷,实现了用数字方式来控制模拟信号,可以大幅度降低成本和功耗。另外,由于PWM 调速系统的开关频率较高,仅靠电枢电感的滤波作用就可获得平稳的直流电流,低速特性好;同样,由于开关频率高,快速响应特性好,动态抗干扰能力强,可以获得很宽的频带;开关器件只工作在开关状态,主电路损耗小,装置效率高。PWM 具有很强的抗噪性,且有节约空间、比较经济等特点。

2.2设计思路

直流电机PWM控制系统的主要功能包括:实现对直流电机的加速、减速以及电机的正转、反转和急停(暂停),能够很方便的实现电机的智能控制。

主体电路:即直流电机PWM控制模块。这部分电路主要由AT89S52单片机的I/O端口、定时计数器、外部键盘等控制直流电机的加速、减速以及电机的正转和反

4

杭州电子科技大学信息工程学院院赛设计报告

转,能够很方便的实现电机的智能控制。其间是通过AT89S52单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。该直流电机PWM控制系统由以下电路模块组成:

设计输入部分:这一模块主要是利用独立式键盘来实现对直流电机的加速、减速以及电机的正转、反转、急停控制和固定转速的调节。

设计控制部分:主要由AT89S52单片机的外部键盘扩展电路组成。直流电机PWM控制实现部分主要由一些二极管、电机和L298直流电机驱动模块组成。

设计测速部分:主要有光电对管和AT89S52实现。

设计显示部分: LCD数码管显示部分,实现对速度实时显示。

5

杭州电子科技大学信息工程学院院赛设计报告

第三章 PWM脉宽调制原理

3.1 PWM调速原理

PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。PWM可以应用在许多方面,比如:电机调速、温度控制、压力控制等等。

在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”,见图3-1所示。

图3-1 PWM信号的占空比

设电机始终接通电源时,电机转速最大为Vmax,设占空比为D= t1 / T,则电机的平均速度为Va = Vmax * D,其中Va指的是电机的平均速度;Vmax 是指电机在全通电时的最大速度;D = t1 / T是指占空比。

由上面的公式可见,当我们改变占空比D=t1/T时,就可以得到不同的电机平均速度Va,从而达到调速的目的。严格来说,平均速度Va与占空比D并非严格的线性关系,但是在一般的应用中,我们可以将其近似的看成是线性关系。

3.2 PWM调速方法

基于单片机类由软件来实现PWM:在PWM调速系统中占空比D是一个重要参数在电源电压Ud不变的情况下,电枢端电压的平均值取决于占空比D的大小,改变D的值可以改变电枢端电压的平均值从而达到调速的目的。改变占空比D的值有三种方法:

A、定宽调频法:保持t1不变,只改变t2,这样使周期(或频率)也随之改变。 B、调宽调频法:保持t2不变,只改变t1,这样使周期(或频率)也随之改变。 C、定频调宽法:保持周期T(或频率)不变,同时改变t1和t。

前两种方法在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与

6

杭州电子科技大学信息工程学院院赛设计报告

系统的固有频率接近时,将会引起振荡,因此常采用定频调宽法来改变占空比从而改变直流电动机电枢两端电压。利用单片机的定时计数器外加软件延时等方式来实现脉宽的自由调整,此种方式可简化硬件电路,操作性强等优点。

3.3 PWM实现方式

方案一:采用定时器做为脉宽控制的定时方式,这一方式产生的脉冲宽度极其精确,误差只在几个us。

方案二:采用软件延时方式,这一方式在精度上不及方案一,特别是在引入中断后,将有一定的误差。故采用方案一。

3.4 PWM控制流程图

在本设计中PWM脉冲调制的控制流程见下图3-2。

图3-2 PWM控制流程

7

杭州电子科技大学信息工程学院院赛设计报告

第四章 系统硬件设计

4.1系统基本组成

4.1.1硬件模块组成

(1)单片机控制模块 (2)L298电机驱动模块 (3)LCD显示模块 (4)独立键盘控制模块 (5)光电测速模块

(6)红外控制模块、蜂鸣器模块及其指示灯模块

4.1.2单片机整个控制模块

直流电机调速系统的控制模块这里利用定时计数器让单片机P2口的P2.0引脚输出占空比不同的方波,然后经驱动芯片L298放大后控制直流电机。驱动芯片的输入电压是两引脚的电压差,在调速时一根引脚线为低电平,另一个引脚产生调速方波,这样两个引脚的电压差就可通过控制其中一个引脚来控制。当需要改变电机转动方向时,两个引脚的输出相反。

定时计数器50us中断一次,就使P2.0产生一个高电平或低电平。占空比为高电平脉冲个数占一个周期总脉冲个数的百分数。一个周期加在电机两端的电压为脉冲高电压乘以占空比。占空比越大,加在电机两端的电压越大,电机转动越快。电机的平均速度等于在一定的占空比下电机的最大速度乘以占空比。当我们改变占空比时,就可以得到不同的电机平均速度,从而达到调速的目的。

4.2 AT89S52的简介

4.2.1 AT89S52主要性能

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

与MCS-51单片机产品兼容;8K字节在系统可编程Flash存储器;1000次擦写

8

杭州电子科技大学信息工程学院院赛设计报告

周期;全静态操作:0Hz~33Hz;三级加密程序存储器;32个可编程I/O口线;三个16位定时器/计数器;六个中断源;全双工UART串行通道;低功耗空闲和掉电模式;掉电后中断可唤醒;看门狗定时器;双数据指针;掉电标识符。

4.2.2 AT89S52各引脚功能介绍

1234567891011121314151617181920P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTP3.0/RXDP3.1/TXDP3.2/!INT0P3.3/!INT1P3.4/T0P3.5/T1P3.6/!WRP3.7/!RDXTAL2XTAL1GNDU?VCCAD0/P0.0AD1/P0.1AD2/P0.2AD3/P0.3AD4/P0.4AD5/P0.5AD6/P0.6AD7/P0.7!EA/VPPALE/!PROG!PSENA15/P2.7A14/P2.6A13/P2.5A12/P2.4A11/P2.3A10/P2.2AP/P2.1A8/P2.04039383736353433323130292827262524232221 图4-1 AT89S52单片机各引脚

AT89S52 有6个中断源:两个外部中断(INT0 和INT1),三个定时中断(定时器0、1、2)和一个串行中断。这些中断每个中断源都可以通过置位或清除特殊寄存器IE中的相关中断允许控制位分别使得中断源有效或无效。IE还包括一个中断允许总控制位EA,它能一次禁止所有中断。

AT89S52内部具有看门狗定时器及3个16位可编程定时器/计数器。16位是指

16他们都是由16个触发器构成,故最大计数模值为2?1。可编程是指它们的工作方式由指令来设置,或者当计数器用,或者当定时器用,并且记数(定时)的范围也可以由指令来设置。这种控制功能是通过定时器方式控制器TMOD来完成的。

存储器结构:MCS-51器件有单独的程序存储器和数据存储器。外部程序存储器和数据存储器都可以64K寻址。程序存储器:如果EA引脚接地,程序读取只从外部存储器开始。对于 89S52,如果EA 接VCC,程序读写先从内部存储器(地址为0000H~1FFFH)开始,接着从外部寻址,寻址地址为:2000H~FFFFH。

数据存储器:AT89S52 有256 字节片内数据存储器。

9

杭州电子科技大学信息工程学院院赛设计报告

4.3独立式键盘控制模块(也可用无线遥控控制)

独立式键盘的按键相互独立,每个按键接一根I/O口线,一根I/O口线上的按键工作状态不会影响其它I/O口线的工作状态。同时每个I/O口连接了一个共阳的LED指示灯,因此,通过检测LED的亮灭,即可判断键盘上哪个键被按下(或者哪个无线遥控键被按下),独立式键盘见图4-12。

图4-2 独立式键盘

本设计中有8个独立式按键,具体功能如下: I/O口 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7

按键 S1 S2 S3 S4 S5 S6 S7 S8 表4-1 独立按键功能

具体功能 数值位增加 预设转速选位 启动 正转 反转 加速 减速 暂停 10

杭州电子科技大学信息工程学院院赛设计报告

4.4 L298电机驱动模块

4.4.1 L298电机驱动简介

L298是SGS公司的产品,L298N为15个管角的单块集成电路,高电压,高电流,四通道驱动,设计用L298N来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达)和开关电源晶体管。内部包含4通道逻辑驱动电路,其额定工作电流为 1 A,最大可达 1.5 A,Vss 电压最小 4.5 V,最大可达 46 V;Vs 电压最大值也是 46 V。L298N可直接对电机进行控制,无须隔离电路,可以驱动双电机。

4.4.2 L298内部的原理

L298内部H桥电路,电路得名于“H桥驱动电路”是因为它的形状酷似字母H。4个三极管组成H的4条垂直腿,而电机就是H中的横杠。如图所示,H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。

要使电机运转,必须使对角线上的一对三极管导通。例如,如图4-5所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动(电机周围的箭头指示为顺时针方向)。

图4-3 H桥电路驱动电机顺时针转动

11

杭州电子科技大学信息工程学院院赛设计报告

另一对三极管Q2和Q3导通的情况,电流将从右至左流过电机。当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方向,上图反方向)。

驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要。如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两个三极管直接回到负极。此时,电路中除了三极管外没有其他任何负载,因此电路上的电流就可能达到最大值(该电流仅受电源性能限制),甚至烧坏三极管。基于上述原因,在实际驱动电路中通常要用硬件电路方便地控制三极管的开关。

4.4.3 L298的逻辑功能

当使能端为高电平时,输入端IN1为PWM信号,IN2为低电平信号时,电机正转;输入端IN1为低电平信号,IN2为PWM信号时,电机反转;;IN1与IN2相 同时,电机快速停止。当使能端为低电平时,电动机停止转动。

在对直流电动机电压的控制和驱动中,半导体功率器件(L298)在使用上可以分为两种方式:线性放大驱动方式和开关驱动方式。线性放大驱动方式是半导体功率器件工作在线性区,优点是控制原理简单,输出波动小,线性好,对邻近电路干扰小,缺点为功率器件工作在线性区,功率低和散热问题严重。开关驱动方式是使半导体功率器件工作在开关状态,通过脉调制(PWM)来控制电动机的电压,从而实现电动机转速的控制,L298逻辑功能见表4-2。

IN1 IN2 ENA 电机状态 X 1 0 0 1 X 0 1 0 1 0 1 1 0 0 表4-2 L298逻辑功能 停止 顺时针 逆时针 停止 停止

12

杭州电子科技大学信息工程学院院赛设计报告

4.4.4本系统中L298的连接

L298为直流电机的驱动,在本设计中L298的连接见下图

图4-4 L298的连接

4.5 光电测速模块

4.5.1光电测速的参数

发射管:由红外辐射效率高的材料(常用砷化镓)制成PN结,外加正向偏置电压时,向PN结注入电流激发红外光.

接收管:光敏二极管或光敏三极管,PN结受照射后产生光电流.

红外发光二极管发出红外光(近红外线约0.93μm )。管压降约1.4V ,正向工作电流一般小于20mA。

13

杭州电子科技大学信息工程学院院赛设计报告

图4-5 红外光电管

4.5.2光电测速的原理

红外线发射与接收的方式有两种,其一是直射式,其二是反射式。直射式指发光管和接收管相对安放在发射与受控物的两端,中间相距一定距离;反射式指发光管与接收管并列一起,平时接收管始终无光照,只在发光管发出的红外光线遇到反射物时,接收管收到反射回来的红外光线才工作。

我们采用直射式,也就是码盘

图4-6 码盘

红外发射管的驱动有直流驱动和脉冲驱动两种。

红外发射管在直流驱动方式下,只适合近距离传输。当红外发射管在脉冲驱动方式下,最远传输距离可达20米。

14

杭州电子科技大学信息工程学院院赛设计报告

4.5.3测速模块的电路图:

图4-6 测速模块的电路图

4.5.4测速模块流程图

初始化T0、T1,然后开始定时器T0,接着开启计数器T1,判断是否满足条件,然后关闭计数器用公式计算速度,送到显示。

开始初始化T0,T1开启定时器T0开启计数器T1定时10ms是否满足YN关闭计数器用公式计算速度显示数据

图4-7 测速模块流程图

15

杭州电子科技大学信息工程学院院赛设计报告

4.6 LCD显示模块

4.6.1 1602LCD引脚功能说明

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表4-3所示:

编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 编号 9 10 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 数据 数据 数据 数据 数据 数据 背光源正极 背光源负极 液晶显示偏压 11 数据/命令选择 12 读/写选择 使能信号 数据 数据 13 14 15 16 表4-3:引脚接口说明表 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。

第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。

4.6.2 1602LCD的RAM地址映射及标准字库表

16

杭州电子科技大学信息工程学院院赛设计报告

液晶显示模块是一个慢显示器件,所以在执行每条指令前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3-5是1602的内部显示地址。

图4-8 1602LCD内部显示地址

例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)

+10000000B(80H)=11000000B(C0H)。

在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。其中字符代码与字符图形对应关系如图3-6所示:

17

杭州电子科技大学信息工程学院院赛设计报告

图4-9 1602LCD内部字符表

4.6.3 液晶显示模块的设计

本设计中液晶显示模块的设计如下图4-10所示,该电路实现的功能是:通过AT89S52的P00~P07八个口输出控制信号,控制液晶的8位双向数据线,通过单片机的P1.4、P1.5、P1.6向液晶模块发送命令,控制液晶执行各种命令,其中P1.4控制液晶的使能端(E),当E端由高电平跳变成低电平时,液晶模块执行命令,P1.6控制液晶模块的读写(R/W),高电平时进行读操作,低电平时进行写操作。当P1.5和P1.6共同为低电平时可以写入指令或者显示地址,当P1.5为低电平P1.6为高电平时可以读忙信号,当P1.5为高电平P1.6为低电平时可以写入数据,P1.5控制寄存器的选择(R/S),高电平时选择数据寄存器、低电平时选择指令寄存器。

图4-10 1602的模块电路图

18

杭州电子科技大学信息工程学院院赛设计报告

4.7 红外控制模块、蜂鸣器模块及其指示灯模块

4.7.1红外线简介

在光谱中波长自760nm至400um的电磁波称为红外线,它是一种不可见光。目前几乎所有的视频和音频设备都可以通过红外遥控的方式进行遥控,比如电视机、空调、影碟机等,都可以见到红外遥控的影子。这种技术应用广泛,相应的应用器件都十分廉价,因此红外遥控是我们日常设备控制的理想方式。本设计接在P3.2I/O口。

4.7.2蜂鸣器简介

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。本设计接在P2.3I/O口。

4.7.3 LED指示灯简介

它是半导体二极管的一种,可以把电能转化成光能;常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。本设计接在P2.7I/O口。

4.7.4本系统中红外控制蜂鸣器及其指示灯模块的连接

图4-11 红外控制蜂鸣器及其指示灯模块电路图

19

杭州电子科技大学信息工程学院院赛设计报告

第五章 系统软件设计

直接应用AT89S52的软件方法实现PWM信号输出,这比硬件实现PWM信号成本低,限制少,实现便捷。其流程图如下所示。

5.1主程序流程图

主程序描述:首先运行程序主函数main,进行系统初始化,设置定时/计数器工作方式1,开启T1中断,定时50us。然后进行按键查询,本系统有五个按键,加速、减速、正反转、急停。如果有按键按下,得到相对应的脉冲W,最后利用LCD数码管实时显示速度。流程图见下图:

20

杭州电子科技大学信息工程学院院赛设计报告

结论

通过本次院赛设计,使我们学到了许多书本上无法学到的知识,也使我们深刻体会到单片机技术应用领域的广泛。不仅让我们对学过的单片机知识有了很多的巩固,同时也对单片机这一门学科产生了更大的兴趣。通过本次设计,较系统地掌握有关单片机控制的设计思想和设计方法,主要对51系列单片机的结构、功能、及内部资源,LCD显示器等的了解,并对其进行测试和加以应用的知识得到学习。

在做院赛设计的初期阶段没有头绪。在图书馆里、网上查阅资料,去电子市场认识相应材料,攻克了院赛设计中的道道难题。通过本次院赛设计实践,我们学到了许多东西,知道光靠书本上的东西是不够的,需额外去查资料。无论是在硬件还是软件设计上,我们都遇到了不少的问题,在克服困难的过程中,我们学到了许多,特别是在课堂上学不到的东西如(PWM)。通过这次的院赛设计, 我们体会到应该掌握丰富的理论知识,理论知识是设计的前提,但同时又决不能局限于理论,要多动手才能将理论与实际工作联系起来。在设计过程中,深深感受到自己在对一些器件的了解上,还存在很大差距,对它们的功能,参数都不是太熟悉。但是通过这次理论与实际的结合之后,认识比以前有不少提高,在系统硬件设计及软件设计方面都有了长足的进步。

致谢

经过近半学期的忙碌和工作,本次院赛设计已经接近尾声。在设计过程中,从理论到实践,从构建系统框图到画系统框图,再到具体的电路设计及相关的硬件和软件设计,从学习认识元器件,到最后完成一个系统,在这个过程中学习了许多新的专业知识,同时也学会了许多社会人文知识,锻炼了自己动手动脑的能力。在此,对我们院赛设计提拱指导帮助的所有老师,表示是衷心的感谢,对在设计过程中遇到困难时,得到帮助的朋友、同学,表示诚挚的谢意!

21

杭州电子科技大学信息工程学院院赛设计报告

参考文献

1.王晓明 电动机的单片机控制 北京航空航天大学出版社 2005

2.单片机原理及应用 电子工业出版社 2016 3.谭浩强 C语言

附录一:流程图

22

程序流程图 杭州电子科技大学信息工程学院院赛设计报告

开始键盘扫描NP1.0开关是否为高电平YP1.1正转,是否N为高电平YP1.2反转,是否为高电平YP1.3加速,是否为高电平NP1.3加速,是否N为高电平YP1.4减速,是否NYP1.4减速,是否正转加速为高电平Y反转加速为高电平Y正转减速正转反转减速反转结束

23

总流程图

正反转流程图 杭州电子科技大学信息工程学院院赛设计报告

开始初始化T0,T1开启定时器T0开启计数器T1定时10ms是否满N足Y关闭计数器用公式计算速度显示数据

LCD1602模块流程图 定时器流程图 24

杭州电子科技大学信息工程学院院赛设计报告

附录二:程序

#include #define width 245 sbit S2 = P2^0; //设置转速初值 sbit S3 = P2^1;

//转速初值选位

sbit S4 = P2^7; //暂停 sbit S5 = P2^2; //启动 sbit S6 = P2^3; //转向正 sbit S7 = P2^4; //转向负 sbit S8 = P2^5; //手动调速 sbit S9 = P2^6;

//手动调速

sbit dianji = P1^0; //pwm sbit zhen = P1^1; sbit fu = P1^2;

sbit fm = P1^3; //蜂鸣器 sbit RS = P1^5; sbit RW = P1^6; sbit EN = P1^4;

sbit OKLED = P1^7; //达标led亮 typedef unsigned char INT8U; typedef unsigned char uchar; typedef unsigned int INT16U; typedef unsigned int uint; unsigned int num = 40; //占空比 void delay(unsigned int z); void qudong(); void key(); void key1(); void key2(); void init();

void delay_us(unsigned char a); void speed(); void nums(); void start(); void turn();

25

杭州电子科技大学信息工程学院院赛设计报告

void write_dat(uchar dat); void write_cmd(uchar cmd); void read_busy(); //液晶判忙 void show(); void show_first(); void compare(); void IRcordpro(); void remote();

//红外

//启动函数判断值 //速度比较

unsigned char c = 1;

unsigned char q = 0, w = 0, e = 0, r = 0; //依次分别为数码管高四位值 unsigned char t = 0, y = 0, u = 0, i = 0; //依次分别为数码管低四位值 unsigned char o = 0, p = 0,l = 0;

unsigned char z = 1;// 选定高四位数码管中的一位 unsigned int a,b;//a为设定转速b为实际转速

unsigned int count = 0;//用于存放外部中断1 传来的计数值 unsigned char time = 0 ;

unsigned char time2 = 0;//用于存放计时器中断1的进入次数 unsigned char d ;

unsigned char m = 0;//用于转向判断

uchar IRtime; //储存检测红外高低电平持续时间 uchar IRcord[4]; //储存解码后的4个字节数据 uchar IRdata[33]; //包含起始码在内的33位数据 bit IRpro_ok; //解码后4个字节数据接收完成标志位 bit IRok;

//33位数据接收完成标志

/* ================================================== 主函数

=====================================================*/ void main()

{ start(); //计时器配置 init(); //中断配置 fm = 1;

dianji = 0; show_first();

zhen = 1; //转向的初值 fu = 0; while(1)

26

杭州电子科技大学信息工程学院院赛设计报告

{ c = 1; num = 40;

while(c) //设定转速初值的函数 { show(); write_cmd(0x80 | 0x00); //状态显示 k开始,s停止 write_dat(0x73); turn(); key1(); key2(); speed(); nums(); remote();

if (S5 == 0)

{ c = 0; S5 = 1;

}

} while(1) { key();

key1();

qudong();

show(); //电动机开始运转 write_cmd(0x80 | 0x00); // write_dat(0x73); write_dat(0x74); write_dat(0x61); write_dat(0x72); write_dat(0x74); speed(); nums(); remote(); if(S4 == 0) {

S4 = 1;

显示地址 27

杭州电子科技大学信息工程学院院赛设计报告

break; }

} } }

/* ================================================== 计时器配置程序

=====================================================*/ void start() //计时器0,1的初始化 {

TMOD = 0X12;

TL0 = TH0 = 0;//初始化定时器0寄存器,定时器0溢出一次时间为256个机器周期 }

/* ================================================== 键值输入

=====================================================*/ void key() {

if (S8 == 0) { delay(5); if (S8 == 0) { num = num + 1; if(num > 100) //极限 大 num = 100; }

if (S9 == 0) { delay(5); if (S9 == 0) { num = num - 1; if(num < 1) //极限 小

S8 = 1; while(!S8); }

TH1 = 0Xdc;//10ms TL1 = 0X00; TR1 = 1; TR0 = 1;

28

杭州电子科技大学信息工程学院院赛设计报告

num = 1; S9 = 1; while(!S9);

}

} }

/* ================================================== 驱动函数

=====================================================*/ void qudong()

{ if(num < 5) num = 5; switch(num)

//delay_us(width);

{

case 1 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 2 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 3 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 4 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 5 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 6 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 7 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 8 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 9 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 10 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 11 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 12 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 13 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 14 : dianji = 1 ;delay_us(num);dianji 0;delay_us(width-num);delay_us(width);delay_us(width);break;

case

15

:

dianji

=

1

;delay_us(num);dianji

29 = = = = = = = = = = = = = = =

杭州电子科技大学信息工程学院院赛设计报告

0;delay_us(width-num);delay_us(width);delay_us(width);break; case 16 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 17 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 18 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 19 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 20 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 21 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 22 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 23 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 24 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 25 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 26 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 27 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 28 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 29 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 30 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 31 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 32 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 33 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 34 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 35 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 36 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 37 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 38 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break;

30

;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji

= = = = = = = = = = = = = = = = = = = = = = =

杭州电子科技大学信息工程学院院赛设计报告

case 39 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 40 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 41 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 42 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 43 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 44 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 45 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 46 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 47 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 48 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 49 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 50 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 51 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 52 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 53 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 54 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 55 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 56 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 57 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 58 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 59 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 60 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 61 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break;

case

62

:

dianji

=

1

31 ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji

= = = = = = = = = = = = = = = = = = = = = = = =

杭州电子科技大学信息工程学院院赛设计报告

0;delay_us(width-num);delay_us(width);delay_us(width);break; case 63 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 64 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 65 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 66 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 67 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 68 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 69 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 70 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 71 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 72 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 73 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 74 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 75 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 76 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 77 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 78 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 79 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 80 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 81 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 82 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 83 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 84 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 85 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break;

32

;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji

= = = = = = = = = = = = = = = = = = = = = = =

杭州电子科技大学信息工程学院院赛设计报告

case 86 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 87 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 88 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 89 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 90 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 91 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 92 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 93 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 94 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 95 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 96 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 97 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 98 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 99 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; case 100 : dianji = 1 0;delay_us(width-num);delay_us(width);delay_us(width);break; }

}

/* ================================================== 延时函数

=====================================================*/ void delay(unsigned int z) { unsigned int x,y; for(x = z; x > 0; x--)

for(y = 114; y > 0 ; y--);

}

33

;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji ;delay_us(num);dianji

= = = = = = = = = = = = = = =

杭州电子科技大学信息工程学院院赛设计报告

/* ================================================== 中断配置

=====================================================*/ void init() { }

/* ================================================== 精准延时

=====================================================*/ void delay1(void) //误差 -0.173611111111us 10us {

unsigned char a;

EX0 = 1; //外部中断0打开 IT0 = 1; //负跳变有效 EX1 = 1; //外部中断1打开 IT1 = 1; //负跳变有效 ET1 = 1; //定时器1中断打开 ET0 = 1; //定时器0中断打开 EA = 1;

for(a=3;a>0;a--); /* unsigned char a,b; for(b=1;b>0;b--)

for(a=43;a>0;a--); */ }

void delay_us(unsigned char a) {

unsigned char d;

for(d = 0;d < a;d++) delay1(); }

void key1() {

if(S3 == 0) {

fm = 1;

delay(5);//软件消抖 if(S3 == 0)

34

杭州电子科技大学信息工程学院院赛设计报告

{ z = z + 1; if(z == 5) z = 1;

S3 = 1;

while( !S3 );//松手检测

} }

/*====第一位========*/ if(z == 1) { /* ====加===*/ if(S2 == 0) { fm = 1; delay(5);//软件消抖 if(S2 == 0) {

q = q + 1; if(q > 3) q = 0; S2 = 1;

while( !S2 );

} }

}

/*====第二个单个数码管=========*/ if(z == 2) { /* ====加===*/ if(S2 == 0) { delay(5);//软件消抖 if(S2 == 0) {

w = w + 1; if(w > 9) w = 0; S2 = 1;

while( !S2 );//松手检测

35

本文来源:https://www.bwwdw.com/article/onv7.html

Top