数字转速表的设计_第1页
数字转速表的设计_第2页
数字转速表的设计_第3页
数字转速表的设计_第4页
数字转速表的设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、数字转速表的设计一、概述随着科学技术特别是微型计算机技术的高速发展, 单片微机技术也获得了飞速发展。 目前,单片机已经在日常生活和控制领域等方面得到广泛的应用,它正为我国经济的快 速发展发挥着举足轻重的作用。作为自动化专业的一名工科学生应该牢牢掌握这一重要 技术。而课程设计这一环节是我们提高单片机应用能力的很好机会,也是我们学好这一 课程的必经环节。通过课程设计可以进一步巩固我们前面所学理论知识,使我们对单片 机理论知识有一个深刻的认识和全面的掌握。另外通过这一真正意义上的实践活动,我 们可以从中发现自己不足之处并能够在自己的深思下和老师的指导下得到及时的解决。 再次,它能使我们的应用能力和科

2、技创新能力得到较大的提高。本课程设计是单片机系统在测速方面的简单应用。目前单片机技术已经在电机转速 等为控制对象的控制系统中得到了广泛的应用,而在这一控制过程中必须通过单片机来 测量转速。基于此本课程设计利用 89C51 单片机及外围电路来设计一个数字转速表。通 过测量转速所对应的方波脉冲来测量转速,其转速可以通过键盘输入给定,同时其具体 数值也可以在 LED 上显示出来。设计要求1) 利用单片机组成一数字转速表。2) 电机转速由信号发生器的方波脉冲信号来模拟。3) 利用四位 LED 显示器显示:a.当前转速b.给定转速c.给定转速与当前转速的区别标志d. 超速报警显示4) 利用小键盘实现:a

3、. 显示选择b. 给定转速的输入5) 测速范围为500rpm 1500rpm。电机的正常转速为 lOOOrpm。6) 检测对应关系为: 1024个脉冲/转,采用周期为 40ms。二、数字转速表方案为了确定其设计方案,首先必须构思好初步的设计思路。根据设计要求和实验仿真 条件,初步的设计思路可以总结如下:1)用信号发生器来产生周期为0.04ms- 0.2ms的方波脉冲信号。2)当前转速与给定转速显示用4段LED数码管。3)键盘采用矩阵式键盘,一共12个键,用2个控制键和10个数字键。4)采样时间用定时/计数器0来实现。5)用定时/计数器1来统计采样时间内的脉冲数,进而计算转速。6)给定转速与当前

4、转速的区别标志是在个位加点显示,有点为给定转速。根据设计要求与设计思路,可以确定该系统的设计方案,图1为该系统设计的硬件电路设计框图。硬件主要由四部分组成,即脉冲源、单片机、小键盘、LED显示器。单片机采用89C51。考虑到实验室的条件,键盘采用2行6列的矩阵式键盘,2个控制键分 别控制显示当前转速和给定输入的转速,10个数字键用来输入给定转速,行与列与P1口连接。LED显示采用静态串口显示,需用 4个LED和4个74LS164移位寄存器。脉 冲源用一个方波脉冲发生器,用来模拟对应的转速。脉冲源与单片机的T1相连。图1数字转速表硬件框图键盘的设计也可以采用其它形式, 如采用3行4列。LED显示

5、也可以采用动态显示。 但综合考虑本设计还是采用如上方案。三、数字转速表硬件设计本设计需用到AT89C2051单片机、小键盘、LED显示器和74LS164移位寄存器等硬 件,与其它设计相比其硬件设计相对简单,且在实验室也容易实现。小键盘用2行6列的矩阵式键盘,一共有12个键。LED和74LS164 一起构成静态串口显示。硬件设计总图见附图A。下面对各部分硬件的设计进行简单的介绍。1、单片机最小系统根据初步设计方案的分析,设计这样的一个简单应用系统,可以选择带有EPROM的单片机,应用程序直接储存在片内,不用再外部扩展存储器,电路可以简化,AT89C51 单片机的功能与MCS-51系列单片机完全兼

6、容,并且还有程序加密功能,物美价廉,经 济适用,因此我们选择 AT89C51,图2是89C51的图示。本设计需用至U Vcc、END、RESET、XTAL1 和 XTAL2、P3.0 /RXD、P3.1 /TXD、P1 口、T1引脚。下面对所用引脚进行简单介绍。Vcc:供电电压,GND :接地。P3.0/ RXD:串行输入口,P3.1 /TXD :串行输出口T1:定时/计数器1外部输入XTAL1 :反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 :反向振荡器的输出。RESET:复位输入。当振荡器复位器件时,要保持RESET脚两个机器周期的高电平。P1 口: P1 口是一个内部提供上拉

7、电阻的 8位双向I/O 口。1933pF.0592MHzXLAT 18S1+5V1R1C31K133pF1VccP0.0P0.1P0.2RESETP0.3X1P0.4P0.5P0.6X2P0.7INT0INT1RXDT0T189C51WRTXDRDEA/VPP1.0ENDP1.1P2.0P1.2P2.1P1.3P2.2P1.4P2.3P1.5P2.4P1.6P2.5P1.7P2.6ALE/PP2.7PSEN图2单片机最小系统2324252627280221223数XXTAL1和XTAL2两个弓|时钟电路设计单片机工作时间的基准是由时钟电路提供的。在单片机的脚间接一只晶振及两只电容就构成了单片机

8、的时钟电路,如上图所示,电路中电容器C2和C3对振荡频率有微调作用,通常的取值范围 3(3+/-10pF;石英晶体选11.0592MHz。4复位电路设计单片机的RESET引脚为主机提供一个外部复位信号输入端口。复位电路是高电平有效,高电平有效的持续时间应为两个周期以上。复位后,单片机内各部件恢复到初始状态,单片机从ROM的0000H开始执行程序。其电路图如图2所示,R1=1K Q , 3= 22卩F。 RESET按键选择开关。与其它硬件的连接RXD/串行输入口与74LS164的A、B相连,TXD/串行输出口与74LS164的CLR相连。P1 口与键盘相连。其中 P1.0可P1.1作为输入与键盘

9、行线相连,P1.2-P1.7作为输 出与键盘列线相连。2、小键盘接口电路设计根据设计要求与设计思路,并考虑到实际情况,小键盘采用2行6列的矩阵形式,可以组成12个键,其中2个控制键,分别用来控制显示当前转速和给定输入的转速。另 外还有10个数字键,用来输入给定转速。可以按下图进行设计。图3小键盘接口电路键盘说明如图3,P1.0和P1.1作为输入与行线相连,行线接电阻后与 +5V电源连接。P1.2-P1.7作为输出与列线相连,另一端悬空,为了防止多键同时按下使输出口短路,在每一Title列可以串联一个二极管。行与列之间的交叉点就放置按键,按键的编号如图 3所示,其 中A、B为控制键,A键控制当前

10、转速在LED上显示,B键控制给定转速在LED上显示, 其余为数字键,其排列顺序如图。按键未按下时行与列没有连接,当且仅当按键按下时 行与列相连,此时按键才起作用。键盘的工作原理从图3可以看出,行线与电阻串联后接+5V的电源,当没有按键按下时,P1.0和P1.1 的输入为高电平,即单片机检测到P1.0和P1.1的电平为高电平。因此,为了使按键起作 用, P1.2 P1.7的输出为低电平,当任意一个按键按下时,P1.0或P1.1的输入为低电平。 这样为了检测X行丫列的按键是否按下时,可以在丫列输入低电平,其余为高电平,然 后检测X行输入的电平,若为高电平说明按键没有按下,若为低电平则有按键按下。3

11、、LED显示接口电路设计根据设计要求可知,系统需要显示 4位数字,因此需用到4个LED。考虑到显示的数字需要移位以及实验室的条件,本系统采用串口静态显示。串口静态显示需用到4个移位寄存器,这里采用4个74LS164。其硬件图如下:QGND1RXD *LED1e: 1f gPLED2LED3LED4f g b d仁叮 p a b c d e f gdbD N 叮 p a b c d e f gdf g b dd J p a b c d e f (jl2345 (781234567312345 67812345678LJ390 X8390 X8390 X8390 X8o3121h331214054

12、1543312ARBc74LS164 1X B C D E F G HQ Q Q Q Q Q QA 74LS164_2ABCdEFgh qQQqQQqqA 74LS164_3ABCdEFgh qQQqQQqqkl ckl c怛ckl cBrl cARB74LS164 4kl c+5V 98T .TXD图4 LED显示接口电路说明如图4所示,四个LED是8段共阴极数码管,它们的端口 9接地;LED的a,b,c,d,e,f,g,dp 接限流电阻后分别与74LS164的QA,QB,QC,QD,QE,QF,QGQH相连;编号为1的74LS164 的端口 A、B连在一起并与单片机的 RXD相连,其余三个

13、74LS164的A、B端口也连在 一起并与前一个 QH端口相连;四个74LS164的端口 CLK连在一起并与单片机的 TXD 相连,CLR与+5V电源相连。四个LED的主要功能是用来显示四位转速数字;74LS164的主要功能是在脉冲的作 用下移位,并具有锁存作用。工作原理图4与单片机连在一起构成静态串口显示,当单片机执行指令MOV SBUF,A时单片机开始通过串行输入口 RXD向74LS164移位寄存器传送一个字节的数据,与此同 时前一个移位寄存器向后移位寄存器也传送它之前寄存的一个字节数据。因为LED与移位寄存器是对应相连的,因此LED会根据74LS164寄存器中的值作出对应的显示。 移位

14、寄存器接收数据是单片机通过 TXD向74LS164的CLK发送脉冲所致,脉冲的频率直接 影响发送数据的速度。四、数字转速表软件设计软件设计是课程设计的一个重要组成部分,软件的设计成功与否直接影响系统的功 能。因此,软件的设计是一个非常严密的过程。根据设计要求和设计方案可知,本系统 是通过测量脉冲并根据所给关系来计算转速并在LED上显示,LED的显示是通过键盘来控制,为了实现这些功能,可确定下面的设计方案。软件设计简介根据要求,每按下按键就有相应的显示,故在主程序中设计键盘循环扫描程序。另 外测速的采样周期是40ms,可以通过设计定时器中断子程序来定时 40ms,并在这40ms 内通过设计计数器

15、程序来计算脉冲个数。此外,还需设计相应的子程序。系统资源分配为了方便编写程序,先对系统的资源分配加以说明。1)定时器:定时器0用作采样周期定时,按方式1工作,每隔40ms溢出中断一次。故初值定为6FFEH。2)计时器:计时器1用作在40ms的时间内统计脉冲个数。不中断并由软件控制。3)片内RAM的分配与定义表1所示表1片内RAM的分配与定义地址功能名称初始化40H-43H显示当前转速缓冲区(个位在前)GW1、SW1、BW1、QW100H44H-47H显示给定转速缓冲区(个位在前)GW2、SW2、BW2、QW200H48H-49H40ms内所测脉冲奇存区(低位在前)DSL、DSH00H50H-5

16、2H当前转速BCD码奇存区(低位在前)BCD1、BCD2、BCD3、BCD400H55H-7FH堆栈区软件流程根据上述工作流程,软件设计可分为以下几个功能模块:1)主程序:初始化与键盘循环扫描等2)计时:为定时器0中断服务子程序,完成对应转速的计算和判断是否报警等。3)显示:显示1完成当前转速4位静态显示;显示2完成给定转速4位静态显示。4)报警显示子程序:实现4个8的静态显示。5)其它辅助功能子程序:如乘除法运算子程序,两字节转换为三字节BCD码子程序,两个延时子程序。下面对各功能模块进行介绍1、主程序主程序功能分析主程序首先必须完成串行口设置、指针设置、中断设置、定时计数器工作方式及初 始

17、值设置等。其次,进行寄存区初始化设置和调用LED1子程序。再次,开中断并开始扫描数字键和控制键等。键盘的扫描是不断循环进行的。当有键按下时就会执行它要实 现某一功能的程序,为了凸显这一过程,画出主程序流程图如图5。主程序说明串口方式采用方式0;中断允许寄存器设为82H,即允许T0和CPU中断;T1设为 方式0,初值为0; T0设为方式0,且初值为6FFEH,因为需要定时40ms,可根据下面 的表达式求出初值,其中时钟频率为 11.0592MHz, 个周期的时间为1.085卩S。40ms1.085七:36866.36计数初值 65536-36866 = 28670 = 6FFEH初值寄存器的初值

18、为:TH0=6FH TL0=0FEHR2的值表示接连按数字键的次数,在扫描数字键前设置R2=1。当确定有数字键按下且R2的小于4时,根据R2的值执行完相应程序后返回到开始数字键扫描处。当确定R2=4或有控制键按下时,在执行完对应程序后返回到设置R2=1程序处。另外,键盘的扫描是依次循环进行的。图5主程序流程图2、TO中断服务子程序功能分析中断服务子程序需完成的主要任务有: 保持现场;读取计数器1在这40ms内所统计 的脉冲个数;把脉冲个数通过调用转速计算子程序和二进制转换为BCD码子程序 转换为BCD码并存入缓冲区中;通个查表将 BCD码转换为相应可以显示的数值并存入 GW1 QW1缓冲区中;

19、检查是否报警;恢复现场。根据这些任务可以编写相应的中断服 务子程序,具体流程见下页。图6 TO中断服务子程序流程图说明中断发生时说明40ms的定时时间已到,这时将所测脉冲数记录下来并存入 DSL (低 位)与DSH (高位)中。然后就可以求出单位时间内的脉冲个数,再根据所给对应关系: 1024个脉冲/转,便可求出每一分钟的转数,即转速。其计算过程如下:一分钟内的脉冲个数 =二40ms内脉冲数150040一分钟内的脉冲个数375转速=一分钟内的转数40ms内脉冲数 一1024256计算所得的转速暂存入R5、R6工作寄存器中,其中R5是高位,通过估算可知转速 是10位左右的二进制数,然后调用二进制

20、转换为 BCD码子程序完成数制转换,并 将所得3字节BCD码存入BCD1 (低位)、BCD2、BCD3寄存区中。实际上,由估算可 知所得值只有两字节BCD码,故BCD3所存值为0。判断是否报警是根据所测转速是否大于等于 1010转/分钟,因为正常转速是1000转 /分钟,报警上限稍大于正常转速。另外,值得一说的是通过估算可知在定时器 1定时的 40ms内,计数器1不会发生溢出,故不会产生中断。3、LED显示子程序图7显示当前转速子程序流程图将GW2的值给A将A的最高位置1开始传送A给移位寄存器设置重复次数R3=3把SW2的地址给R0转送给移位寄存器R0加1子程序返回图8显示给定转速子程序流程图

21、分析 为了显示当前转速与给定转速,需要设计两个显示子程序。根据设计方案知,本系 统采用静态串口显示,故需根据静态串口显示来编程。在这里可用指令 MOV SBUF,A 转送一个字节给第一个移位寄存器。由于有四个 LED ,需用此指令连续传送四个字节。 具体编程方法见附录源程序。现将子程序流程画出如图 7和图 8。说明 上面的两个子程序的思路基本相同,不同之处是它们欲显示的内容完全不同,另外 为了显示当前转速与给定转速的区别, 在给定转速的各位加一点, 即把 GW2 中的值的最 高位置 1 便可。4、其它模块简介报警显示模块和当前转速显示模块类似,只是要显示的是4 个8。在此不再累赘。两个延时子程

22、序是最常用的子程序,它是通过重复执行程序来延时,具体编写过程 见附录B,在此不再详述。乘除法运算子程序即转速计算子程序的功能是实现两个字节与两个字节的乘法运算 和所得四字节结果再除以两字节的除法运算。所得结果存入相应单元以便下一步运用。两字节转换为三字节 BCD 码子程序的功能是将上一步计算所得的两字节结果转换 为 BCD 码,以便在 LED 上显示。五、数字转速表调试与分析1、调试过程及分析 调试过程也是课程设计必不可少的一个环节,调试的效果直接反映了设计的好坏。根据指导老师的要求,本系统主要在专业的实验室进行,而不是在仿真软件上进行。 在调试之前,首先要对软件进行调试,可以在伟福 6000

23、 中调试,由于这一过程是一 个简单过程和调试中的一小部分,在此不再详述。 调试的主要过程是在实验台上的调试。 这一过程有硬件调试和软件调试两部分,下面对这两部分进行简单介绍。硬件调试 硬件调试的主要任务是排除硬件故障,其中包括设计错误和工艺性错误。1) 脱机检查 用万用表检查器件的引脚,尤其是电源是否连接正确;检查各按键是否能正常开关, 是否连接正确; 各限流电阻是否电路等。 为了保护芯片, 应先对 IC 座(尤其是对电源端) 电位进行检查,正确无误后再插入芯片检查,注意芯片的正反。2) 联机调试为了经验键盘 /显示接口电路是否满足设计要求。可以通过设计一些简单的测试软件 来查看接口是否正常。

24、例如,我们可以设计一个使所有 LED 全显示“ 8.”的静态显示程 序来检查 LED 好坏。如果运行测试结果与预期不符,很容易根据故障现象判断故障原因 并采取针对性措施排除故障。软件调试 软件调试的主要任务是检查软件是否能实现所要求的功能,如果不能,就纠正程序 错误。程序的调试应逐个模块进行,首先单独测试相应子程序,检查程序能否实现预期 功能;最后逐步将各子程序连起来总调试。联调需要注意的是,各程序模块间能否正确 传递参数,要注意各子程序的现场保护。调试的基本步骤如下:1) 在仿真软件上调试转速计算子程序和二进制转换为 BCD 码子程序,在相应单 元预存某一数值,然后执行程序,观察工作寄存器和

25、缓冲区的内容,检查是否正确。2) 调试键盘与显示子程序,调试时可以去掉中断,这样只进行键盘扫描与显示程序。在 键盘上输入数字键,在 LED 显示器上观察显示,如在键盘上接连输入 1、2、3、4,观察 显示器上是否显示 1、2、3、4,并且要在按键的同时观察显示器上数字的移动是否正确。 观测按下控制键 A 后显示器上是否显示当前转速, 按下控制键 B 后是否显示给定转速等。 另外,要观察在按数字键的过程中,如果按下控制键,显示器上有何反应等。3) 总调试,总调试是在各模块联接后调试各功能。调试的方法是综合上面的方法。另外 当前转速的调试, 可用一个方波脉冲发生器, 首先通过估算调节发生器输出的脉

26、冲周期, 然后微调输出频率并观察显示是否正确。在这里可以通过手算检查所测转速是否正确。2、调试结果及分析硬件调试的结果是正确的,因为实验设备良好。在这里主要讲述软件总调试的结果, 因为软件设计是此课程设计的重点和难点。现将主要的软件调试结果叙述如下:1) 给定转速在键盘输入时的调试结果当在键盘上接连按数字键 5、6、7、8 时,显示器上也接连显示 5、6、7、8。经过多 次接连输入数字键时可以总结这样一个规律: 当接连所按的数字键个数小于或等于 4 时, 在 LED 上会挤兑显示这些数字;当接连按第五次按数字键时,显示会再次从个位开始,高位没有显示,效果与前面相同A、B控制键的按键效果是:无论

27、在什么时候按 A键,在数码管上就会显示当前所 测的转速;同样无论在什么时候按 B键,在数码管就会显示上次按数字所输入的给定转 速。2) 转速测量的调试结果及分析输入不同频率的方波脉冲就会有相应的结果,当转速大于等于1010转/分钟时就会有报警显示。具体的测量结果如下表 2。表2转速测量结果脉冲的周期(MS)0.120.110.100.090.080.070.060.050.04测量值(rpm)48753458565273183697611701466理论计算值(rpm)488.3532.6585.9651.0732.4837.1976.611721464是否报警显示否否否否否否否是是相对误差0

28、.0030.0030.0020.0020.0020.0010.0010.0020.001说明:单片机的晶振频率是11.0592MHz。如果假定为12MHz就会有较大的误差 从上表中可以看出其相对误差较小,精度较高,但仍存在一定的误差,这主要是由计算 误差和仪器误差组成,且是无法避免的。理论计数值可根据如下式子计算。理论计算值60输入脉冲的周期 10243) 调试过程中出现的问题由于注入了很多精力去编程,在调试的过程中我遇到的问题与其他同学相比要少得多,但还是出现了一些问题。其中有一个看似小问题,但却严重影响调试结果的大问题, 这个问题就是重复运用了 R2工作寄存器且没有做出相应处理,幸运的是在

29、老师的耐心指导下我最后解决了此问题。其它问题也在自己的不懈努力下得到了较好的解决六、结束语实验表明,本系统的设计在功能上完全满足要求,说明设计是有效的。具体来说, 小键盘上的各键都有效果,且能实现其功能;显示器也完全能满足要求;转速的测量基 本上无误差,之所以还存在很小的误差是因为在计算上和方波脉冲发生器上存在计算误 差和仪器误差。总的来说,本设计是合理的,但应当指出的是此系统还可以采用其它更好的方案, 从而达到更好的效果。譬如在软件方面,键盘扫描程序和两个 LED 显示子程序可以通过 循环和共用等方法使程序长度减少,但为了便于快速看懂程序,本程序没有进行一些复 杂的处理,而是注重彰显各个部分

30、。另外,由于时间关系和能力的局限性,错误之处难 免,还请老师体谅。下面是我的一些体会与建议。通过两周的单片机课程设计的实习,在老师的指导下和自己的努力下,我成功地完 成了数字转速表的设计,真正地感觉到在这段时间里受益良多,这主要表现在:一是对 之前所学的理论知识得到了很大的巩固和提高;二是对单片机课程设计有了一个全面的 认识,对单片机有关的设备仪器和软件的使用有了很深的认识;三是对硬件设计,特别 是软件设计有了较强的掌握;四是进一步培养了自己的思维,提高了动手能力和创新能 力。尽管在此之前,我已经做过不少专业课的课程设计,但这一次与前面的设计有很大 的不同,其中最大的不同是,系统设计好后需在实

31、验室调试,调试的成功与否具有直接 否决权,而这一过程恰恰是我们最不敢面对的,也是最具有难度的。这一过程能够考验 我们设计的系统,同时也能真正地考察我们对这门课程的应用能力。因此,突出这一环 节的重要性,是完全正确的。在实验室调试过程中,我不断发现问题和解决问题。重点 解决了键盘输入、挤兑显示和设计程序计算等问题。总之,本次设计的收获是以往任何课程设计无法相比的。因为这次课程设计是真正 意义上的课程设计,在形式上更具有实际意义。另外,这次学校为我们提供了很好的设 计条件,而且老师也非常负责。在这里向老师表示真心的感谢。建议其它课程设计和本次设计一样,学校能为学生提供较好的实习条件,老师能够 严格

32、要求所指导的学生。附录A数字转速表电路图P2.P2.P2.P2.P2.B2.P2.FP2.EnX2INTNT033p18 11F C333PF转速方波脉冲1K R1+5VXLAT099MHz1X1VccRESETP189C51PSANE/PP1.P1P1.P1.31.P1.P1.0 TXD RXD P0.P0.P0.P0.P0.P0.20.P0.(35ACL KCLtR ACL KclB? ACL KclB? ACL K10KQ AQ BQ CQ DQ EQ AQ BQ CQ DQ EQ F 74LSG64Q HQ AQ BQ CQ DQ E74LS16F4Q GQ HQA-Q BQ CQ D

33、Q EQ F 74LS164.Q HBrpi.P1.P1.P1.P1.7IIII1IcII6IIJ1rnc1I7nIJ2n !nIii1I:r10K363456 01 1121 3L2345T01 11 21 3390390-1 213:451 6! 78X812345618abc efe” gp GNDe;agp GNDLED1LED2X84 2536 0i4316781 11 21 374L/4_3Q H 3456 01 11 3390123456390 X8abcfd P 71 aGNDLED3e f gPLED4gp GNDGND附录 B数字转速表程序清单GW1EQU40HSW1EQU

34、41HBW1EQU42HQW1EQU43GW2EQU44HSW2EQU45HBW2EQU46HQW2EQU47HDSLEQU48HDSHEQU49HBCD1EQU4AHBCD2EQU4BHBCD3EQU4CHORG0000HAJMP MAINORG 000BHLJMP INTT0ORG 0030H;当前转速缓冲区;给定转速缓冲区;脉冲个数缓冲区;转速 BCD 码缓冲区;主程序入口地址 ;无条件转移到 MAIN ;T0 中断入口地址 ;无条件转移到 INTI0 *; 主程序 * ?MAIN:MOVSCON,#00H;设置串形输出方式MOVSP,#55H;设置堆栈指针MOVIE,#10000010

35、B;设置中断方式MOVTMOD,#51H;设置定时计数方式MOVTH0,#6FH;T0 赋初值MOVTL0,#0FEHMOVTH1,#0;T1 赋初值MOVTL1,#0MOVGW1,#0;缓冲区初始化MOVSW1,#0MOVBW1,#0MOVQW1,#0MOVGW2,#0MOVSW2,#0MOVBW2,#0MOVQW2,#0LCALLLED1;调用子程序 LED1SETBTR0;开定时器 0SETBTR1;开计数器 1KEYSHU:MOV R2,#01H;设置接连按数字的次数ALLKEY:MOV P1,#02H;扫描所有按键,看是否有任一键按下MOV A,P1ANL A,#0FH;高位 4 位

36、清 0CJNE A,#0FH,KEYQ;有一键按下转 KEYQAJMP ALLKEY;无键按下,转移到 ALLKEYKEYQ: LCALL DELAY5MS;延时5MS,再次确定是否有一键按下MOV P1,#02HMOV A,P1ANL A,#0FHCJNE A,#0FH,KEY0;有一键按下转 KEY0AJMP ALLKEY;无键按下转 ALLKEYKEY0: MOV DPTR,#TABL;取表的起始地址MOV A,#00H; A 表示 0 号键MOV P1,#0F7H;判断 0 键是否按下JB P1.0,KEY1;没有转 KEY1JNB P1.0,$;等待松键LJMP HUAN;转移到 H

37、UANKEY1:MOV A,#01H; A 表示 1 号键MOV P1,#0EFH;判断 1 键是否按下JB P1.0,KEY2;没有转 KEY2JNB P1.0,$;等待松键LJMP HUAN;转移到 HUANKEY2:MOV A,#02H; A 表示 2 号键MOV P1,#0DFH;判断 2 号键是否按下JB P1.0,KEY3;没有转 KEY3JNB P1.0,$;等待松键LJMP HUAN;转移到 HUANKEY3:MOV A,#03H; A 表示 3 号键MOV P1,#0BFH;判断 3 号键是否按下JB P1.0,KEY4;没有转 KEY4JNB P1.0,$;等待松键LJMP

38、 HUAN;转移到 HUANKEY4:MOV A,#04H; A 表示 4 号键MOV P1,#7FH;判断 4 号键是否按下JB P1.0,KEY5;没有转 KEY5JNB P1.0,$;等待松键LJMP HUAN;转移到 HUANKEY5:MOV A,#05H; A 表示 5 号键MOV P1,#0F7H;判断 5 号键是否按下JB P1.1,KEY6;没有转 KEY6JNB P1.1,$;等待松键LJMP HUAN;转移到 HUANKEY6:MOV A,#06H; A 表示 6 号键MOV P1,#0EFH;判断 6 号键是否按下JB P1.1,KEY7 JNB P1.1,$ LJMP

39、HUAN KEY7:MOV A,#07HMOV P1,#0DFHJB P1.1,KEY5 JNB P1.1,$ LJMP HUAN KEY8:MOV A,#08HMOV P1,#0BFHJB P1.1,KEY9 JNB P1.1,$ LJMP HUAN KEY9:MOV A,#09HMOV P1,#07FHJB P1.1,KEYAJNB P1.1,$LJMP HUAN KEYA:MOV P1,#0FBHJB P1.0,KEYB JNB P1.0,$ LCALL LED1 LJMP KEYSHU KEYB:MOV P1,#0FBHJB P1.1,LOOP JNB P1.1,$ LCALL LED

40、2LJMP KEYSHU LOOP:LJMP ALLKEYHUAN:CJNER2,#01H,HUAN1MOVCA,A+DPTRMOVGW2,AMOVSW2,#00HMOVBW2,#00HMOVQW2,#00HINC R2LCALLLED2LJMPALLKEYHUAN1:CJNER2,#02H,HUAN2MOVBW2,#00HMOVQW2,#00HMOVSW2,GW2MOVCA,A+DPTRMOVGW2,AINC R2;没有转 KEY7;等待松键;转移到 HUAN; A 表示 7 号键;判断 7 号键是否按下;没有转 KEY8;等待松键;转移到 HUAN; A 表示 8 号键;判断 8 号键是否

41、按下;没有转 KEY9;等待松键;转移到 HUAN; A 表示 9 号键;判断 9 号键是否按下;没有转 KEYA;等待松键;转移到 HUAN;判断 A 键是否按下;没有转 KEYB;等待松键;调用 LED1;转移到 KEYSHU;判断 B 键是否按下;没有转 LOOP;等待松键;调用 LED2;转移到 KEYSHU;转移到 ALLKEY;判断是否接连第一次按键 ,不是转 HUAN1 ;是,查表把值赋给 A;把A的值赋给GW2(个位);其它位清 0; R2 加 1;调用 LED2 ;转移到 ALLKEY ;判断是否接连第二次按键 ,不是转 HUAN2 ; BW2 清 0; QW2 清 0;把

42、GW2 的值给 SW2;查表;把 A 的值赋给 GW2; R2 加 1LCALL LED2LJMPALLKEYHUAN2:CJNER2,#03H,HUAN3MOVQW2,#00HMOVBW2,SW2MOVSW2,GW2MOVCA,A+DPTRMOVGW2,AINC R2LCALLLED2LJMPALLKEYHUAN3:MOVQW2,BW2MOVBW2,SW2MOVSW2,GW2MOVCA,A+DPTRMOVA,GW2LCALLLED2LJMPKEYSHU;调用 LED2;转移到 ALLKEY;判断是否接连第三次按键 ,不是转 HUAN3 ;QW2 清 0;把 SW2 的值给 BW2;把 GW2

43、 的值给 SW2;查表;把 A 的值赋给 GW2;R2 加 1;调用 LED2;转移到 ALLKEY;把 BW2 的值给 QW2;把 SW2 的值给 BW2;把 GW2 的值给 SW2;查表;把 A 的值赋给 GW2;调用 LED2;转移到 KEYSHU.*; 定时中断服务子程序.*INTT0:PUSHPSW;保护现场PUSHACCMOVDSL,TL1;记录 40ms 内的脉冲数MOVDSH,TH1MOVTL1,#00H;重设初值MOVTH1,#00HMOVTH0,#6FHMOVTL0,#0FEHLCALLDMULSUB;调用 DMULSUB 计算LCALLSBINBCD;调用 SBINBCD

44、 进行数制转换MOVDPTR,#TABLMOVA,BCD1;将 BCD1 的值给 AANLA,#0FH;高 4 位清 0MOVCA,A+DPTR;查表MOVGW1,A;把 A 赋给 GW1MOVA,BCD1;将 BCD1 的值给 ASWAPA;高四位与低四位交换ANLA,#0FH;高 4 位清 0MOVCA,A+DPTR;查表MOVSW1,A;把 A 赋给 SW1MOVA,BCD2;将 BCD2 的值给 AANLA,#0FH;高 4 位清 0MOVCA,A+DPTR;查表MOVBW1,A;把 A 赋给 BW1MOVA,BCD2;将 BCD2 的值给 ASWAPA;高四位与低四位交换ANLA,#0FH;高4位清 0MOVCA,A+DPTR;查表MOV

温馨提示

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

评论

0/150

提交评论