8051单片机的反转法扫描键盘

发布者:来来去去来来最新更新时间:2018-01-16 来源: eefocus关键字:单片机  反转法  扫描键盘 手机看文章 扫描二维码
随时随地手机看文章

键盘扫描采用反转法读键:先从P2口的高4位输出零电平,从P2口的低4位读取键盘状态;再从P2口的低4位输出零电平,从P2口的高4位读取键盘状态,将两次读取的结果组合起来就可以得到当前按键的特征码(见程序中TABLE表)。有了这张表就可以编程,将它们转换成顺序码。用当前读得的特征码来顺序查表,用一单元记录查找次数。当在表中查到有该特征码时,它的位置(即查找次数)就是对应的顺序码。对应的键盘查键程序如下:


KEY: MOV P2,#0FH ;用反转法查键 
MOV A,P2 
ANL A,#0FH 
MOV B,A 
MOV P2,#0F0H 
MOV A,P2 
ANL A,#0F0H 
ORL A,B 
CJNE A,#0FFH,KEY1 
RET ;无键按下 
KEY1: MOV B,A ;有键按下,存键码 
MOV DPTR,#TABLE 
MOV R3,#0FFH ;存顺序码单元初始化 
KEY2: INC R3 
MOV A,R3 
MOVC A,@A+DPTR 
CJNE A,B,KEY3 ;判键码,求顺序码 
MOV A,R3 ;若找到键码,存顺序码 
RET 
KEY3: CJNE A,#0FFH,KEY2;判是否查完 
RET ;已查完,键码未找到,以无按键处理 
TABLE: DB 77H,7BH,0BBH ;按键特征码表 
DB 0DBH,7DH,0BDH 
DB 0DDH,7EH,0BEH 
DB 0DEH,0B7H,0D7H 
DB 0EEH,0EDH,0EBH 
DB 0E7H,0C7H,0FFH 

用C语言的写法 
#include 
#include 
#include 
#include 
#include 
#includeCC.h> 

#define uchar unsigned char 
#define uint unsigned int 


keysCAN() 

uchar i,h=0xfe; 
for(i=4,P1=h;i>0;i--) //扫描 

if((P1&0xf0)!=0xf0) //有键按下? 

uchar a; 
for(a=255;a>0;a--) //延时 
{} 
if((P1&0xf0)!=0xf0) //有键按下 

uchar key,p; 
p=P1; 
for(key=0;key<16;key++) //查表 

uchar code keytab[]={0xEE,0xDE,0xBE,0x7E, //键码表 
0xED,0xDD,0xBD,0x7D, 
0xEB,0xDB,0xBB,0x7B, 
0xE7,0xD7,0xB7,0x77}; 
if(p==keytab[key]) //查到返回返回键号 

P1=0xff; 
return(key); 





h=_crol_(h,1); 
P1=h; 

P1=0xff; 
return(16); //没查到返回16 



main() 
{ while(1) 
{P0=keyscan(); 
while(1) 


}


关键字:单片机  反转法  扫描键盘 引用地址:8051单片机的反转法扫描键盘

上一篇:51单片机定时中断实现显示的程序
下一篇:红外线遥控器软件解码程序(能解大部分遥控器的编码)

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

51单片机的315M发射头发送汇编程序
;防盗器主机程序 FSDD EQU P1.7 ;发射控制D端,高电平控制有效 FSCC EQU P1.6 ;发射控制C端,高电平控制有效 FSBB EQU P1.5 ;发射控制B端,高电平控制有效 BJQ1 EQU P1.1 ;报警器,低电平报警 SPK1 EQU P1.0 ;喇叭,驱动方式为脉冲信号 LED1 EQU P3.0 ;指示灯 JSVT EQU P3.2 ;接收头VT端 JSDD EQU P3.3 ;接收头D输出端,有效高电平输出 JSCC EQU P3.4
[单片机]
51单片机STC89C52矩阵键盘扫描法检测
程序源码 /*-----------------------包含头文件区域-------------------------*/ #include reg52.h //单片机头文件 /*-----------------------数据类型定义区域-----------------------*/ typedef unsigned char u8; //定义类型unsigned char别名为u8 typedef unsigned int u16; //定义类型unsigned int别名为u16 /*-----------------------用户自定义数据区域---------------------*/
[单片机]
51<font color='red'>单片机</font>STC89C52矩阵<font color='red'>键盘</font>之<font color='red'>扫描</font>法检测
单片机外部中断源的扩展
设计一个五个外部中断源系统。其中最高级的外部中断源连接到INT0脚,其余中断源连接到INT1脚。画出系统电路原理图,并写出外部中断1的中断服务程序。 案例分析: 中断与查询相结合的方法是把系统中多个外部中断源按它们的重要程度进行排序,把其中最高级别的中断源接到MCS-51的一个外部中断源输入端(例如接到 脚),其余的中断源用线 或 的方法连接到另一个外部中断输入端( ),并同时接到一个I/O口,如图3中所示接到P1口。中断请求由硬件电路产生,而中断源的识别由程序查询来处理,查询顺序由中断源的优先级决定。图3为五个外部中断源的连接电路,其中设备1~4经OC门与 连接,并连接到P1.0~P1.3,均采用电平触发方式。设备0为最高级
[单片机]
<font color='red'>单片机</font>外部中断源的扩展
观点与探讨2:MCU和SoC如何协调发展
MCU和SoC如何协调发展 MCU与SoC都有广阔空间 SoC更多是理论方向 嵌入式系统架构分为三种。一种是SoC,将不同的IP集成在芯片上,是准嵌入式系统;另一种是SoB,把不同的芯片组合成硬制板,然后这个板成为系统,目前国内大部分企业做的主要是SoB,里面的芯片是通用的MCU,按照用户的需要进行配置,嵌入式系统本身就是量体裁衣;还有一种是SoM,也就是模块级系统,可以实现的应用更加广泛,适合在工控、仪表和仪器上使用。 从传统上来说,标准MCU已经为SoC和ASIC铺平了道路,这一点也将不会有所改变。SoC通常应用于手机、机顶盒等更为复杂和大批量的应用领域;MCU则用于这些系统的外围设备上,或者作为中央处理单位应用于空调或者U
[焦点新闻]
单片机常用输入/输出电路设计方法
摘要 针时电气 控制 产品的特点,讨论了几种 单片机 常用输入/输出 电路 的设计方法,对合理地设计电气 控制 系统,提高 电路 的 接口 能力,增强系统稳定性和抗干扰能力有实际指导意义。 引 言 随着微 电子 技术和计算机技术的发展,原来以强电和 电器 为主、功能简单的电气设备发展成为强、弱电结合,具有数字化特点、功能完善的新型微 电子 设备。在很多场合,已经出现了越来越多的单片机产品代替传统的电气控制产品。属于存储程序控制的单片机,其控制功能通过软件指令来实现,其硬件配置也可变、易变。因此,一旦生产过程有所变动,就不必重新设计线路连线安装,有利于产品的更新换代和订单式生产。 传统电气设备采用的各种控制信号,必须转换到与单
[模拟电子]
出货量破6亿颗,GD32 MCU赋能电机驱动智能解决方案
喜报!GD32 MCU累计出货量正式突破6亿颗!犹记得2020年底咱们才官宣了“5亿颗出货量”的喜讯,在短短数月的时间里,GD32 MCU达成新出货1亿颗的“小目标”,成为了产能紧缺环境下、率先恢复产能有序供应的芯片企业之一。 MCU技术的发展推动了电机控制方案以更低成本、更高效率的驱动升级路线。作为MCU产业的领跑者,日前,兆易创新受邀参加了由电子科技媒体 电子发烧友 主办的“2021无刷直流电机控制技术研讨会”,产品市场经理陈奇出席现场、向现场一百多名开发者与产业人士分享了兆易创新多方位的电机控制方案,以及一站式GD32 MCU开发环境,帮助小伙伴们轻松上手开发! 兆易创新产品市场经理陈奇演讲现场 基于GD32 MCU,打
[手机便携]
基于PIC16F877单片机的简易测速计设计方案
  0 引言   随着微电子技术的迅猛发展,单片机在汽车、通信、办公自动化、工业控制、高级玩具、家用电器等方面都得到了广泛的应用。如果将Proteus 作为单片机系统仿真工具,则不用制作电路板,而可以使用Proteus 进行系统虚拟实现,这样不仅能完成所需功能设计验证,还能降低硬件成本的耗用,从而缩短整个设计周期,从根本上提高了电子产品的开发效率。   测速是工农业生产中经常遇到的问题,基于单片机的各种优势,将单片机应用于测速系统,具有很重要的意义。而对于测速技术,首先要解决的就是采样问题。在使用模拟技术制作测速设备时,常用测速发电机的方法,即将测速发电机的转轴与待测轴相连,测速发电机的电压高低反映了转速的高低;而使用单片机进
[单片机]
基于PIC16F877<font color='red'>单片机</font>的简易测速计设计方案
KEIL 单片机的RAM 超出范围处理
以前写了一个测试程序,昨晚上想把测试程序在改进时候,发现我多增加一个全局变量 unsigned int flag; //定义一个全局变量 ,烧写到单片机。。单片机运行时候。LCD 显示就正常了。测量到的数据也显示不了, 反复测试好多次, 发现问题就在这句: unsigned int flag; //定义一个全局变量 多定义一个就出现错误。 我百思不得其解。。 最后我只有请教了一些朋友,一些有经验的朋友很快就知道问题出在哪里了。 是单片机的RAM 不够了。 因为我的这个程序比较大,涉及全局变量用到的比较多,超出范围了。KEIL有三种存储模式SMALL,COMPACT,LARGE. 默认存储模式是SMALL , 默认就把所有的变量都放
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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