矩阵键盘实验

发布者:Changfeng520最新更新时间:2016-12-20 来源: eefocus关键字:矩阵键盘  解码程序 手机看文章 扫描二维码
随时随地手机看文章

1.代码:

#include
typedef unsigned char  u8;
typedef unsigned int   u16;
sbit seg_sel = P1^4;
sbit bit_sel = P1^5;
#define DATA P0
u8 code seg_tab[]={
              0xc0,0xf9,0xa4,0xb0,
              0x99,0x92,0x82,0xf8,
              0x80,0x90,0x88,0x83,
              0xc6,0xa1,0x86,0x8e
             };
u8 code bit_tab[]={
              0x10,0x20,0x40,0x80,
              0x01,0x02,0x04,0x08
             };
void delay(u16 num)
{
    u16 x,y;
    for(x=num; x>0; x--)
        for(y=110; y>0; y--)
        {
            ;//延时1ms
        }
}
void display_led(u8 which_bit, u8 which_number)
{
        bit_sel = 1;//Q[7..0]=D[7..0]
        DATA = bit_tab[which_bit];
        bit_sel = 0;//BIT[7..0]=0x80
        seg_sel = 1;//Q[7..0]=D[7..0]
        DATA = seg_tab[which_number];
        seg_sel = 0;
        delay(2);    
}
u8 key_scan (void)
{
    u8 temp,temp2;
    P2 = 0xf0;//让P2输出0xf0
    temp = P2;//读入P2的值
    if (temp != 0xf0) //当P2读入的值不等于0xf0
    {
        delay(5);//延迟5ms
        temp = P2;//再读入P2口的值
        if (temp != 0xf0)//如果P2读入的值不等于
        {                 //0xf0,就说明有按键按下
            temp2 = temp & 0xf0;//保留P2读入值得高四位             
            P2 = 0x0f;//再让P2口输出0x0f
            delay(1);
            temp = P2;//再读入P2口的值
            temp2 |= temp;//保留此读入值的低四位
            return temp2;
        }
        //while(P2!=0x0f);
    }
}
u8 encode(u8 cod)
{
    u8 num;
    switch(cod)
    {
        case 0xee: num = 0;break;
        case 0xde: num = 1;break;
        case 0xbe: num = 2;break;
        case 0x7e: num = 3;break;
        case 0xed: num = 4;break;
        case 0xdd: num = 5;break;
        case 0xbd: num = 6;break;
        case 0x7d: num = 7;break;
        case 0xeb: num = 8;break;
        case 0xdb: num = 9;break;
        case 0xbb: num = 10;break;
        case 0x7b: num = 11;break;
        case 0xe7: num = 12;break;
        case 0xd7: num = 13;break;
        case 0xb7: num = 14;break;
        case 0x77: num = 15;break;
        default : break;
    }
    return num;
}
void main (void)
{
    u8 cod,num;
    P0 = 0xff;
    P1 = 0xff;//端口初始化
    seg_sel = 0;//LE禁止锁存
    bit_sel = 0;
    while (1)
    {
        cod = key_scan();//判断以及编码
        num = encode(cod);//解码程序。得出数字
        display_led(1, num);//显示程序
    }
}

2.电路图:

 

3.效果


关键字:矩阵键盘  解码程序 引用地址:矩阵键盘实验

上一篇:外部中断实验
下一篇:LED数码管显示实验

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

SC1621摇控器—PIC单片机解码程序
简介:在这里给大家提供一个SC1621摇控器—PIC单片机解码程序,希望对感兴趣的朋友有所帮助。 ;*APPLICATION NOTE E6000 ICEXPLORER ****************** ;* Title: ; ;SC6121的遥控器发射码依次为:同步头(引导码)+32位数据码 ; ;(用户码低8位+用户码高8位+键码+键码的反码) ; ;引导码是由9MS的高电平加4.5MS的低电平构成, ; ;我们接收到的刚好反相为9MS的低电平加4.5MS的高电平. ; ;数据码0是由560US的高电平加560US的低电平构成 ; ;接收时反相为560
[单片机]
单片机矩阵键盘的实现
行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。 判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 列线输入端P1.0~P1.3通过电阻接正
[单片机]
单片机<font color='red'>矩阵键盘</font>的实现
51单片机学习笔记,4*4矩阵键盘
今天学习了下矩阵键盘, 4*4, 分别代表0~F这16个数字 我们按了哪个键就显示到数码管上 看完郭老师讲解原理后就自己动手写了,郁闷的是 在keil软件中,我在switch-case语句中 少了个冒号,竟然编译通过! 结果当然不正确了,然后我再keil中调试代码,那更郁闷了,P3口在扫描到第2行键盘时就 会复位成0xff,怎么赋值都没用,其实是没写冒号啊! 调了半天都不行,最后不得不将STC89C52RC换上仿真芯片SST89E516,在线调试后才发现的错误, 然后参考书上的代码才调试成功的,表示无语~~~ mark下 C代码 #include reg52.h #include MY51.H
[单片机]
51单片机学习笔记,4*4<font color='red'>矩阵键盘</font>
4*4矩阵键盘的扫描原理
初学者肯定要经历的一个实验就是4*4矩阵键盘的代码编写,大部分都是在学校里面,有现成的实验箱,基本不需要自己动脑子。上次遇到一个哥们,他说他用的是8031的实验箱,我当时就晕了。8031是8051的前身,那个芯片连ROM都没有,可以想象我们的学校都在拿什么教育祖国的花朵。废话少说,先上图: 对初学者来说这篇文章会有点难,可以先研究一下如何用51单片机点亮一个发光二极管和基于CPLD-EPF10K10LC84-4(84)的交通灯设计。首先要说明的一点,矩阵键盘的动态扫描确实略显复杂,不可能就是读一个端口数据,然后马上就出来结果。这需要对依次每一行的按键进行扫描、判断,然后得出结果。如上图所示,先扫描第一行,也就
[单片机]
4*4<font color='red'>矩阵键盘</font>的扫描原理
89C52矩阵键盘的识别
我所见过的矩阵键盘一般有两种识别方法:扫描法和线反转法。以4X4矩阵键盘为例,扫描法是依次将每一行置为0,然后读取列的状态,这样就可以通过四次扫描将整个矩阵键盘的按键状况辨别出来,这个方法所需的代码量比较长;而线反转法则显得比较简洁,它通过先将4行全部置0(0xf0),然后读列的状态,接着,将列全部置0(0x0f),读行的状态,通过(行|列)就能确定整个行列的状态了。扫描法比线反转法占用更多的程序储存空间(Program Space),但占用的更少的数据储存空间(Data Space)。 程序如下 扫描法: #include reg52.h #define uchar unsigned char #define u
[单片机]
C51红外解码程序
这是一个简单的红外解码程序,是针对9ms起始码和4.5ms结束码的红外信号晶振用的是11.0592M的 #i nclude at89x52.h #i nclude stdio.h sfr p0=0x80; sfr p3=0xb0; sbit p32=p3^2; unsigned char dm,i,j,k; unsigned char data a ;//定义4个数组,用来存储代码 void ds0_9ms(void) { unsigned char j,k; for(j=18;j 0;j--) for(k=20;k 0;k--) ; } void ds1ms(void) { unsigned char i,j; for(i
[单片机]
手把手教学51单片机 | 第五课 独立键盘 矩阵键盘
编码键盘 电脑的键盘 非编码键盘 (1)硬件消抖 (2)软件消抖 独立键盘 线与的关系 先给IO口高电平 用一个if检测IO口高低电平,若按键按下IO口为0(1&0=0)没按下则继续保持高电平 按键在闭合和断开开始 触电会存在抖动的现象 2.矩阵键盘 #include reg52.h #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit key1=P3^4; uchar code table ={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7
[单片机]
手把手教学51单片机 | 第五课 独立键盘 <font color='red'>矩阵键盘</font>
51汇编模拟PT2272解码程序
;软件解码程序(仿真PT2272) ;晶体频率为11.0592Mhz ;本程序中的时间定位关系只适用于接3.3M振荡电阻的PT2262解码 ;使用其它阻值电阻时,应将定位时间按电阻比例缩放 ;下面的程序中 REM 为信号输入端 ;RECEIVE 检测到有效信号标志位 ;ENABLE_DETE 连续按键标志 ;3AH,3BH用作定时器 ;PT2262共12根地址线 ;31H,32H:接收的前8 位地址编码 ;33H,30H:接收的后4 位地址编码(若最后4位用作数据端,则只须读第33H单元的内容即可) ;当用作数据端时,PT2262对应脚悬空被认为是低电平。 ;地址
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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