C语言课设项目-51单片机-独立按键与矩阵按键

简介: C语言课设项目-51单片机-独立按键与矩阵按键

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

目录

一、独立按键

1.按键介绍

2.独立按键原理

3.编写独立按键控制程序

二、矩阵按键

1.矩阵按键的由来

2.矩阵按键扫描原理

3.编写矩阵按键控制程序


一、独立按键

1.按键介绍

轻触开关是一种电子开关,使用时,轻轻按开关按钮就可使开关接通,当松开手时,开关断开。我们使用的开关如下图:

2.独立按键原理

如下图所示:当k1按下以后,由于接地,IO接口和内部输入口就会变成低电平,当按键不按下且内部没有输出时,IO口默认为高电平

2.独立按键原理

如下图所示:当k1按下以后,由于接地,IO接口和内部输入口就会变成低电平,当按键不按下且内部没有输出时,IO口默认为高电平

硬件消抖电路:

3.编写独立按键控制程序

#include"reg51.h"
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit led =P2^0;
 //如原理图所示:k1接的是RXD接口,而RXD接的是P3.1
sbit k1=P3^1;
void delay(u16 i) //延时函数
{
  while(i--);  //当i=1时,可以延时10微秒
}
void keypros()
{
  //判断按键是否按下
  if(k1==0)
  {
      delay(1000);  //通过延时时间实现消抖处理
    if(k1==0) //判断是否按下
    {  
      //对其进行循环取反实现按键控制功能
      led = ~led; 
    }
    while(!k1);//判断按键是否松开
  }
}
void main()
{
  while(1)  //通过循环实现按键控制LED
  {
      keypros();
  }
}

二、矩阵按键

1.矩阵按键的由来

由图可得:同样是8个IO接口,独立按键只能连接8个按钮,而矩阵键盘可以连接16个接口,所以矩阵键盘经常用于按键比较多的情况

2.矩阵按键扫描原理

方法一:      逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。

方法二:     行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。

3.编写矩阵按键控制程序

//通过行列扫描实现矩阵按键
#include"reg51.h"
typedef unsigned char u8;
typedef unsigned int u16;
u8 code smgduan[16]={0x3f,0x05,0x5b,0x4f,0x66,0x6d,
          0x7d,0x07,0x7f,0x6f,0x77,0x7c,
          0x39 , 0x5e , 0x79 , 0x71}; //共阴
u8 KeyValue;  //创建变量作为smgduan数组的下标
void delay(u16 i)
{
  while(i--);
}
void KeyDown()
{
  char a = 0;
  //首先使高四位全部输出低电平,低四位输出高电平
  P1=0x0f;
  if(P1!=0x0f)  //说明有按键按下
  {
    delay(1000);//消除抖动
    if(P1!=0x0f) 
    {
      switch(P1) //对每一列进行测试
      {
        case(0x07): //转换为二进制为00000111,说明P-13接口有按键按下
          KeyValue=0;
          break;
        case(0x0b): //P-12接口有按键按下
          KeyValue=1;
          break;
        case(0x0d): //P-11接口有按键按下
          KeyValue=2;
          break;
        case(0x0e): //P-10接口有按键按下
          KeyValue=3;
          break;
      }
      P1=0xf0;  //高四位输出高电平,低四位输出低电平
      switch(P1)  //测试每一行
      {
      //从每一列的测试跳出后,进入每一行的测试,此时的KeyValue为每一列的值,要想与每一行对应,只需要在每一行+4即可
        case(0x70): //转换为二进制为01110000,说明P-17接口有按键按下
          KeyValue=KeyValue;
          break;
        case(0xb0): //P-16接口有按键按下
          KeyValue=KeyValue+4;
          break;
        case(0xd0): //P-15接口有按键按下
          KeyValue=KeyValue+8;
          break;
        case(0xe0): //P-14接口有按键按下
          KeyValue=KeyValue+16 ;
          break;
       }
       //按键松开的判断
       while((a<50)&&(P1!=0xf0))
       {
        delay(1000);
        a++;
       }
    }
  }
}
void main()
{ 
  while(1)  
  {
    KeyDown();
    P0=~smgduan[KeyValue];
  }
}


相关文章
|
3月前
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
261 1
|
7天前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
18 1
|
1月前
|
C语言
【总结】单片机重点知识总结记录之C语言条件编译(五)
【总结】单片机重点知识总结记录之C语言条件编译(五)
|
3月前
【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度
【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度
|
3月前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
103 3
|
3月前
|
C语言
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
|
3月前
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
|
5月前
|
C语言
C语言实战项目——学生试卷分数统计
C语言实战项目——学生试卷分数统计
|
5月前
|
C语言
C语言学习记录——鹏哥扫雷项目实现及递归展开、记录雷坐标
C语言学习记录——鹏哥扫雷项目实现及递归展开、记录雷坐标
69 0
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
33 3