按键控制LED灯
单片机独立按键控制led灯实验原理
主题:单片机独立按键控制LED灯实验原理
目录
1. 概述
2. 单片机独立按键控制LED灯实验原理
3. 实验步骤
4. 结语
1. 概述
单片机在现代电子设备中起着至关重要的作用,它可以通过编程实现各种功能。其中,控制LED灯是单片机实验中常见的任务之一。本文将介绍单片机独立按键控制LED灯的实验原理及实验步骤,希望对初学者有所帮助。
2. 单片机独立按键控制LED灯实验原理
单片机独立按键控制LED灯的实验原理主要涉及到单片机的输入输出端口及按键和LED的连接方式。在单片机实验中,按键与单片机的输入端口相连,LED与单片机的输出端口相连。通过按键的按下和松开来改变单片机输出端口电平,从而控制LED的亮灭。
3. 实验步骤
为了完成单片机独立按键控制LED灯的实验,需要按照以下步骤进行操作:
步骤一:准备材料
- 单片机板
- 按键
- LED灯
- 连线
- 电源
步骤二:搭建电路
- 将按键与单片机的输入端口相连
- 将LED与单片机的输出端口相连
- 连接电源
步骤三:编写程序
- 使用相应的单片机开发软件编写程序
- 程序中需要包括按键状态检测和LED控制的部分
步骤四:烧录程序
- 将编写好的程序烧录到单片机中
步骤五:运行实验
- 按下按键,观察LED的亮灭情况
- 确保按键可以正确控制LED的亮灭
4. 结语
通过上述实验步骤,我们可以实现单片机独立按键控制LED灯的功能。这个实验不仅可以帮助学习者了解单片机的输入输出端口控制,还可
以培养动手能力和程序设计能力。希望本文对单片机实验初学者有所
帮助,谢谢阅读!实验步骤
在进行单片机独立按键控制LED灯实验时,需要按照一定的步骤进行
使用按键控制LED灯亮—按键控制LED灯亮灭程序编写
2.消抖实现
if(key==0)//第一次检测按键是否按下 { delay(10);//延时10ms,目的是避开
按键按下时的前沿抖动。 if(key==0)//再次检测按键是否按
下 ...... }
3 程序编写
#include<reg51.h>//头文件 #define uint unsigened int #define uchar unsigened char sbit led= P1^0; sbit key=P3^0; /*延时函数*/ void delay(uint x) {} void main() {
while(1) {
if(key==0) { delay(10); if(key==0) { 灯亮;} } } else {灯灭;} }
4 程序仿真调试
一、利用Proteuse软件绘制电路图
步骤: 打开Protues 软件 创建工程 创建文件 放置元件 连接电路 保存
二、装载Hex文件并仿真
5
9
课后任务
编写由一个按键按制一个 LED 灯,当 按键按下时,LED 灯亮再按时 LED 灯 灭的 C 语言程序。
单片机技术及应用
下载程序及硬件调试
1.下载程序
2.连接电路
电路连接表
控制端口
连接位置
P1.0
VD26
通过按键实现LED灯的亮灭(含两种情况)
通过按键实现LED灯的亮灭(含两种情况)
1 #include "stm32f10x.h"// 相当于51单⽚机中的 #include <reg51.h>
2 #include "stm32f10x_gpio.h"
3/*通过按键实现LED灯的亮灭
4*本项⽬是两个效果,烧程序时注意分开
5*1、LED实现的效果实是K1⼀直按下LED⼀直亮,直到K1松开LED熄灭
6*2、按⼀下key实现LED亮,再按⼀下实现LED灭
7*
8*/
9
10/*配置GPIO
11*step1配置时钟
12*结构体:Speed、Mode、Pin
13*初始化
14*/
15int main(void)
16 {
17//点亮红⾊灯
18//step1:使能
19
20 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
21//结构体
22 GPIO_InitTypeDef a;
23 a.GPIO_Speed=GPIO_Speed_50MHz;
24 a.GPIO_Pin=GPIO_Pin_5;
25//推挽输出
26 a.GPIO_Mode=GPIO_Mode_Out_PP;
27//调⽤GPIO初始化函数
28 GPIO_Init(GPIOB,&a);
29//设置PB5为低点平
30//GPIO_ResetBits(GPIOB,GPIO_Pin_5);
31//GPIO_SetBits(GPIOB,GPIO_Pin_5);
32
33
34
35/**************按键初始*************/
键盘控制LED发光二极管(模拟声控电子琴)
实验20:键盘控制LED发光二级管(模拟声控电子琴)设计报告学院土木工程班级交通021 设计人吴宁学号 021192 成绩
一、设计题目:键盘控制LED发光二极管(模拟声控电子琴)
二、总体设计:
1、题目的功能:当按下一个键时对应的发光二极管点亮,按下另一个键时,该键对应的发光二极管点亮,
同时前一个发光二极管熄灭。
2、总体方案设计:首先检索按键信息,判断被按下的时哪个键,判断出键以后利用该键的列扫描码判断
点灯信息。实验开发系统中只有16个发光二极管,用8255作输出口,利用PA口控制中音7个音符对应的7个发光二极管,PB口控制高音的7个发光二极管,PC口控制两个低音的6、7的发光二极管,剩下5个音可重复使用发光二极管。
3、受音乐声控喷水注的启发,可以设计一个音乐键控发光二极管的模拟电子琴(无声)。将实验开发系
统上的键盘自定义成中音、低音和高音的1~7键,任一个键按下后对应一个发光二极管被点亮;当按下一个键时,使该键对应的发光二极管被点亮,同时使前一个发光二极管0;随着乐谱的弹奏,相应的发光二极管随着亮灭。
三、硬件设计:
1
四、软件设计:
1、
2
ORG 0000H
START: MOV SP,#60H
MOV DPTR,#0FF20H
MOV A,#03H
MOVX @DPTR,A
MOV 70H,#00
MOV DPTR ,#0FF2BH
MOV A,#80H
MOVX @DPTR,A
KEY1: LCALL KS1 ;调用判断有无键闭合子程序JNZ LK1
N1: LCALL DIR ;调用显示子程序LJMP KEY1
按钮控制LED灯教学设计
按钮控制LED灯教学设计
1. 引言
按钮控制LED灯是一种基本的电子电路设计,本文将介绍如何使用按钮控制LED灯的原理和步骤,以便初学者能够快速掌握这一基础知识。
2. 设备清单
在开始设计之前,我们需要准备以下设备:
- Arduino开发板
- 面包板
- LED灯
- 跳线
3. 原理介绍
按钮控制LED灯的原理很简单,当按钮按下时,电流会经过按钮,然后流入LED灯,从而点亮LED灯。当按钮松开时,电流断开,LED灯熄灭。在这个过程中,Arduino开发板起到控制电流流动方向的作用。
4. 连接步骤
接下来,我们将详细介绍按钮和LED灯的连接步骤:
步骤1:将Arduino开发板连接到面包板上,确保线路连接正确并稳定。
步骤2:将一个跳线连接到Arduino开发板的数字引脚2上,并将另一端连接到面包板的一侧。这将是我们的按钮引脚。
步骤3:将另一个跳线连接到面包板的相邻位置上,并将其另一端连接到LED的正极。这将是我们的LED正极引脚。
步骤4:将第三个跳线连接到面包板的另一侧,并将其另一端连接到LED的负极。这将是我们的LED负极引脚。
5. 代码编写
在连接完成后,我们需要编写一段简单的Arduino代码来控制按钮控制LED灯的开关。
```
int buttonPin = 2; //将按钮连接到数字引脚2
int ledPin = 13; //将LED连接到数字引脚13
void setup() {
pinMode(ledPin, OUTPUT); //设置LED引脚为输出
pinMode(buttonPin, INPUT); //设置按钮引脚为输入
按键控制霓虹灯应用场景
按键控制霓虹灯应用场景
按键控制霓虹灯的应用场景有:
1. 室内照明:通过按键控制霓虹灯的亮度和颜色,实现室内的照明需求,并提供不同的光效,营造出不同的环境氛围。
2. 广告宣传:在商店、购物中心或街道上安装的霓虹灯广告牌,可以通过按键控制不同的动画或字样,吸引人们的注意力,并增加宣传效果。
3. 节日装饰:在节日或庆典等特殊场合,可以利用按键控制霓虹灯的灯光模式,创造出节日氛围,增加节日的喜庆感。
4. 娱乐场所:在酒吧、夜总会等娱乐场所中,通过按键控制霓虹灯的亮度、颜色和闪烁模式,为场所营造出独特的娱乐氛围。
5. 汽车装饰:在汽车内外安装霓虹灯,通过按键控制不同的灯光模式,增强车辆的装饰效果,提升车主的个性化需求。
6. 舞台演出:在音乐会、演唱会等舞台演出中,通过按键控制霓虹灯的灯光效果,与音乐或演出情节相结合,营造出各种感官上的效果,增强观众的沉浸感。
7. 建筑装饰:在大型建筑物上安装霓虹灯,通过按键控制不同的灯光模式,提
升建筑的美观度和辨识度,塑造独特的城市景观。
总之,在需要灯光切换或调节的场合,通过按键控制霓虹灯的灯光模式和属性,可以根据实际需求实现各种意图和效果,提供更好的视觉体验。
使用按键手动控制LED灯亮灭—独立按键及C语言相关知识
2.关系表达式
定义:用关系运算符将两个表达式连接起来的式子,称为关系表达式。
表达式
关系运算符
表达式
二、选择语句
1.if 语句
基本形式
if(表达式) {语句;}
流程图
功能
如果表达式 的值为真, 则执行语句, 否则不执行。
做一做
当x=-1 时,执行下列语句, 其结果为?if(x>0) y=3;
2.if......else......语句
基本形式
流程图
if(表达式) {语句1;} else {语句2;}
功能
如果表达式 的值为真, 则执行语句 1,否则执 行语句 2。
做一做
当x=-1 时,执行下列语句,其 结果为?if(x>0)y=3;else y=x+1;
3.if......else if ......语句
基本形式
流程图
if(表达式 1) {语句 1;}
else if(表达式 2) {语句 2;}
else if(表达式 3) {语句 3;} ……
else if(表达式 m) {语句 m;}
else {语句 n;}
功能
如果表达式的1的结 果为“真”,则执行 语句 1,并退出 if 语句; 否则去判断表达式 2, 如果表达式2为 “真”,则执行语句 2, 并退出 if 语句;否则 去判断表达式3.……最 后表达式 m 也不成立, 就去执行 else 后面的 语句 n。
按键控制LED灯
输出
电平,控制LED亮灭
SJMP L1
;返回L1,循环执行程序
END
;结束伪指令
把这段程序在WAV6000中编辑、汇编,用软件 仿真运行、调试无误,把得到bin格式或者hex 格式的目标文件,通过烧录器或者下载线,保
存到单片机的程序存储器中。把单片机插入实 验板插座里,上电运行,按下按键,观察LED 灯的亮灭。
JB bit,标 号
JB P0.1, L1
JNB bit,标 JNB P1.6,
号
L2
如果P0.1为状态“1”,则 转移至L1,如果P0.1 为状态“0”,则顺序 执行
如果P1.6为状态“0”,则 转移至L2,如果P1.6 为状态“1”,则顺序 执行
2、其他指令
功能
指令
把Cy的内容传送给 MOV bit ,C 指定位
3、按键控制任意LED灯点亮
参考程序如下:
ORG 0000H
;定位伪指令,指定下一条指令的地址,第
一条指令必须放在0000H
L1: MOV A,P3
;把P3口的状态读入累加器A中
RL A
;A中的内容循环左移
RL A
MOV P0,A ;把A中的数据送到P0口,控制P0口输出电平,控 制LED亮灭
4、LED数码管
LED 数码显示器是一种由 LED 发光二极管组合显示字符的显示器 件。它使用了 8 个LED 发光二极管,其中 7个发光二极管构成字 形“8”的各个笔画(段)a~g,另1 个用于显示小数点dp,故通 常称之为 8 段发光二极管数码显示器。其内部结构如图 5-3(a)所 示。LED 数码显示器有两种连接方法:
51单片机键盘控制LED
知识点 2:
if(key1==0)
{
delay(10);
if(keBaidu Nhomakorabea1==0)
{ while(!key1);//如果是数码管显示这有事
else {
P0=temp; } } } 通过设定标志位 flag1,使得如果有 key4 按下时, flag1=1,那么程序就会跳过 key1,2,3 的扫描,相当于 将程序屏蔽掉。即使按下也没有反应。学会标志位的 使用有很大好处。 第一次按下 key4 时,进入 if 中,这里定义一个 变量 temp,就是为了实现记忆功能,将未按 key4 前 P0 的状态赋予 temp 保存起来。然后将 LED 全部置 零。 再按一次 key4 时,进入 else,将保存状态的 temp 重新赋给 P0;从而能达到记忆功能。
实现的功能:按下 key1 键 LED 逐个点 亮,按下 key2 键上 4 个亮,按下 key3 键后 4 个亮。按下 key4 键全都灭,并且 key1, key2,按下都不起作用,再按一下 key4 键 又返回到灭前的状态。看上去具有记忆功 能。
知识点 1:
按键控制led灯实验报告
按键控制led灯实验报告
实验目的:
通过按键控制 LED 灯的开关来学习Arduino 基本输入输出控制技术。
实验器材:
1. Arduino UNO 控制板 1 块
2. 面包板 1 个
3. LED 灯 1 个
4. 220 Ω 电阻 1 个
5. 杜邦线若干
6. 按钮 1 个
实验原理:
本次实验的原理是使用Arduino 板的数字输入输出端口来实现按键控制 LED 的开关。
Arduino 是一款开源的电子平台,由一块基于单片机的电路板和一份开源的IDE(集成开发环境)组成。Arduino 具有开放的硬件和软件平台,不仅具有通用性,还可以根据需求加装各种功能扩展板(如:无线、驱动器、传感器等)。
这里的数字输入输出端口(Digital Input/Output Pins)是非常重要的部分,它可以-产生数字的输出信号(输出模式);或者可以读取数字的输入信号(输入模式)。
在Arduino的编程中,数字输入输出端口的参考代码如下:
digitalWrite(pin, value); //输出信号
value = digitalRead(pin); //输入信号
其中pin 代表的是数字输入输出端口的编号,value 代表的是数字输出端口的值(HIGH 或LOW)或数字输入端口的读取值(HIGH 或 LOW)。
实验步骤:
1. 连接 Arduino 控制板和面包板,将 LED 灯通过220 Ω 电阻与面包板负极相连,正极连接至D13 端口;
2. 在面包板中插入一个按钮,连接至 D2 端口,同时与地端连接;
3. 开启 ArduinoIDE 编辑器,在 ArduinoIDE 编辑器中输入以下代码:
两个按键控制三个led的c语言程序
两个按键控制三个led的c语言程序
以两个按键控制三个LED的C语言程序
在嵌入式系统中,控制LED灯是一个常见的任务。我们可以使用C 语言编写程序来实现这一功能。本文将介绍如何使用两个按键来控制三个LED灯的亮灭。
我们需要准备一些硬件设备。我们需要一个嵌入式开发板,上面有三个LED灯和两个按键。这些LED灯和按键通常都有对应的引脚,我们需要将它们连接到开发板上。
接下来,我们可以开始编写C语言程序。我们可以使用一个循环来不断检测按键的状态,并根据按键的状态来控制LED灯的亮灭。
我们需要定义LED灯和按键的引脚号码。我们可以使用宏定义来给它们命名,这样可以方便我们在程序中使用。
```c
#define LED1_PIN 2
#define LED2_PIN 3
#define LED3_PIN 4
#define BUTTON1_PIN 5
#define BUTTON2_PIN 6
```
接下来,我们需要初始化引脚的状态。LED灯的引脚需要设置为输出模式,而按键的引脚需要设置为输入模式。
```c
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
pinMode(BUTTON1_PIN, INPUT);
pinMode(BUTTON2_PIN, INPUT);
```
然后,我们可以进入一个无限循环,不断检测按键的状态,并根据按键的状态来控制LED灯的亮灭。
```c
while(1) {
if(digitalRead(BUTTON1_PIN) == HIGH) {
汇编按键控制led灯亮灭编写程序 概述
汇编按键控制led灯亮灭编写程序概述
1. 引言
1.1 概述
本文旨在介绍使用汇编语言编写程序,以实现按键控制LED灯亮灭的功能。通过该实验,我们可以深入了解汇编语言的基本原理和操作方法,并学会将其应用于具体的电路控制中。
1.2 文章结构
本文主要分为四个部分,分别是引言、汇编按键控制LED灯亮灭编写程序、程序测试与调试过程及结果分析以及总结和展望。在引言部分,我们将简要介绍文章的背景和目的,为读者提供整个实验的概览。接下来的部分将逐步介绍硬件准备工作、程序设计思路、关键代码解读与实现步骤等内容。随后,我们将介绍测试环境搭建、测试过程记录以及结果分析与优化方案等内容。最后,在总结和展望部分,我们将对整个实验进行总结,并提出改进方向和未来发展方向。
1.3 目的
本文的目的是帮助读者了解如何使用汇编语言编写按键控制LED灯亮灭的程序,通过这一示例项目引导读者熟悉汇编语言的基础知识,并培养其分析和解决问题的能力。通过实验过程,读者可以了解硬件准备工作、程序设计思路以及测试调
试过程,并能够根据实际需求进行结果分析和优化方案的提出。此外,本文还展望了未来发展方向,希望读者能够在此基础上进一步探索和应用汇编语言的相关知识。
以上是文章“1. 引言”部分的内容,旨在概述本文的背景、结构和目的。如果需要更加详细的内容,请继续阅读后续章节。
2. 汇编按键控制LED灯亮灭编写程序:
2.1 完成硬件准备工作:
在开始编写汇编程序之前,首先需要进行硬件准备工作。我们将使用一个单片机来控制LED灯的亮灭,并通过按键来触发控制操作。为此,我们需要将LED与单片机的输出引脚连接,并将按键与单片机的输入引脚连接。确保电路连接正确无误后,我们可以开始进行程序设计。
标记的用法,用一个按键控制1个LED灯的亮灭,按键去抖
标记的用法,用一个按键控制1个LED灯的亮灭,按键
去抖
我们学习怎么用一个按键K1控制1个LED灯的亮和灭两种状态。按一次K1灯亮,再按一次K1灯灭。再按一次又亮,再按一次又灭。我们学习一下用一个bit变量来做一个标记,然后在按键的控制下,这个标记会变化,再根据
这个标记的值,LED也输出不同的状态。因为按键按下时可能会有抖动的情况,每次按下时,可能会发生了人难以觉察到的多次抖动,相当于一下子按下了很
多次。这会导致程序无法识别出您真正的按键意图。但是抖动一般都是发生在
刚按下键和松开键的时候,所以,我们只要避开这一段时间,等键稳定按下或
者松开时,再去读它的值,一般就可以正确读取了。所以,当读到第一次按键
的值时,要延时等待一会,再处理。在松开后,也延时一会,免得检测到松开
的抖动以为又有按键。(注,更复杂的应用,需要在按下延时之后重新验证按键,为了简化和方便理解,这个例程里没有这样做。)另外,因为程序是循环
运行的,当一次按键处理后,又会再循环回来继续检测,如果您的按键这时还
没有松开,又会被读到一次新的按键,并做处理。所以我们还要做一个特殊的
处理,识别到一个按键并处理完成之后,还要等待这个按键松开后,再继续循
环运行。看程序:请根据例程里的注释理解程序。请编译,进入仿真,全速运行,看结果。全速后,由于light变量初始化时默认为0,所以灯是亮的。按下
K1,松开后,灯灭了;再按一次K1,松开后,灯灭了。这个例子里,我们只用
一个按键就控制了灯的亮灭,这种方法可以节省了硬件资源,也就是节省了硬
件成本。在实际项目设计中,有成本优势,产品就更具竞争力。所以我们应该
独立按键及矩阵键盘控制LED灯课件
介绍这两种重要的电子元件及其在 电路中的应用。
编程基础
01
02
03
编程语言
介绍适用于独立按键和矩 阵键盘控制的编程语言, 如C语言或Python。
程序结构
详细解释程序的各个部分 ,如变量、函数、循环等 。
条件语句
介绍条件语句及其在编程 中的应用。
LED灯基础
LED灯的工作原理
详细描述LED灯的工作原理及特点。
代码
简单的if语句判断按键状态,并控制LED灯的亮灭 。
代码解析
if语句
判断按键状态,如果按键按下,则 LED灯亮;如果按键未按下,则LED 灯灭。
延时函数
为了模拟按键按下和释放的过程,可 以使用延时函数来设置按键按下的时 间,以及按键释放的时间。
03 矩阵键盘控制 LED灯
硬件连接
连接方式
矩阵键盘通过GPIO接口与 树莓派连接,通过按键触 发相应的LED灯。
连接电路
矩阵键盘的行线和列线分 别与树莓派的GPIO引脚相 连,形成矩阵结构。
ቤተ መጻሕፍቲ ባይዱ
电源和地线
需要连接电源和地线,以 给矩阵键盘提供工作电压 。
编程实现
01
02
03
04
安装库
需要安装相应的Python库, 如RPi.GPIO和MFRC522。
独立按键及矩阵键盘控制LED灯课件
$number {01}
目录
• 独立按键控制LED灯 • 矩阵键盘控制LED灯 • 独立按键与矩阵键盘的比较 • 独立按键及矩阵键盘在智能家居
中的应用 • 独立按键及矩阵键盘的常见问题
及解决方案
01
独立按键控制LED灯
独立按键的工作原理
独立按键是一种机械开关,通过 按键的按下或释放来接通或断开
05
独立按键及矩阵键盘的常见 问题及解决方案
独立按键常见问题及解决方案
总结词
独立按键在使用过程中可能会出 现按键不灵敏、抖动、串扰等问
题。
按键不灵敏
由于灰尘、油污或氧化导致接触 不良,可以清洗或更换按键解决
。
抖动
按键按下时可能出现抖动现象, 影响信号读取,可以通过软件消
抖处理解决。
串扰
多个按键同时使用时可能相互干 扰,可以优化布线、增加隔离或
01
矩阵键盘由行线和列线组成,按键位于行线和 列线的交叉点上。
02
当按键被按下时,对应的行线和列线形成闭合 回路Leabharlann Baidu从而检测到按键被按下。
03
矩阵键盘通过检测行线和列线的电平变化来识 别按键的输入。
矩阵键盘控制LED灯的电路连接
LED灯可以连接到矩阵键盘的行线和列线上,通过按键的按下和释放来控制LED灯的 亮灭。
5_按键控制LED灯
接下来对LED做初始化函数说明:
3
《物联网应用技术》
按键宏定义
接下来是按键宏定义:
4
《物联网应用技术》
初始化按键
然后是初始化按键:
5
《物联网应用技术》
按键无锁存举例
如果使用无锁存,要通过读取IO端口的电平来判断按键是否按下:
通过原理图可知,按键按下的时候MCU读取到的应该是低电平,那么在前面加一个取反的符号,于 是按下的时候读取到的电平为0,取反以后得到的为1,于是if条件成立。那么接着就会执行函数括号 里面的内容,GPIO置位函数就会将其位设为1,于是LED接收到高电平,LED被点亮。如果函数条件不 成立,那么就不会执行函数里面的内容。这种代码就是无锁存的情况。
2
《物联网应用技术》
按键实行一个动作过程是需要一定时间的,一般为100mS-1S左右,而一个单片机执行一个机器周期 的时间很短,时钟为10MHZ的周期为0.1μs,这样按键每一次动作程序就会多次检测按键,出现误判 (一次按下,多次动作)。按键触点在闭合或者断开的瞬间会出现抖动,抖动时间一般小于10ms。
2、什么是有锁存?比如我们按下按键以后,LED常亮,但是我们想要再次关闭LED 灯,那么就再次按一下按键,我们按下第一次按键以后,无论等待多长时间,直到 再次按下按键以后才能关闭LED,这种情况我们称为是有锁存,
3、那么什么是无锁存呢?我们按下按键,LED点亮,松开按键,LED熄灭,这种情 况就叫无锁存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【拓展训练】
编写程序实现按键显示另外6个数字中的 4个。
3、开关输入的连接方法
当需要使用的开关数量较少时,一般直接使用 独立式按键输入,每个开关占用一个端口,其 优点是编程简单,缺点是占用端口资源多。当 需要的开关数量较多,CPU端口不够用时,使 用矩阵式输入,其优点是占用端口资源少,缺 点是编程比较复杂。本任务中使用独立式按键 输入方法。 图5-2所示为一个独立式按键输入的常用连接 方法,当按键按下时CPU端口为“0”,当按键 松开时CPU端口为“1”。通过程序读取端口状 态就能知道开关的状态。
4、用LED数码管显示1、2、3、4
按下按键时,点亮正确的字段,就可以显示出数字,下表是实验板上使用的 共阳极LED数码管显示1、2、3、4的字型代码。
数字
1 2
dp
1 1
g
1 0
f
1 1
e
1 0
d
1 0
c
0 1
b
0 0
a
1 0
字段
0F9H 0A4H
3
4
1
1
0
0
1
0
1
1
0
1
0
0
0
0
0
1
0B0H
99H
82H 92H
0A2H 0B2H
81H 91H
0A1H 0B1H
80H 90H
0A0H 0B0H
【实训内容与步骤】
1.按键控制对应LED灯点亮
参考程序如下: ORG 0000H ;定位伪指令,指定下一条指令的地 址, 第一条指令必须放在0000H L1:MOV A,P3 ;把P3口的状态读入累加器A 中 MOV P0,A ;把A中的数据送到P0口,控制P0口 输出 电平,控制LED亮灭 SJMP L1 ;返回L1,循环执行程序 END ;结束伪指令
端口在上拉电阻的作用下保持为高电平 按键按下端口为低电平状态,输入逻辑“0” 输入逻辑“1”
图5-2 独立式按键输入
89S51单片机中各端口用做输入时除P0 端口外,其他端口内部都具有上拉电阻, 因此使用这些端口做开关输入时可不用 外接上拉电阻。由于实验板上的按键使 用了P3口的4根I/O口线,因此可以省略 外接上拉电阻。
按下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,回到开始处继续执行。
MOV A, P3
把P3中8个端口的状态送到 累加器A中
JB P0.1, L1
如果P0.1为状态“1”,则 转移至L1,如果P0.1 为状态“0”,则顺序 执行 如果P1.6为状态“0”,则 转移至L2,如果P1.6 为状态“1”,则顺序 执行
JNB bit,标 号
JNB P1.6, L2
2、其他指令
位处理指令操作的对象是可直接寻址位,其寻址范围 是00H—0FFH,共256位。其中低128位的地址是连续 的,地址范围是00H—7FH。地址在80H以上的位都是 特殊功能寄存器里的可直接寻址位,这些特殊功能寄 存器的共同特点是其地址(注意:是特殊功能寄存器 自己的字节地址,不是位地址)能被8整除,这样的特 殊功能寄存器有12个,共有93个可直接寻址位(有3个 位IP.7、IP.6、IE.6没有定义)。因此80H以上的位地 址并不连续。详见任务三的相关部分。下表中列出了 P0~P3口字节地址与位地址的关系。
2、模拟开关灯
参考程序如下: ORG 0000H L1: JB P3.2,L2 转到L2 CLR P0.0
SJMP L1 L2: JB P3.3,L1 SETB P0.0 SJMP L1 END
;如果P3.2的状态为1(1号键未按),则跳 ;1号键按下,P0.0清0,输出低电平,LED 发光 ;如果P3.3的状态为1(2号键未按),则跳 转到L1 ;2号键按下,P0.0置1,输出高电平,LED 熄灭
LED 数码显示器的结构与显示段码
【软件知识】
1、用于输入的指令
举 例 功 能 指 令 MOV C,bit 指令 MOV C, P3.2 功 能 把P3.2端口的状态送到C
读取一个端 口的状 态 读取一组端 口的状 态 根据端口状 态进行 转移操 作
MOV A,dir ect JB bit,标 号
4、LED数码管
LED 数码显示器是一种由 LED 发光二极管组合显示字符的显示器 件。它使用了 8 个LED 发光二极管,其中 7个发光二极管构成字 形“8”的各个笔画(段)a~g,另1 个用于显示小数点dp,故通 常称之为 8 段发光二极管数码显示器。其内部结构如图 5-3(a)所 示。LED 数码显示器有两种连接方法: (1) 共阴极接法。把发光二极管的阴极连在一起构成公共阴极, 使用时公共阴极接低电平。每个发光二极管的阳极通过电阻与输 入端相连。如图 5-3(b)所示。当笔画(字段)接高电平时被点亮。 (2) 共阳极接法。把发光二极管的阳极连在一起构成公共阳极, 使用时公共阳极接高电平,每个发光二极管的阴极通过电阻与输 入端相连。如图 5-3(c)所示。当笔画(字段)接低电平时被点亮。
MOV direct,#data
MOV P0,#0F9H
把立即数0F9H送给P0端口输出
3、位操作与字节操作
从上表中可以看出:指令MOV C,P3.2 与MOV A,P3有一个很大的不同就是操 作的对象不同。MOV C,P3.2一次操作 一位,而MOV A,P3一次操作一个字节。 类似的以位作为操作对象的指令一共有 17条,称为位处理指令。例如JB P0.1, L1,就是一条位处理指令。
字节 地址 PX.7 PX.6 PX.5
位地址
PX.4
PX.3
PX.2
PX.1
PX.0
P0 P1
P2 P3
80H 90H
0A0H 0B0H
87H 97H
0A7H 0B7H
86H 96H
0A6H 0B6H
85H 95H
0A5H 0B5H
84H 94H
0A4H 0B4H
83H 93H
0A3H 0B3H
举 例
功 能 指 令 指令 MOV C,P0.0 功 能 把C的值传送到P0.0端口输出
把Cy的内容传送给 指定位
Mຫໍສະໝຸດ BaiduV bit ,C
把指定位清0 把指定位置1
CLR bit SETB bit
CLR P0.0 SETB P0.1
P0.0清0,输出低电平 P0.1置1,输出高电平
把立即数送内部存 储单元
任务五 按键控制LED灯
在单片机应用系统中,通常都要求单片机有人机对 话功能。需要输入信息,实现对系统的控制,这时就需 要键盘。单片机的端口除了做输出外也可用做输入。本 任务通过制作一个使用按键控制LED灯,来学习单片机 端口输入的使用方法,同时学习常用的输出设备:LED 数码管。
硬件知识
1、硬件电路原理图
把这段程序在WAV6000中编辑、汇编,用软件 仿真运行、调试无误,把得到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灯。
2、89S51单片机端口的输入方法
89S51单片机的外部端口均为双向端口,即:既 可以用做输出,也可以用做输入。用做输入揣口 时应当注意以下问题。 (1)端口用于输入前必须向端口写“1” (2)P0口中无上拉电阻,用做开关输入时必 须外加上拉电阻,而其他端口内部含有上拉电阻 阻,用做开关输入时可不必外接上拉电阻。
3、按键控制任意LED灯点亮
参考程序如下: ORG 0000H ;定位伪指令,指定下一条指令的地址,第 一条指令必须放在0000H L1: MOV A,P3 ;把P3口的状态读入累加器A中 RL A ;A中的内容循环左移 RL A MOV 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口的排列顺序问题,在实验板上看起来 灯是右移了。