单片机原理及其应用——单片机控制按键依次点亮8只发光二极管

简介: 单片机原理及其应用——单片机控制按键依次点亮8只发光二极管

一、实验要求


【实验目的】

1、了解独立按键的机械原理;

2、掌握独立按键的程序识别方法。

【实验内容】

通过按键依次点亮8只发光二极管,实现按下按键时第一只发光二极管点亮,依次至第八只发光二极管点亮。


二、Proteus仿真软件画原理图


原理图和之前八只单片机控制8只发光二极管交替闪烁的电路差不多,对之前的电路图修改,只不过加了按键以及更换了单片机输入/输出口,电路图如下:

1667126572835.jpg

其中R3电阻的电阻值为10k,其作用是作为上拉电阻,当按键没有按下时,将不确定的输入信号通过一个电阻钳位在高电平,同时它也起到限流的作用,避免流入单片机接口的电流过大,其一般取值为4.7-10k欧姆。

若要将按键置于P0口,则需在单片机P0.0口处外接上拉电阻,因为P0口内部没有上拉电阻。


三、Keil编程软件编写程序


之前的实验并未说明实物现象的结果与仿真图是相反的,所以我们反着写程序这样更便于观察现象,也就是单片机控制按键依次点亮8只发光二极管反过来就是单片机控制按键依次熄灭8只发光二极管,原来是要通过一个数组使数组内的元素,数组内存储各端口输出高低电平状态组成的十六进制数据,转换为二进制就对应每个灯的点亮和熄灭,即unsigned char LED[]={0x01,0x02,0x04,0x08,0x10, 0x20,0x40,0x80}改为unsigned char LED[]=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f},然后我们的延时函数设置10ms,即delay(10),之前的实验有说明这里不再详述。


写了两套程序,都是可以运行的,第一套程序是通过数组每次a++进而取数组中的元素,从而实现按键对8只发光二极管操作,程序代码如下:

#include<reg51.h>
sbit Button=P2^0;
unsigned char LED[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char a;
void delay(unsigned int x)
{
  unsigned int i,j;
  for(i=0;i<x;i++)
  for(j=0;j<125;j++);
}
void main()
{
  P1=0xff;
  a=0;
  while(1)
  {
  if(Button==0)
  {
    delay(10);
    while(Button==0)
    P1=LED[a];
    a++;
  }
    if(a==9)
    break;
  }
}


第二套程序是通过switch语句,也是通过num++,按键按下实现按键对8只发光二极管操作,程序代码如下:

#include<reg51.h>
sbit Button=P2^0;
void delay()
{
  unsigned int i,j;
  for(i=0;i<100;i++)
  for(j=0;j<125;j++);
}
void main()
{ 
  char num;
  while(1)
  {
  if(Button==0)
    {
    delay();
    if(Button==0)
    while(!Button);
    num++;
    if(num>8)
    num=0;
  }
  switch(num)
  {
    case 1:P1=0xfe;break;
    case 2:P1=0xfd;break;
    case 3:P1=0xfb;break;
    case 4:P1=0xf7;break;
    case 5:P1=0xef;break;
    case 6:P1=0xdf;break;
    case 7:P1=0xbf;break;
    case 8:P1=0x7f;break;
  }
  }
}


四、实验结果


(一)仿真结果


仿真结果和实际结果是相反的,所以仿真结果一开始所有灯是点亮的:

1667126896853.jpg

按下按键,第一只发光二极管熄灭:

1667126913212.jpg

……依次,按下按键,到第八只发光二极管熄灭:

1667126922988.jpg


(二)连接电路


将单片机P2.0口与独立按键模块K1按键连接以及单片机P1.0-P.1.7口与LED&交通灯模块排线连接在一起(注意不要接反),连接图如下:

1667126939475.jpg


(三)烧录并观察实验现象


烧录之后一开始所有灯是熄灭的,当按下按键时,第一只发光二极管点亮,如图:

1667126949587.jpg

再点一次,第一只发光二极管熄灭,第二只发光二极管点亮,如图:

1667126963177.jpg

再点一次,第二只发光二极管熄灭,第三只发光二极管点亮,如图:

1667126974004.jpg

……依次到第八只发光二极管点亮,如图:

1667126984760.jpg

相关文章
|
17天前
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
|
17天前
【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度
【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度
|
17天前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
|
17天前
|
C语言
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
|
2月前
|
传感器 存储 程序员
《单片机原理与应用及C51编程技术》期末复习笔记
《单片机原理与应用及C51编程技术》期末复习笔记
|
4月前
|
传感器
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
|
4月前
|
芯片
AT89S52单片机的最小应用系统
AT89S52单片机的最小应用系统
50 0
【51单片机】利用【时间延迟】的原理规避【按键抖动问题】
【51单片机】利用【时间延迟】的原理规避【按键抖动问题】
|
4月前
|
编译器 C语言 开发者
单片机原理与应用:探索微型计算机世界
单片机原理与应用:探索微型计算机世界
40 1
|
4月前
|
数据采集 数据处理 C语言
单片机:探索其原理、应用与编程实践
单片机:探索其原理、应用与编程实践
52 1

热门文章

最新文章

下一篇
云函数