《按键控制LED灯ppt课件》由会员分享,可在线阅读,更多相关《按键控制LED灯ppt课件(20页珍藏版)》请在金锄头文库上搜索。
1、1任务五 按键控制LED灯 在单片机应用系统中,通常都要求单片机有人机对话功能。需要输入信息,实现对系统的控制,这时就需要键盘。单片机的端口除了做输出外也可用做输入。本任务通过制作一个使用按键控制LED灯,来学习单片机端口输入的使用方法,同时学习常用的输出设备:LED数码管。2硬件知识1、硬件电路原理图、硬件电路原理图32、89S51单片机端口的输入方法89S51单片机的外部端口均为双向端口,即:既单片机的外部端口均为双向端口,即:既可以用做输出,也可以用做输入。用做输入揣口可以用做输出,也可以用做输入。用做输入揣口时应当注意以下问题。时应当注意以下问题。 (1)端口用于输入前必须向端口写)端
2、口用于输入前必须向端口写“1” (2)P0口中无上拉电阻,用做开关输入时必须口中无上拉电阻,用做开关输入时必须外加上拉电阻,而其他端口内部含有上拉电阻阻,外加上拉电阻,而其他端口内部含有上拉电阻阻,用做开关输入时可不必外接上拉电阻。用做开关输入时可不必外接上拉电阻。43、开关输入的连接方法 当需要使用的开关数量较少时,一般直接使用独立式按键输入,每个开关占用一个端口,其优点是编程简单,缺点是占用端口资源多。当需要的开关数量较多,CPU端口不够用时,使用矩阵式输入,其优点是占用端口资源少,缺点是编程比较复杂。本任务中使用独立式按键输入方法。图5-2所示为一个独立式按键输入的常用连接方法,当按键按
3、下时CPU端口为“0”,当按键松开时CPU端口为“1”。通过程序读取端口状态就能知道开关的状态。5图5-2 独立式按键输入端口在上拉电阻的作用下保持为高电平 按键按下端口为低电平状态,输入逻辑“0” 输入逻辑“1”689S51单片机中各端口用做输入时除P0端口外,其他端口内部都具有上拉电阻,因此使用这些端口做开关输入时可不用外接上拉电阻。由于实验板上的按键使用了P3口的4根I/O口线,因此可以省略外接上拉电阻。74、LED数码管LED 数码显示器是一种由 LED 发光二极管组合显示字符的显示器件。它使用了 8 个LED 发光二极管,其中 7个发光二极管构成字形“8”的各个笔画(段)ag,另1
4、个用于显示小数点dp,故通常称之为 8 段发光二极管数码显示器。其内部结构如图 5-3(a)所示。LED 数码显示器有两种连接方法: (1) 共阴极接法。把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接低电平。每个发光二极管的阳极通过电阻与输入端相连。如图 5-3(b)所示。当笔画(字段)接高电平时被点亮。(2) 共阳极接法。把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接高电平,每个发光二极管的阴极通过电阻与输入端相连。如图 5-3(c)所示。当笔画(字段)接低电平时被点亮。8 LED 数码显示器的结构与显示段码 9【软件知识】1、用于输入的指令、用于输入的指令功 能指 令举
5、 例指 令功 能读取一个端口的状态MOV C,bitMOV C,P3.2把P3.2端口的状态送到C读取一组端口的状态MOV A,directMOV A,P3把P3中8个端口的状态送到累加器A中根据端口状态进行转移操作JB bit,标号JB P0.1,L1如果P0.1为状态“1”,则转移至L1,如果P0.1为状态“0”,则顺序执行JNB bit,标号JNB P1.6,L2如果P1.6为状态“0”,则转移至L2,如果P1.6为状态“1”,则顺序执行102、其他指令功 能指 令举 例指 令功 能把Cy的内容传送给指定位MOV bit ,CMOV C,P0.0把C的值传送到P0.0端口输出把指定位清0
6、CLR bitCLR P0.0P0.0清0,输出低电平把指定位置1SETB bitSETB P0.1P0.1置1,输出高电平把立即数送内部存储单元MOV direct,#dataMOV P0,#0F9H把立即数0F9H送给P0端口输出113、位操作与字节操作从上表中可以看出:指令MOV C,P3.2与MOV A,P3有一个很大的不同就是操作的对象不同。MOV C,P3.2一次操作一位,而MOV A,P3一次操作一个字节。类似的以位作为操作对象的指令一共有17条,称为位处理指令。例如JB P0.1,L1,就是一条位处理指令。12位处理指令操作的对象是可直接寻址位,其寻址范围是00H0FFH,共2
7、56位。其中低128位的地址是连续的,地址范围是00H7FH。地址在80H以上的位都是特殊功能寄存器里的可直接寻址位,这些特殊功能寄存器的共同特点是其地址(注意:是特殊功能寄存器自己的字节地址,不是位地址)能被8整除,这样的特殊功能寄存器有12个,共有93个可直接寻址位(有3个位IP.7、IP.6、IE.6没有定义)。因此80H以上的位地址并不连续。详见任务三的相关部分。下表中列出了P0P3口字节地址与位地址的关系。13字节地址位地址PX.7PX.6PX.5PX.4PX.3PX.2PX.1PX.0P080H87H86H85H84H83H82H81H80HP190H97H96H95H94H93H
8、92H91H90HP20A0H0A7H0A6H0A5H0A4H0A3H0A2H0A1H0A0HP30B0H0B7H0B6H0B5H0B4H0B3H0B2H0B1H0B0H14【实训内容与步骤】1.按键控制对应按键控制对应LED灯点亮灯点亮参考程序如下:ORG 0000H;定位伪指令,指定下一条指令的地址, 第一条指令必须放在0000HL1:MOV A,P3;把P3口的状态读入累加器A中MOV P0,A ;把A中的数据送到P0口,控制P0口输出 电平,控制LED亮灭SJMP L1;返回L1,循环执行程序END;结束伪指令15把这段程序在WAV6000中编辑、汇编,用软件仿真运行、调试无误,把得到
9、bin格式或者hex格式的目标文件,通过烧录器或者下载线,保存到单片机的程序存储器中。把单片机插入实验板插座里,上电运行,按下按键,观察LED灯的亮灭。分析该程序,我们发现,当按下P3口外接的按键时,与之连接的引脚变成低电平,单片机执行MOV A,P3指令时,该引脚的状态输入到A中。在执行MOV P0,A时,输出到P0口,与之对应的P0口引脚为低电平,点亮相应的LED灯。P3.2、P3.3、P3.4、P3.5分别控制P0.2、P0.3、P0.4、P0.5引脚连接的LED灯。162、模拟开关灯参考程序如下:ORG 0000HL1:JB P3.2,L2;如果P3.2的状态为1(1号键未按),则跳转
10、到L2CLR P0.0;1号键按下,P0.0清0,输出低电平,LED 发光SJMP L1L2:JB P3.3,L1;如果P3.3的状态为1(2号键未按),则跳转到L1SETB P0.0;2号键按下,P0.0置1,输出高电平,LED熄灭SJMP L1END17按下1号键时,P3.2=0,程序从L1顺序执行,P0.0被清0,输出低电平,LED发光,1号键未按下,程序跳转到L2,检测2号键,即P3.3的状态,如果P3.3的状态为1(2号键未按),则跳转到L1,完成一个循环;如果P3.3的状态为0(2号键被按下),程序从L2顺序执行,P0.0置1,输出高电平,LED熄灭。最后执行 SJMP L1,回到
11、开始处继续执行。183、按键控制任意LED灯点亮参考程序如下:ORG 0000H;定位伪指令,指定下一条指令的地址,第一条指令必须放在0000HL1: MOV A,P3;把P3口的状态读入累加器A中RL A;A中的内容循环左移RL AMOV P0,A;把A中的数据送到P0口,控制P0口输出电平,控制LED亮灭 SJMP L1;返回L1,循环执行程序END;结束伪指令在以上的这段程序中,加了两条RL A指令,实现了两次左移,这样P3.2、P3.3、P3.4、P3.5分别控制P0.4、P0.5 、P0.6、P0.7引脚连接的LED灯。由于P0口的排列顺序问题,在实验板上看起来灯是右移了。194、用LED数码管显示1、2、3、4数字dpgfedcba字段1111110010F9H2101001000A4H3101100000B0H41001100199H按下按键时,点亮正确的字段,就可以显示出数字,下表是实验板上使用的共阳极LED数码管显示1、2、3、4的字型代码。 20【拓展训练】编写程序实现按键显示另外6个数字中的4个。