直流电机转速PID控制课程设计报告.doc

上传人:文库蛋蛋多 文档编号:4152780 上传时间:2023-04-07 格式:DOC 页数:51 大小:614.50KB
返回 下载 相关 举报
直流电机转速PID控制课程设计报告.doc_第1页
第1页 / 共51页
直流电机转速PID控制课程设计报告.doc_第2页
第2页 / 共51页
直流电机转速PID控制课程设计报告.doc_第3页
第3页 / 共51页
直流电机转速PID控制课程设计报告.doc_第4页
第4页 / 共51页
直流电机转速PID控制课程设计报告.doc_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《直流电机转速PID控制课程设计报告.doc》由会员分享,可在线阅读,更多相关《直流电机转速PID控制课程设计报告.doc(51页珍藏版)》请在三一办公上搜索。

1、直流电机转速PID控制系统设计学 院: 专业班级: 姓 名: 学 号: 指导老师: 目 录第一章PID简介1第二章直流电机工作原理62.1 工作原理62.2、直流电机PID控制原理方框图7第三章控制系统方案选择103.1 系统设计要求103.2 系统模块设计12第四章硬件设计与实现174.1 硬件设计174.2系统面板图24第五章流程设计265.1 软件设计流程图26第六章程序说明306.1 直流电机部分程序306.2 温度检测部分程序37第七章说明及调试467.1 调试过程467.2 运行结果47第八章课程设计体会49第一章 PID简介PID (比例积分微分,英文全称为Proportion

2、Integration Differentiation)控制器问世至今已有近70年历史,它 以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的 其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或 不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。PID控制器就是根据系统的误差,利用比例、 积分、微分计算出控制量进行控制的。PID控制器的参数整定是控制系统设计

3、的核心内容。它是根据被 控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。它主要是 依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主 要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。PID控制器参数的工程整定方法,主要有临界比例法、反应 曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数

4、,都需 要在实际运行中进行最后调整与完善。现在一般采用的是临界比例法。利用该方法进行 PID控制器参数的整定步骤如下:(1)首先预选择一个足够短的采样周期让系统工作;(2)仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡, 记下这时的比例放大系数和临界振荡周期;(3)在一定的控制度下通过公式计算得到PID控制器的参数。 PID(比例-积分-微分)控制器作为最早实用化的控制器已有50多年历史,现在仍是应用最广泛的工业控制器。PID控制器简单易懂,使用中不需精确的系统模型等先决条件,因而成为应用最为广泛的控制器。 PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。其输入e

5、(t)与输出u (t)的关系为 u(t)=kp(e(t)+1/TIe(t)dt+TD*de(t)/dt) 式中积分的上下限分别是0和t 因此它的传递函数为:G(s)=U(s)/E(s)=kp(1+1/(TI*s)+TD*s)其中kp为比例系数; TI为积分时间常数; TD为微分时间常数。本次课程设计就是应用数字PID模型作单片机控制编程,其中P、I、D参数可按键输入并用LED数码显示;单片机PWM调宽输出,开关驱动、电子滤波控制模拟电机(压控振荡器)实现对直流电机的PID调压调速功能。80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点

6、,增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(PUSH)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源。采用40引脚双列直插式DIP(Dual In Line Package),内有128个RAM单元及4K的ROM。80C51有两个16位定时计数器,两个外中断,两个定时计数中断,及一个串行中断,并有4个8位并行输入口。80C51内部有时钟电路,但需要石英晶体和微调电容外接,本系统中采用12MHz的晶振频率。由于80C51的系统性能满足系统数据采集及时间精度的要求,而且产品产量丰富来源广,应用也很成熟,故采用来作为控制核心。MCS-51是标准的40引脚双列直插式

7、集成电路芯片,引脚分布请参照-单片机引脚图:l P0.0P0.7 P0口8位双向口线(在引脚的3932号端子)。l P1.0P1.7 P1口8位双向口线(在引脚的18号端子)。l P2.0P2.7 P2口8位双向口线(在引脚的2128号端子)。l P3.0P3.7 P3口8位双向口线(在引脚的1017号端子)。P0口有三个功能1、外部扩展存储器时,当做数据总线(如图1中的D0D7为数据总线接口)2、外部扩展存储器时,当作地址总线(如图1中的A0A7为地址总线接口)3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。 P1口只做I/O口使用:其内部有上拉电阻

8、。P2口有两个功能:1、扩展外部存储器时,当作地址总线使用2、做一般I/O口使用,其内部有上拉电阻;P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的,即:编程脉冲:30脚(ALE/PROG)编程电压(25V):31脚(EA/Vpp)这就是单片机的备用电源,当外接电源下降到下限值时,备用电源就会经第二功能的方式由第9脚(即RST/VPD)引入,以保护内部RAM中的信息不会丢失。在介绍这四个I/

9、O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。ALE/PROG 地址锁存控制信号:在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。(在后面关于扩展的课程中我们就会看到8051扩展 EEPROM电路,在图中ALE与74LS373锁存器的G相连接,当CPU对外部进行存取时,用以锁住地址的低位地址,即P0口输出。ALE有可能是高电平也有可能是低电平

10、,当ALE是高电平时,允许地址锁存信号,当访问外部存储器时,ALE信号负跳变(即由正变负)将P0口上低8位地址信号送入锁存器。当ALE是低电平时,P0口上的内容和锁存器输出一致。关于锁存器的内容,我们稍后也会介绍。在没有访问外部存储器期间,ALE以1/6振荡周期频率输出(即6分频),当访问外部存储器以1/12振荡周期输出(12分频)。从这里我们可以看到,当系统没有进行扩展时ALE会以1/6振荡周期的固定频率输出,因此可以做为外部时钟,或者外部定时脉冲使用。PORG为编程脉冲的输入端:我们已知道,在8051单片机内部有一个4KB或8KB的程序存储器(ROM),ROM的作用就是用来存放用户需要执行

11、的程序的,那么我们是怎样把编写好的程序存入进这个ROM中的呢?实际上是通过编程脉冲输入才能写进去的,这个脉冲的输入端口就是PROG。PSEN 外部程序存储器读选通信号:在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作。1、内部ROM读取时,PSEN不动作;2、外部ROM读取时,在每个机器周期会动作两次;3、外部RAM读取时,两个PSEN脉冲被跳过不会输出;4、外接ROM时,与ROM的OE脚相接。EA/VPP 访问和序存储器控制信号1、接高电平时:CPU读取内部程序存储器(ROM)扩展外部ROM:当读取内部程序存储器超过0FFFH(8051)1FFFH(8052)时自动读取外部R

12、OM。2、接低电平时:CPU读取外部程序存储器(ROM)。 在前面的学习中我们已知道,8031单片机内部是没有ROM的,那么在应用8031单片机时,这个脚是一直接低电平的。3、8751烧写内部EPROM时,利用此脚输入21V的烧写电压。RST 复位信号:当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作,当复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码。XTAL1和XTAL2 外接晶振引脚。当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。VCC:电源+5V输入第二章 直流

13、电机工作原理2.1 工作原理 本设计中的电子钟的核心是AT89C51。硬件电路主要由六部分构成:PID控制电路、复位电路、键盘电路、显示电路、串行通信电路以及温度检测电路。 PID控制电路是电子钟硬件电路的核心,没有PID控制电路,直流电机无法正常稳定运行。本系统电路采用的晶振11.0592MHz,一号单片机定时器采用的是定时器0工作在方式2定时,用于实现一定时间的计时,定时时间为10ms。复位电路可使单片机回复到初始状态。键盘可实现对直流电机转速的设定及启动的操作。温度检测是通过DS18B20芯片实现,在温度显示中还要注意数的转换。在该设计中还用到定时器1工作在方式2用来产生9600的波特率

14、,用在两片单片机之间串行传送数据。1、 外部中断INT1当电机转一圈时向外部中断进行一次中断计数,从而实现电机转速的测量。2、 一号单片机转速显示 当电机转动时,显示部分可以把电机的设定转速或者是通过通信由温度计算的转速显示出来,同时在右侧部分显示电机当下的转速。 二号单片机的温度显示与之类似。3、 温度测量温度测量有专门的芯片DS18B20。DS18B20 可编程温度传感器有 3 个管脚。GND 为接地线,DQ 为数据输入输出接口, 通过一个较弱的上拉电阻与单片机相连。VDD 为电源接口,既可由数据线提供电源,又可 由外部提供电源,范围 3O55 V。当 DSI8B20 接收到温度转换命令后

15、,开始启动转换。转换完成后的温度值就以 16 位带 符号扩展的二进制补码形式存储在高速暂存存储器的 0,1 字节。单片机可通过单线接口读 到该数据,读取时低位在前,高位在后,数据格式以 0062 5LSB 形式表示。4、 按键选择一号单片机的键盘采用44的按键方式检测按键。P0、P1口不断扫描按键的行和列从而计算出所选择的数值,进而执行相关的程序。二号单片机原理类似。5、 直流电机驱动部分一号单片机根据端口采集到的电机的转速,经过PID计算,通过另一端口发送PWM波,从而使电机改变转速。2.2、直流电机PID控制原理方框图图2.2 电路连接图第三章 控制系统方案选择3.1 系统设计要求总要求:

16、自动化工程训练是自动化专业学生在完成自动控制理论、单片机原理及应用、计算机控制技术等专业课程学习后的一个重要实践环节,其目的主要在于使学生掌握自动化技术的实际工程应用知识,对典型控制系统的硬件、软件进行针对性的设计和调试,进一步拓宽知识面,达到提高学生独立解决实际工程问题能力的目的。因此,本工程训练必须紧密联系实际,强调解决实际问题的能力,学生要着重学会面对一个实际问题,收集资料(包括网上检索),学习新的知识,如何利用已有的实验装置、实验条件等制定解决问题的方案并通过实践不断地去分析和解决前进道路上的问题,最终完成课程设计的实验验收。本次设计,要求学生在两周内独立设计,完成老师所分配的任务(学

17、生也可自定设计任务,在设计指导教师认可的前题下,进行设计并完成全部要求的内容)。课程设计结束时,要求每人提交课程设计报告一份(包括电子稿),并进行成果现场演示。 选择实验的要求:基于SST89E554RC单片机实验系统的综合实验应用开发与设计:要求在掌握相关基础性实验项目的基础上,完成综合性实验项目,并在此基础上增加键盘输入功能、数据显示功能和通信功能等。这部分主要介绍工作安排和整体设计的思想。工作过程规划如下:熟悉硬件 了解各脚功能分块设计各部分电路完成完整的电路图将分块的电路组合认真学习单片机汇编语言确定变成结构和思路综合各个程序完成整体程序编辑各个程序模块调试程序,进行修改用Proteu

18、s画电路图对仿真中出现问题进行修改画出仿真图进行仿真仿真成功撰写说明书图3.1直流电机PID控制工作规划流程图 在程序方面,采用分块设计的方法,这样既减小了编程难度,使程序易于理解,又能便于添加各项功能。程序可分为时间年月显示程序、整点报时程序、闹铃的声音程序、闹铃调节程序、调时程序、温度检测程序、温度判断程序、温度显示程序等。运用这种方法关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。本直流电机PID控制设计主要是依据图3.1中的流程做出来的,时间分配比较均匀。首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法下

19、笔。这是前期准备工作。第二部分是硬件部分:依据想要的功能分块设计。第三部分是软件部分:先学习理解C语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。第四部分是软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真。第六部分:连接电路并导入程序检查电路。最后进行功能扩展。3.2 系统模块设计本次设计可以分为五个功能:PID控制功能、显示功能、键盘设定功能、温度检测功能、串行通讯功能。键盘设定功能是通过按键实现的,因此键盘设定功能和显示功能可以合并为一个功能,即键盘/显示功能。因此该系统可分成四个模块:PID控制模块、键盘/显示模块、温度检测模块、串行通讯模块。由于增加了温度检

20、测,为了避免用一片单片机数据繁多,因此选用了两片单片机,一片用于PID控制、设定值/转速显示、键盘设定、主体功能,另一片专门用于温度检测,并且通过串行通讯接口把温度检测的数据传送给第一片单片机得以调整转速。考虑到实验室资源和本设计任务繁重,我们决定用Proteus实现仿真而不用硬件实现。下面介绍各个模块的实现方式。3.2.1 电机转速检测及控制方案电机转速的测量采用的时单位时间内通过电机转动送给单片机的外部中断进行测量的。当电机转动一圈时会向单片机发送脉冲,使单片机产生外部中断,从而进行转速的测量。同时,经过计算后,单片机会通过另一端口输出PWM脉冲,从而控制单片机转速。80c51PWM生成电

21、路测速电路M 图3.2 电机控制方案图3.2.2电子钟键盘/显示方案 键盘/显示分为键盘、显示两部分。显示有LCD数码管液晶显示、点阵显示、LED数码管静态显示、LED数码管动态扫描显示,下面比较这四种显示的优缺点,并选择一种最合适的显示方案一:LCD显示 LCD数码管液晶显示,由单片机驱动,它主要用来显示大量数据、文字、图形,能够显示的位数多,显示得清洗多样、美观,但同时液晶显示器的编写程序复杂,价格昂贵,从而降低了整个系统的性价比,故不采用此种方案。显示方案二:点阵显示 点阵显示是由八行八列的发光二极管集成在一块电路上组成,主要用来显示汉字,同时也能显示数字和少量图像,但是它的焊接较麻烦,

22、价格高,鉴于所涉及的题目要求它不切实际,所以排除此方案。显示方案三:LED数码管静态显示 LED数码管静态显示,电路容易理解且驱动的程序简单,多片七段译码器驱动显示,这不仅增加了成本,还需要占用单片机多个I/O口,也给电路的焊接带来一定的困难,因此不选用这种方案作为显示模块。显示方案四:LED数码管动态扫描显示 LED数码管动态扫描显示,价格低廉,不仅减少了对I/O口的浪费,而且能够同时驱动多个数码管,其驱动程序容易编写和理解。 经过四种方案的比较,排除了前三种方案之后,最终选择方案四:LED数码管动态扫描显示。 键盘有两种方案。键盘方案一:阵列式按键 选取阵列式按键,减少了I/O口的使用,而

23、且扫描MN个按键只需要占用M+N个I/O口即可实现,但给编程带来了一定的困难,虽然节省了很多的口线,降低了成本,但在此设计中所用的按键要尽量少,因此排除此方案。键盘方案二:独立式按键 独立式按键,每个按键实现一个功能,易于控制且编写程序简单,容易理解,虽然会占用一定的单片机I/O口资源,但是题目中要求使用的按键要尽量少。 通过以上两种方式比较,采用方案二。以上通过对显示和键盘方案进行选择,选择了最合适的显示、键盘功能实现的方案。 89C51驱动电路LED动态扫描显示44位独立式按键图3.3 方案一键盘/显示方框图3.2.3温度检测方案传统的测温元件有热电偶和热电阻,需要很多硬件支持并且电路复杂

24、,软件复杂,因而选用温度传感器DS18B20进行温度采集。 DS18B20单片机显示图3.4 温度检测方案3.2.4串行通讯方案 由于该系统有很多数据需要传送显示,一片单片机远远不够,还需要一片单片机,由于单片机接口较少,要用串行方式在两片单片机之间传递数据。串行通讯是两片单片机间使用一根数据信号线,数据在一根数据信号线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输慢。要使两片单片机能实现通讯,需要用到COMPIM与虚拟串口连接调试。3.2.5直流电机PID控制整体方案系统方框图 经过方案论证与比较,

25、选择89C51作为主控,采用独立式按键控制,LED数码管动态扫描显示,DS18B20温度检测,选择出最优方案的系统框图如图图3.3。时间控制模块温度测量模块设定模块速度检测模块设定转速显示模块复位电路实际转速显示模块PWM模块DS18B20温度检测温度显示串行通讯口上下限设定图3.5 总方案系统框图第四章 硬件设计与实现4.1硬件设计直流电机PID控制电路的核心是两块89C51,用两块89C51作控制是为了电机控制和温度检测互不干扰,其中一块控制电机,另一块实现温度检测。4.1.1 按键电路设计根据功能需要,本控制电路需要设置一下功能键:按键设定转速。在键盘中按键数量较多时,为了减少I/O口的

26、占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,下图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键

27、按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。 图4.1 按键电路参见表4.1。按键键名功能属性09设定设定转速值自动复位确定确定确定设定值自动复位清除清除去除设定值自动复位运行运行开始运行自动复位表4.1 按键功能表 按键操作说明如下: 09键:通过此按键设定要求电机转速的设定值。设定过程中数值依次左移,实现百十个位的设定。 确定键:该键为自动复位键,当设定完成后按确定键就可以使设定值赋给相应变量。 清除键:清除已经设定的转速值。 运行键:设定值完毕则可以点此键进行相应的运行。4.1.2 复位电路 复位是单片机的初始化操作,以便使

28、CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。除了进入系统的正常初始化之外,当单片机系统在运行出错或操作错误使系统处于思索状态时,也可按复位键重新启动。 复位后,PC内容初始化为0000H,使单片机从0000H单元开始执行程序。89C51单片机复位信号的输入端是RST引脚,高电平有效。RST端的外部复位电路有两种操作方式:上电自动复位和按键手动复位。按键手动复位有电平方式和脉冲方式两种。本设计用的是按键电平复位时相当于RST端接高电平。如图4.2所示。需要注意的是单片机连接了8255A,复位电路也需与8255A的RESET相连。电路为上电复位电路,它是利用电容充电来实现

29、的。在接电瞬间,RESET端的电位与VCC相同,随着充电电流的减少,RESET的电位逐渐下降。只要保证RESET为高电平的时间大于两个机器周期,便能正常复位。该电路除具有上电复位功能外,若要复位,只需按RESET键,此时电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。4.1.3显示电路本设计中使用LED数码管显示电机的设定和实际转速以及温度值。电路设计如下: 图4.3 转速的显示电路 温度的显示电路在另一个单片机中完成,图相似。 4.1.4温度检测系统设置了一路温度检测在该系统中,图4.6是一路温度硬件图。图4.4 DS18B20测温原理框图图4.5 温度检测的硬件图4.1.

30、5串行通讯 该系统用到两片单片机,因此单片机还需要连接串行接口,电路略。4.1.6晶振电路设计在AT89S51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。其电路如图4.7。 图4.7 晶振电路4.1.7 电机驱动电路通过端口采集电机转速进而输出PWM波完成电机控制。PWM(Pulse Width Modulation)控制技术就是对脉冲的宽度进行调制的技术,即通过对一系列脉冲的宽度进

31、行调制,来等效的获得所需要的波形(含形状和幅值);面积等效原理是PWM技术的重要基础理论;一种典型的PWM控制波形SPWM:脉冲的宽度按正弦规律变化而和正弦波等效的PWM波形称为SPWM波。 图4.7 电机驱动电路4.1.8报警电路当温度过高或者过低时,报警电路会自动报警。 图4.8 报警电路4.2系统面板图时间控制模块面板图如图4.8,温度测量模块面板图如图4.9。图4.9 直流电机控制模块面板图图4.10 温度测量模块面板图 第五章 流程设计 5.1 软件设计流程图5.1.1 主程序流程图电机调试程序流程:温度测量程序流程:5.1.2 速度显示子程序流程图 图5.2速度显示子程序流程图 5

32、.1.3 温度采集程序流程图连续读两个字节数据即温度 5.3 温度采集程序流程图 5.4 报警子程序流程图5.1.4串行通信接受与发送流程图 第六章 程序说明6.1 直流电机部分程序#include #define uint unsigned int#define uchar unsigned charsbit p34=P34;sbit p26=P26;sbit p36=P36;uchar code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f ; uchar code chose=0x01,0x02,0x04,0x08,0

33、x10,0x20;uint shu6=1,2,3,4,5,6;uchar q=0,i=0,m=0,n=0;uint count,miaoshu,sv,k=0,k2=0,sv1,sv2; /定义计数值,实际温度值,设定的温度值uchar sec,tcnt,flag,flag1;int rk,yk,uk,uk_1=0,ek,ek_1=0,ek_2=0; /PID计算参数signed char T=20,Kp=30,Td=8,Ti=100,q0,q1,q2; /PID参数其值经反复调试得来uchar data buf4=0,1,1,1;/字型显示中间变量/*/延时子程序用来产生1ms的延时,用于在程

34、序中的等待/*/延时1ms子程序void delay(uchar z)uchar x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*/显示子程序用来在数码管中显示电机的设定转速或计算转速以及实际转速/*/显示子程序void display(uint a,uint b)char i;shu0=a/100;shu1=a%100/10;shu2=a%10;shu3=b/100;shu4=b%100/10;shu5=b%10;for(i=0;i6;i+)P2=chosei;P0=tableshui;delay(5); /*/定时器中断子程序用来产生0.1秒的中断,以此来测量电机

35、的转速/*/ 定时器中断0子程序void t0(void) interrupt 1 using 0 /定时T0中断服务函数tcnt+; /每过250ust tcnt 加一if(tcnt=40) /计满40 次(1/100 秒)时tcnt=0; /重新再计sec+;if(sec=10) /定时0.1 秒,在从零开始计时sec=0; TH0=0x06; /对TH0 TL0 赋值 TL0=0x06;miaoshu=count; count=0;/*/用来记录中断数,从而得到转速/*/void sdf(void) interrupt 2 using 0 /外部中断服务函数 count=count+1;

36、 /*/接收来自另一个单片机的中断并放入一个数组中以便在显示函数中方便调用此数据,其中加了容错程序,通过一个特殊字符11,来区别哪一个是三位数的百位,十位,个位。/*/void jieshou()/接收子程序uchar g; if(RI=1) g=SBUF; if(g=11) m=0; bufm=g; m+; if(m=4) m=0; RI=0;/REN=1; /*/检测按键值计算对应的数值/*/左移一位void yishu(uchar num)uchar bai,shi,ge;bai=sv1%100/10;shi=sv1%10;ge=num;sv1=bai*100+shi*10+ge;k2=

37、sv1;/xinjia/*/检测对应的按键/*/按键子程序void key()uchar i,temp,lie,hang,shu;for(i=0;i4;i+) /求出按键值P1=chosei;temp=P1;temp=temp&0xf0;if(temp!=0xf0)hang=i;if(temp=0xe0)lie=1;else if(temp=0xd0)lie=2;else if(temp=0xb0)lie=3;else if(temp=0x70)lie=4;break; shu=hang*4+lie;/数为对应的按键switch(shu) case 1: if(!flag)yishu(0);b

38、reak; case 2: if(!flag) yishu(1);break; case 3: if(!flag) yishu(2);break; case 4: if(!flag) yishu(3);break; case 5: if(!flag) yishu(4);break; case 6: if(!flag) yishu(5);break; case 7: if(!flag) yishu(6);break; case 8: if(!flag) yishu(7);break;case 9: if(!flag) yishu(8);break;case 10: if(!flag) yishu

39、(9);break;case 11: flag+;/*flag1+*/; break;case 12: sv1=0;miaoshu=0;flag=0;flag1=0;break;case 13: flag1+; break; default: break;while(temp!=0xf0)/放键检测temp=P1;temp=temp&0xf0;for(i=0;i10;i+)display(sv1,miaoshu);/按键检测程序void keyscan()uchar temp;P1=0xf0;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(5);/消除抖动P1=0xf0;temp=P1;temp=temp&0xf0;if(temp!=0xf0)key();/*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号