一种非传统的矩阵键盘扫描函数

发布者:乘风翻浪最新更新时间:2015-06-25 来源: 51hei关键字:矩阵键盘  扫描函数 手机看文章 扫描二维码
随时随地手机看文章
//子函数delay_1ms(1)大家自己写吧

#define scan_key_port P3

uchar key_scan()
{
    uchar sccode,recode;
    uchar key_value;
    scan_key_port=0xf0; /* 发全 "0" 的行扫描码,列线输入 */
    if((scan_key_port&0xf0)!=0xf0) /* 若有键按下 */
    {
        delay_1ms(1); /*延时去抖动*/
        if((scan_key_port&0xf0)!=0xf0) /* 若有键按下 */
        {
            sccode=0xfe; /*逐行扫描初值*/
            while((sccode&0x10)!=0)
            {
                scan_key_port=sccode; /* 输出行扫描码 */
                if((scan_key_port&0xf0)!=0xf0) /*  本行有键按下 */
                {
                    recode=(scan_key_port&0xf0)|0x0f;
                    key_value=(~sccode)+(~recode);/* 返回特征码 */
                 }
                else sccode=(sccode<<1)|0x01; /* 行扫描左移一位 */
            }
        }
     } 
    else {         //若无键按下
     scan_key_port = 0xff;
  return (0);
}
    scan_key_port = 0xff; /*释放按键扫描端口*/
    switch(key_value){ /*显示按键对应的丝印*/
    case 0x11:
     return('0');
    
    case 0x12:
     return('1');
    
    case 0x14:
     return('2');
    
    case 0x21:
     return('3');
    
    case 0x22:
     return('4');
    
    case 0x24:
     return('5');
    
    case 0x41:
     return('6');
    
    case 0x42:
     return('7');
    
    case 0x44:
     return('8');
    
    case 0x81:
     return('9');
    
    case 0x82:
     return('A');
    
    case 0x84:
     return('B');
    
    case 0x18:
     return('C');
    
    case 0x28:
     return('D');
    
    case 0x48:
     return('E');
    
    case 0x88:
     return('F');
    }
}

关键字:矩阵键盘  扫描函数 引用地址:一种非传统的矩阵键盘扫描函数

上一篇:LCD1602四位总线尝试成功
下一篇:1602液晶万年历源程序-带温度、背光、灰度 数字

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

矩阵键盘扫描程序实例
使用芯片STM8S003 所用端口:PD2~PD6, PA1~PA3 其中,PD3~PD6为输出,PA1~PA3 / PD2为输入(默认上拉) /* PortCom BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PD6 PD5 PD4 PD3 PD2 PA3 PA2 PA1 */ 程序如下: span style= font-size:18px; deep= 5 /* 添加包含芯片的头文件 */ #include iostm8s103f3.h volatile unsigned char CF ; //按键触发标志(表示4列,每一
[单片机]
单片机矩阵键盘的控制
本来感觉矩阵键盘很简单的,没有想到编了一个程序,编了一个下午,哎,难怪有人说,如果技术和科学有你理想那么容易,那它就不是科学了。在参考http://www.51hei.com/mcuteach/226.html 后终于把矩阵键盘里的16个按键控制数码管显示0至16的效果实现了出来,呵呵,功夫不负有心人,虽然编了好久,好累,好困。但还是一个字,值!下面看下程序吧,如果各位高手看到了我程序有所不足的,麻烦指点。 下面是我的程序:#include reg52.h unsigned char temp; char x; unsigned char number ={ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0
[单片机]
基于单片机控制12864显示矩阵键盘输入的计算器
/*----------------------------------------------------- 程序设计:胥学辰-----绝对原创! 设计时间:2011-10-13辰时----2011-10-13午夜。 程序功能: 1:可以对输入的两个数字进行加减剩除运算。 2:可以连续运算。例如:12-2=10,再按减等于8,可以依次减下去。 3:运算完成后显示,再按返回键可以进入最初界面,继续运算。 程序按键: 1:进入运算界面:15. 2:确定输入:14 3:加法:13 4:减法:12 5:乘法:11 6:除法:10 7:返回:9 程序缺点: 1:由于键盘有限,没有设置更改键,必须返回重新输入! 2:暂时不能进行负数运算!
[单片机]
STM32实战 2.矩阵键盘通过串口3输出
#include KEY44.h #include sys.h #include delay.h #include usart.h u8 key_num = 0; int main(void) { uart_init(115200); delay_init(); KEY44_Init(); while(1) { key_num = key44_Scan(); if(key_num != 0) { printf( KEY is %drn ,key_num); } } } #include KEY44.h #include sys.h #include delay.h vo
[单片机]
AVR单片机矩阵键盘程序(2种方法)
AVR矩阵键盘2种方法实现! 普通方法: #include iom16v.h // #include macros.h // #define uchar unsigned char// #define uint unsigned int// #define setb(val,bitn) (val|=(1 (bitn)))//设置某IO口某位为1 #define clr(val,bitn) (val&=~(1 (bitn)))//设置某IO口某位为0 #define get(val,bitn) (val&(1 (bitn)))//读取某位状态如if(get(PORTC,7))即判断PC7口是否为1 #pragma data:code
[单片机]
ARM开发(6) 基于STM32的矩阵键盘按键触发外部中断
一 矩阵键盘按键触发外部中断引起蜂鸣器鸣叫原理: 1.1 本实验实现矩阵键盘某一列按键触发外部中断实现蜂鸣器鸣叫。 1.2 实验思路:根据电路图原理,外部中断产生原理。 1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1 led.h代码: #ifndef __EXTI_H #define __EXTI_H #include sys.h void EXTIX_Init(void);//外部中断初始化 #endif 2.2 led.c代码(IO配置): #include exti.h #include key.h #include delay.h #i
[单片机]
C51编程5-输入电平(矩阵键盘
独立按键,一个按键需要占用一个I/O口,如果需要16个按键,那么就会 占用16个I/O口,占据MCS-51系列单片机一半的I/O口。 理论基础 为了解决I/O这个问题,设计出了矩阵键盘,下图是一个4*4的矩阵键盘原理图。 按键按照4*4的格局进行摆放,组成4行4列,将按键的同行或同列连接在一起,分别连接到P1口。 怎么才能识别是哪个按键被按下呢? 以上图的S1为例,当按键被按下S1导通,P17与P13导通,可以通过判断P17与P13端口的电平是否一致,判断按键是否被按下。 可以先设置P13(检测端口)电平为高电平,假设P17(驱动端口)为低电平,当按键按下,按键导通,读取P13的电平可以读到低电平。
[单片机]
C51编程5-输入电平(<font color='red'>矩阵键盘</font>)
STM32F4实现矩阵键盘
程序中所使用的矩阵键盘所接的引脚为PC4-PC5、PF11-PF15和PG0,接线方法为常规矩阵键盘的接法,PC4、PC5、PF11、PF12为行线PF13、PF14、PF15、PG0为列线。 u8 check_Key(void) { GPIO_InitTypeDef GPIO_InitStructure; u8 cord_h=0XFF,cord_l=0XFF; //h为行线 l为列线 u8 Val = 0xFF; /* 行线 推挽输出 */ GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; GPIO_InitStructure.G
[单片机]
STM32F4实现<font color='red'>矩阵键盘</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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