学习笔记单片机的40个经典实验之3:多路开关状态指示
一. 实验任务
如图 4.3.1 所示,AT89S51 单片机的 P1.0-P1.3 接四个发光二极管 L1-L4,P1.4-P1.7 接了四个开关 K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。
二. 电路原理图
图 4.3.1
三. 系统板上硬件连线
1. 把“单片机系统”区域中的 P1.0-P1.3 用导线连接到“八路发光二极管指示模块”区域中的 L1-L4 端口上;
2. 把“单片机系统”区域中的 P1.4-P1.7 用导线连接到“四路拨动开关”区域中的 K1-K4 端口上;
四. 程序设计内容
1. 开关状态检测
对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用 JB P1.X,REL或 JNB P1.X,REL 指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用 MOV A,P1 指令一次把 P1 端口的状态全部读入,然后取高 4 位的状态来指示。
2. 输出控制
根据开关的状态,由发光二极管 L1-L4 来指示,我们可以用 SETB P1.X 和 CLRP1.X 指令来完成,也可以采用 MOV P1,#1111XXXXB 方法一次指示。
五. 程序框图
读 P1 口数据到 ACC 中
ACC 内容右移 4 次
ACC 内容与 F0H 相或
ACC 内容送入 P1 口
<![endif]-->
图 4.3.2
六. 方法一(汇编源程序)
ORG 00H
START: MOV A,P1
ANL A,#0F0H
RR A
ORl A,#0F0H
MOV P1,A
SJMP START
END
七. 方法一(C 语言源程序)
#include <AT89X51.H>
unsigned char temp;
void main(void)
{
while(1)
{
temp=P1>>4;
temp=temp | 0xf0;
P1=temp;
}
}
八. 方法二(汇编源程序)
ORG 00H
START: JB P1.4,NEXT1
CLR P1.0
SJMP NEX1
NEXT1: SETB P1.0
NEX1: JB P1.5,NEXT2
CLR P1.1
SJMP NEX2
NEXT2: SETB P1.1
NEX2: JB P1.6,NEXT3
CLR P1.2
SJMP NEX3
NEXT3: SETB P1.2
NEX3: JB P1.7,NEXT4
CLR P1.3
SJMP NEX4
NEXT4: SETB P1.3
NEX4: SJMP START
END
九. 方法二(C 语言源程序)
if(P1_4==0)
{
P1_0=0;
}
else
{
P1_0=1;
}
if(P1_5==0)
{
P1_1=0;
P1_1=1;
}
if(P1_6==0)
{
P1_2=0;
P1_2=1;
}
if(P1_7==0)
{
P1_3=0;
P1_3=1;
阅读本文用了: 分 秒,转发只需1秒
❀ 转载是一种智慧❀ 分享是一种美德❀
单片机常用电路3-按键检测、LED驱动电路
在单片机入门学习中,最简单、最常见的两种入门元器件大概就是按键和LED了,围绕按键和LED可以基本上把单片机的功能学很多,例如按键可以用来学习单片机的端口输入功能、端口外部中断功能、定时/计数器的计数功能等等;而LED可以用来学习单片机的端口输出功能,定时/计数器的定时功能、PWM功能,位操作功能,电压比较器功能,以及单片机多种操作控制、流程指示等功能。
现在我们就来简单了解一下按键检测和LED驱动电路。
1、按键检测电路
图1是按键检测电路。该电路图包含两种电路:
图1 按键检测电路
一种是连接按键的单片机端口在按键未按下时,处于低电平状态,当按键按下后,单片机端口变为高电平,也就是说,当单片机端口检测到端口电平由低电平变为高电平后,可以判断为按键按下。
另一种是连接按键的单片机端口在按键未按下时,处于高电平状态,当按键按下后,单片机端口变为低电平,也就是说,当单片机端口检测到端口电平由高电平变为低电平后,可以判断为按键按下。
这种按键检测电路的缺点是没有防抖动功能,所以要实现消抖功能,必须通过单片机软件编程实现。
另外,电路中的电阻的作用是为了保护端口,避免电源直接连到单片机端口导致的烧毁端口情况发生。
2、带消抖功能的按键检测电路
图2是带消抖功能的按键检测电路,同样的,带消抖功能的按键检测电路也分为按键平时处于高电平还是低电平两种。我们以按键未按下时处于高电平,按下后处于低电平为例来了解一下电路原理。
图2 硬件消抖电路
当按键断开时,电源电压通过电阻对电容充电,电容上的电压与电源电压相等,当按键按下时,由于按键内阻很小,电容通过按键迅速放电,按键两端电压迅速降到接近0V,单片机输入端为低电平,在按键按下时,由于抖动导致按键会短时断开,电源电压经电阻对电容充电,由于电阻的阻值较大,短时间内电容充电量很少,所以电容两端电压基本不变,单片机输入端的电平也基本保持不变,从而保证了按键抖动时仍可以使单片机输入端保持稳定的低电平信号。
这种硬件消抖电路需要根据实际情况选择R和C的值,具体请参考我在头条里的文章《基于proteus的51单片机开发实例(7)--按键的检测》。
3、简单的LED驱动电路
图3是一种简单的LED驱动电路。这两个电路一个是LED发光时,电流经过LED流到单片机端口,俗称“灌电流”驱动LED,另一种是LED发光时,电流经过单片机端口流到地,俗称“拉电流”驱动LED。
图3 LED驱动电路
这种电路的缺点是:单片机的驱动能力有限,一般单片机端口驱动电流能力在10mA以下,并且单片机总的驱动电流一般不超过100mA。所以当单片机电路中电路模块较多时,可能会导致驱动能力不足,因此这种方式只适合在学习和实验时,不适合用在单片机产品中。
4、通用LED驱动电路
图4,图5是常用的LED驱动电路。在这两个电路中,单片机端口实际上相当于开关的功能,当单片机输出高(或者低)电平时,LED点亮(或者熄灭);当单片机输出低(或者高)电平时,LED熄灭(或者点亮),驱动LED发光所需的电流由三极管提供,单片机端口只负责控制三极管的导通或者截止就可以了。
图4 LED驱动电路1
图5 LED驱动电路2
5、LED驱动芯片
现在有很多专用的LED驱动芯片,可以直接驱动多路LED,至于LED驱动芯片的电路,每种芯片有各自特点,这里就不多说了。
相关问答
单片机 的按键 开关 抖动的产生原因,抖动的特点和如何消除抖动 ...开关按钮,但信号的传导并不是单纯的由1断开/闭合时会有抖动,信号如图示会在HIGH和LOW之间抖动。这种抖动对人来说是感觉不到的,但对单片机来说,则是...
单片机 按下 开关 灯就亮?我觉得精度不高的话可以参考RC延时电路,或者用NE555弄个延时电路,当然你也没说精度,甚至用单片机弄一个也行。我觉得精度不高的话可以参考RC延时电路,或者用N...
两个接近 开关 怎么实现正反转和转速 检测 ?前言:谢谢您关注,关注我有更多专业电工电子知识。一、怎样用接近开关直接控制电机正反转?用接近开关直接控制电机正反转方法如下:互锁是2个接触器...比如说,...
如何通过 单片机 检查汽车车门是否关闭(车门上安装的是什么传...[最佳回答]开关的话,接在单片机IO口上,直接循环判断端口高低电平不就行了么,检测到断开就报警
stm 单片机 怎么控制外部 开关 ?答stm单片机通过stm32输出一个电压(3v左右),而STM8S单片机本身就直接接在电池上,利用单片机的停机模式,将单片机本身的电流降低到μA级控制一个开关的通断。...
我的STC89C52,烧录程序的时候,一直显示正在 检测 目标 单片机 ,...仔细检测2、COM的波特率设置错误选择单片机型号的时候是什么型号的就选什么型号,仔细找,然后写入程序至软件,插上开发板之前关闭开发板的自锁开关,让软件检测...
如何用 单片机 一个按钮 开关 控制3个灯3种效果。流水。闪烁。还有一直亮。用keil编程?一步步调试,先把按键去掉。不是没有报错,就会按照你的步骤来实现。这个感觉像是宋老师的开发板。如果不会调试,那么可以用他们提供的代码来对比。一步步调试,...
如何学习 单片机 类似PLC的 开关 量,模拟量难吗?请你参考:PLC用于电气自动化,侧重于电工;单片机用于电子电路的控制,侧重于电子;学习好这两样都有前途,要选择其中一个学习的话,那就要看你的兴趣在哪里了...
单片机 怎么控制水泵 开关 ?单片机可以通过控制继电器的开关,来控制水泵的启停。首先,需要将水泵的电源接入继电器的通电端,然后将水泵的控制线接入继电器的控制端。接下来,通过单片机...
单片机 中双闪 开关 叫什么?灯管采用氙气灯管,单片机控制电路,左右轮换频闪不间断工作。汽车双跳灯俗称汽车双闪灯,就是两个转向灯一起闪,其工作原理与转向灯相同。在车辆的仪表盘上有...