51单片机的4x4矩阵键盘扫描例程(C51)

发布者:雅意盎然最新更新时间:2018-06-22 来源: eefocus关键字:51单片机  4x4矩阵键盘  C51 手机看文章 扫描二维码
随时随地手机看文章

//4x4矩阵键盘扫描例程(C51)
//使用P0口上的LED灯显示4x4键盘扫描得到的键值
//
//广西民大物电学院 李映超 2010.4.19

#include                     //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int 
#define key_4x4_port P3                //定义4x4键盘使用的单片机端口
uchar key;                                        //4x4键盘扫描所得的键值保存到这里
void delayms(uint xms);        //声明延时子函数
void key_4x4_scan();    //声明4x4键盘扫描子函数,得到的键值送至全局变量key
//========================================================
void main()
{
        P0=0xff;  //P0开机初始化
        key=0xff; //键盘值开机初始化为ff(检测到的键值应为0----15)
  while(1)
  {
        key_4x4_scan();//不停调用键盘扫描程序
        P0=key;                //用P0来显示键值
  }
}
//========================================================
void delayms(uint xms)      //延时子函数                        
{        uint i,j;
        for(i=xms;i>0;i--)                      //i=xms即延时约xms毫秒
                for(j=110;j>0;j--);
}
//---------------------------------------------
void key_4x4_scan()                    //4x4键盘扫描子函数,得到的键值送至全局变量key
{        uchar temp ;
    key_4x4_port=0xfe;           //送出最高位0电平去扫描
    temp=key_4x4_port;           //读出整个口的得到的值
    temp=temp&0xf0;                   //屏蔽低4位
    if(temp!=0xf0)                   //假如高4位不是全1
    { delayms(10);                   //延时消抖再读
          temp=key_4x4_port;
          temp=temp&0xf0;
      if(temp!=0xf0)           //消抖后如果再次确定高4位不是全1
      { temp=key_4x4_port; //读出此次按键的值
        switch(temp)
        { case 0xee:
               key=0; break;
          case 0xde:
               key=1; break;
          case 0xbe:
               key=2; break;
          case 0x7e:
               key=3; break;
         }
         while(temp!=0xf0)          //等待按键放开
         { temp=key_4x4_port;
           temp=temp&0xf0;
         }
      }
    }
    key_4x4_port=0xfd;
    temp=key_4x4_port;
    temp=temp&0xf0;
    if(temp!=0xf0)
    { delayms(10);
      temp=key_4x4_port;
      temp=temp&0xf0;
      if(temp!=0xf0)
      {        temp=key_4x4_port;
        switch(temp)
        { case 0xed:
               key=4; break;
          case 0xdd:
               key=5; break;
          case 0xbd:
               key=6; break;
          case 0x7d:
               key=7; break;
         }
         while(temp!=0xf0)
         { temp=key_4x4_port;
           temp=temp&0xf0;
         }
      }
      }
    key_4x4_port=0xfb;
    temp=key_4x4_port;
    temp=temp&0xf0;
    if(temp!=0xf0)
    { delayms(10);
             temp=key_4x4_port;
      temp=temp&0xf0;
      if(temp!=0xf0)
      { temp=key_4x4_port;
        switch(temp)
        { case 0xeb:
               key=8;  break;
          case 0xdb:
               key=9;  break;
          case 0xbb:
               key=10; break;
          case 0x7b:
               key=11; break;
         }
         while(temp!=0xf0)
         { temp=key_4x4_port;
           temp=temp&0xf0;
         }
      }
      }
    key_4x4_port=0xf7;
    temp=key_4x4_port;
    temp=temp&0xf0;
    if(temp!=0xf0)
    { delayms(10);
      temp=key_4x4_port;
      temp=temp&0xf0;
      if(temp!=0xf0)
      { temp=key_4x4_port;
        switch(temp)
        { case 0xe7:
               key=12; break;
          case 0xd7:
               key=13; break;
          case 0xb7:
               key=14; break;
          case 0x77:
               key=15; break;
         }
         while(temp!=0xf0)
         { temp=key_4x4_port;
           temp=temp&0xf0;
         }
      }
    }
}
//---------------------------------------------

关键字:51单片机  4x4矩阵键盘  C51 引用地址:51单片机的4x4矩阵键盘扫描例程(C51)

上一篇:51单片机矩阵键盘编码方法
下一篇:51单片机外设之——矩阵键盘(传统法一)

推荐阅读最新更新时间:2024-03-16 16:06

构造一个51单片机的实时操作系统
摘 要 :从Keil C51的内存空间管理方式入手,着重讨论实时操作系统在任务调度时的重入问题,分析一些解决重入的基本方式与方法:分析实时操作系统任务调度的占先性,提出非占先的任务调度是能更适合于Keil C51的一种调度方式。为此,构造这一实时操作系统,并有针对性地介绍此系统的堆管理方法、任务的建立以厦任务的切换等。 关键词 :51单片机 实时操作系统 任务重八调度 目前,大多数的产品开发是在基于一些小容量的单片机上进行的。51系列单片机,是我国目前使用最多的单片机系列之一,有非常广大的应用环境与前景,多年来的资源积累,使51系列单片机仍是许多开发者的首选。针对这种情况,近几年涌现出许多基于51内核的扩展芯片,功能越来越齐
[单片机]
构造一个<font color='red'>51单片机</font>的实时操作系统
基于AT89c51单片机的流水灯,中断定时,按钮控制
中断 定时器/计时器是51单片机最基本的功能器件,熟练掌握其编写方法至关重要; #include reg51.h #include stdio.h unsigned char n=0,f=0,s=0; void main() { TMOD=0X61; TH0=(65536-9216)/256; TL0=(65536-9216)%256;初始化定时器 TH1=156; TL1=156; IT0=1; EX0=1; EA=1; T1=0; while(1)P1=s; } void Timer0() interrupt 1 { T1=1; TH0=(65536-9216
[单片机]
一文看懂STM32单片机和51单片机区别
 单片机简介      51单片机简介   应用最广泛的8位单片机当然也是初学者们最容易上手学习的单片机,最早由Intel推出,由于其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“经典”,为以后的其它单片机的发展奠定了基础。   51单片机之所以成为经典,成为易上手的单片机主要有以下特点:   51单片机特性   1、从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象不是字或字节而是位。不但能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。   2、同时在片内RAM区间还
[单片机]
一文看懂STM32单片机和<font color='red'>51单片机</font>区别
51单片机 16X16点阵循环滚动显示汉字
一、效果展示 二、所用材料 1.16X16点阵 Proteus并不提供16X16的点阵,只能我们自己通过4个8X8的组装为16X16的点阵。 由此可知8*8变成16*16 列需要这样连接: 行需要这样连接: 再把四个放在一起即可: 2.74hc595 详细介绍见我上一篇文章 https://blog.csdn.net/qq_41639829/article/details/82151706 这里需要用到级联,也不算太难,就相当于原来是输入8个数,这需要输入16个,然后再输出,前八个输入的就被自动挤到级联的下一个595中了! 3.stc89c52 三、原理 1.静态显示 同8位的静态显示一
[单片机]
<font color='red'>51单片机</font> 16X16点阵循环滚动显示汉字
通常用法的 51单片机 UART 0 初始化程序
#define MHz 1000000U // 定义 MHz #define gCLK (22.1184*MHz) // 系统时钟频率 #define UART_BAUD 9600 // 定义所用的波特率 // 串行通讯初始化函数,在程序开始时调用 void serial_init(void) { SCON = 0x50; // Mode 1: 8-bit UART, 允许接收 TMOD |= 0x20; // 定时器1 Mode 2: 8-Bit reload PCON = 0x80; // SMOD = 1 TH1 = 256 - (uchar
[单片机]
51单片机教程:单片机并行口结构
看一下图1,它是8031单片机管脚的说明,在P1.0旁边有P1.1,P1.2….P1.7,它们是否都能让灯亮呢?除了以P1开头的外,还有以P0,P2,P3开头的,数一下,一共是32个管脚,前面我们以学过7个管脚,加上这32个这39个了。它们都以P字开头,只是后面的数字不一样,它们是否有什么联系呢?它们能不能都让灯亮呢?在我们的实验板上,除了P10之外,还有P11 - P17都与LED相连,下面让我们来做一个实验,程序如下: MAIN: MOV P1,#0FFH LCALL DELAY MOV P1,#00H LCALL DELAY LJMP MAIN DELAY:MOV R7,#250 D1: MOV R6,#250
[单片机]
<font color='red'>51单片机</font>教程:单片机并行口结构
Keil与Proteus实现51单片机完美联调
之前我们介绍过Proteus单片机的程序仿真调试,但是对于绝大部分单片机爱好者来说,最熟悉的开发软件还是Keil,我们再来详细介绍下Proteus怎么结合Keil软件搭建强大的51单片机联合调试环境。 我们先来看下联合调试仿真效果 Keil C51软件版本:V9.54 Proteus软件版本:8.9 怎么搭建这种联合调试环境,我们接下来一步一步实现 我们这里需要用到一个“VDM51.dll”的文件 下载地址: VDM51.dll 163.8K · 百度网盘 第一步:将文件复制到Keil C51的安装目录下 我这里的Keil C51目录是在 D:Keil_v5C51BIN 这里需要修改 TOOLS 这个文件
[单片机]
Keil与Proteus实现<font color='red'>51单片机</font>完美联调
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved