带缓存中断响应的4*4键盘函数

发布者:WanderlustGlow最新更新时间:2016-08-16 来源: eefocus关键字:缓存  中断响应  键盘函数 手机看文章 扫描二维码
随时随地手机看文章
#include "key.h"

#include "scom.h"

unsigned char KeyNum[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};    //键值缓存区
unsigned char KeyCntWr;  //写键值计数器
unsigned char KeyCntRd;     //读键值计数器
//unsigned char KeyNum;

void KeyInit(void)
{
    P1DIR=0Xf0;     
 P1REN=0X0f;     //使能上拉
    P1OUT=0X0f;
 
    P1IFG=0x00;
    P1IE=0X0f;     //中断使能   
    P1IES=0X0f;   //列线下降沿允许P1中断
}

void key_delay(Word _us)

  while(_us--);
}
//行号译码
unsigned char coding(unsigned char n)     //译码
{
    switch(n)
    {
        case 0x0e: return 3;        //输入为 11111110 即为行号3        
        case 0x0d: return 2;        //输入为 11111101 即为行号2 
        case 0x0b: return 1;        //输入为 11111011 即为行号1 
        case 0x07: return 0;        //输入为 11110111 即为行号0 
  default : return 0xf0;
    }
}

//获取健值
unsigned char key(void)
{
    char temp,shift,keyname,a;
    temp=0x10;
    keyname=0xff;

    for(shift=0;shift<4;shift++)    
    {
        P1OUT=temp^0xff; //高四位输出11101111 、11011111、101111111、011111111、11111111
        temp<<=1;
  a=P1IN&0x0f;
        if(a!=0x0f)   //低四位输入,如果检测到端口值不为高电平,说明此列有按键摁下
            keyname=coding(a)+shift*4;   //健值=行号+例号*4
    }
    return keyname; 
}

//检测有无键值按下   
unsigned char keyj(void)      
{
    unsigned char x;
    x=(P1IN&0X0f);      //  P1.0--P1.3为列线,输入,P1.4——P1.7为行线,出输
    return(x);          // 无按键,返回 0x0f;  有按键返回 非0x0f

//以查询方式获取键值,且译码。
unsigned char GetKey(void)
{   
    unsigned char key_value=0xff;
 
 if(KeyCntRd!=KeyCntWr)    //相等键盘缓存区无键值
 {
  switch(KeyNum[KeyCntRd])
  {
   case 0x00: key_value=0x0a;  break;  //dot
   case 0x01: key_value=0x06;  break;     //six
   case 0x02: key_value=0x07;  break;     //seven
   case 0x03: key_value=0x08;  break;     //eight
   case 0x04: key_value=0x09;  break;     //nine
   case 0x05: key_value=0x00;  break;     //zero
   case 0x06: key_value=0x0b;  break;     //Down
   case 0x07: key_value=0x0c;  break;     //Enter
   
   case 0x08: key_value=0x0d;  break;     //Esc
   case 0x09: key_value=0x01;  break;     //one
   case 0x0a: key_value=0x02;  break;     //two
   case 0x0b: key_value=0x03;  break;     //three
   case 0x0c: key_value=0x04;  break;     //four
   case 0x0d: key_value=0x05;  break;     //five
   case 0x0e: key_value=0x0e;  break;     //UP
   case 0x0f: key_value=0x0f;  break;     //Clear
   
   default  : key_value=0xff;  break;     
   
  }
  KeyCntRd++;
  if(KeyCntRd==8)
   KeyCntRd=0;
 }
 return(key_value);
}

#pragma vector=PORT1_VECTOR
__interrupt void Key_INT(void)
{
    if(keyj()!=0X0f)
    {
        key_delay(5000);     //消抖动
        if(keyj()!=0X0f)
        {
     KeyNum[KeyCntWr++]=key();
   if(KeyCntWr==8)           //键盘缓存区满则从头开始
      KeyCntWr=0;
   
   if(KeyCntWr==KeyCntRd)   //写计数器与读计数器相等,则读计数器相应加1 
   {
    KeyCntRd++;
    if(KeyCntRd==8)
     KeyCntRd=0;
   }
   BellOn(1);
  }
    }
    P1OUT=0X0f;
    P1IFG=0X00;         //清除中断标志
}

 

缓存键值为7或8个。即最后7或8个键值有效。

关键字:缓存  中断响应  键盘函数 引用地址:带缓存中断响应的4*4键盘函数

上一篇:MSP430 P1.1 P1.2 P1.3 第二功能
下一篇:MSP430教程16:MSP430单片机开发总结

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

支持虚拟化,Sun 8核64线程UltraSparc T2处理器出炉
Sun Microsystems推出了其8核64线程UltraSparc T2处理器,表示其性能大大超越前一代处理器,且具有支持虚拟化的能力。 该服务器处理器代码为Niagara 2,每瓦特的性能比前一代UltraSparc T1增加一倍,浮点性能增加9倍。其他特性包括4-Mbytes L2高速缓存、两个片上10-Gbyte Ethernet端口、每核管线中集成有浮点部件。 UltraSparc T2和Solaris操作系统一起提供最先进的虚拟化技术,能够在一个处理器上同时运行64各应用程序。其吞吐率比前一版芯片高一倍,更适用于附网存储设备。 Sun认为T2不仅适用于服务器,而且可用于路由器、交换机、电信基础设备、医疗成像和
[焦点新闻]
英特尔展示 Meteor Lake 处理器原型:16 核 22 线程,L3 缓存 24M
5 月 29 日消息,英特尔在今年的 Computex 2023 台北电脑展上展示了一款 Meteor Lake-H 处理器的原型,并展示了 SoC 的 VPU 部分。 根据外媒看到的数据,这颗处理器是在两周前完成的,拥有 16 核 22 个线程。参考之前的爆料,这很可能是我们之前看到的 6 P +8 E + 2 E (SoC) 配置。 如下图所示,它有着 1.6 MB 的 L1 缓存、18 MB 的 L2 缓存和 24 MB 的 L3 缓存。由于初代 Intel 4 工艺,目前 Meteor Lake 处理器的主频似乎都处于偏低水平,基础频率只有 3.1 GHz,而这颗 ES 处理器甚至只有 0.37GHz 的闲置频率。
[嵌入式]
英特尔展示 Meteor Lake 处理器原型:16 核 22 线程,L3 <font color='red'>缓存</font> 24M
基于DSP和CPLD的智能相机系统设计与研制
0、引言: 在工业生产中,生产设备的自动化程度在很大程度上决定着生产的效率。同时,高技术高科技的生产设备,对提高产品的档次也有很大的作用。在工业生产现场,有许多工作是重复简单的劳动,或工作环境是不适合人进行处理的。这时,可以设计一种智能仪器,代替人进行这种简单重复的工作或在恶劣的工作环境下进行工作。智能相机系统就是这样的一种自动化仪器。它以其工作效率高、性能稳定、能适合复杂和恶劣的工作环境而越来越受到工业生产的重视。本文将介绍一款用于工业生产现场产品质量控制的智能相机的设计方案,并给出该相机的实际工作情况。 1、系统整体设计: 进行相机系统设计,首要考虑的问题是工业现场生产速度和相机处理速度的匹配问题。系统的整体设计必须以需
[应用]
STM32F10x单片机Flash写操作导致中断响应问题
昨天遇到一个问题,在写入数据到STM32F103单片机的Flash中时会出现串口中断接收数据丢失现象,但是我设置的串口接收中断优先级是最高的,并且没有哪里将全局中断关闭很长时间(除了操作系统部分内核代码执行的时候关闭全局中断,但是没有占用很长时间,不会导致丢失串口数据)。在正常情况下在没有写数据到Flash中去的时候所有串口数据都能正常接收,没有数据丢包现象,但是当执行一次写入操作(写一个页256个字的数据)就会导致串口数据丢失,导致接收帧错误。 一开始我猜测是不是在擦除和写入Flash的时候系统会屏蔽所有中断,但是没有哪个参考文档中找到这样的说明。后来查阅了一下官方文档PM0042《STM32F10xxx闪存编程手册.en》,在
[单片机]
英特尔新推45nm低耗电服务器芯片
  目前,英特尔推出的45纳米工艺服务器、台式以及笔记本处理器数量已经超过35种。   英特尔周二发布了两款45纳米制程处理器,英特尔宣称,这种低耗电芯片比前代服务器及工作站芯片速度快25%。   四核Xeon L5420和L5410处理器时钟频率分别为2.5 GHz和2.33 GHz。每个核心耗电为12.5瓦,总耗电为50瓦。都具有12MB芯片内集成缓存。前端总线1333 MHz。   支持最新服务器处理器的系统厂商包括华硕,戴尔,富士通西门子,技嘉,惠普,日立,IBM,微星,广达电脑,Rackable,Supermicro,Tyan和Verari。英特尔计划在下一季发布一款双核心的低耗电处理器,耗电量40瓦,时钟频率3 G
[新品]
关于自动驾驶缓存的技术研究浅析
一旦自动驾驶汽车成为现实,乘客不再担心安全问题,他们需要寻找新的娱乐方式。然而,车对数据中心(DC)通信的高延迟,会让娱乐内容的检索妨碍内容递送服务。本文通过使用部署在多接入边缘计算(MEC)结构上的深度学习方法,为自动驾驶汽车提出了基于深度学习的缓存。通过仿真测试,结果发现该方法可以最大限度地减少延迟。 最近,自动驾驶技术取得了显著的进步,一些公司,如谷歌,优步,三星,特斯拉,梅赛德斯 - 奔驰,百度等,已经开始关注自动驾驶的下一阶段——“无人驾驶”,即汽车可以在没有人为驾驶干预的情况下自主驾驶。此外,为了使自动驾驶汽车更加智能化,汽车需要配备智能传感器和分析工具,以实时收集和分析与车载人员,行人和环境相关的异构数据,这其中
[嵌入式]
OPPO推双Wifi和画质增强技术提升游戏体验,下载、缓存提速
8月3日,上海ChinaJoy如火如荼进行当中,而OPPO在展会期间正式对外展示了“超现实增强画质”和“双Wi-Fi”两项新技术,这两项技术会对于提升手机游戏的体验有非常大的帮助。 据集微网了解,首次参展的OPPO带来了双WiFi和超现实增强画质两项新技术。前者可以令下载速率和缓存速度提升3倍;后者则能带来更为丰富的游戏画质,目前已经适配了包括王者荣耀在没的大部分头部游戏 OPPO软件工程战略总监吴振宇在现场介绍,“超现实增强画质”是高通骁龙Elite Gaming所支持的全新特性,OPPO和高通针对该特性进行了联合定制优化,以实现增强的游戏视效,“它包含了一系列图像增强算法,能在保证低功耗的同时,为玩家提供更明艳、更
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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