历史上的今天
返回首页

历史上的今天

今天是:2025年01月16日(星期四)

正在发生

2018年01月16日 | 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 
#include 

#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) 


}


推荐阅读

史海拾趣

泰科天润(GPT)公司的发展小趣事

机顶盒,全称数字视频变换盒,是连接电视与外部信号源的重要设备,其专业性与科普性均不容忽视。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,它们承担着将各种信号源转换为电视可识别并播放的格式的重要任务。

机顶盒的核心功能在于接收、解码和显示。它能接收来自有线电缆、卫星天线、宽带网络及地面广播等多种传输介质的数字电视信号,并通过内置的解调器和解码器,将这些信号转换为电视能够播放的视频和音频流。这一过程中,机顶盒展现了其强大的技术实力,确保用户能够享受到高质量的视听体验。

随着技术的发展,机顶盒不断进化。从最初的模拟频道增补器、解码器,到如今支持高清、4K乃至8K超高清播放的智能网络机顶盒,机顶盒的每一次升级都带来了更加丰富的内容选择和更加便捷的使用体验。同时,网络机顶盒的出现更是将电视与互联网紧密相连,使得用户能够通过电视屏幕浏览网页、观看在线视频、下载应用程序、享受交互式娱乐等多元化服务。

此外,机顶盒还具备强大的扩展性和可定制性。通过搭载不同的软件和硬件设备,机顶盒可以满足不同用户的个性化需求,如家庭影院功能、社交媒体互动、语音控制等。这些功能的加入不仅提升了机顶盒的实用性,也使其成为了现代家庭娱乐的重要组成部分。

综上所述,机顶盒作为连接电视与外部世界的桥梁,其专业性与科普性在不断提升中。随着技术的不断进步和市场的不断扩大,机顶盒将继续为用户带来更加优质、便捷、智能的视听体验。

ALTERA(阿尔特拉)公司的发展小趣事

阿尔特拉(Altera Corporation)是一家以可编程逻辑器件(FPGA)和相关技术为主的半导体公司,成立于1983年,总部位于美国加利福尼亚州的圣塔克拉拉。以下是关于阿尔特拉公司发展的五个相关故事:

  1. 创立与早期发展:阿尔特拉公司由Robert Hartmann和Michael Magranet等人于1983年创立,最初致力于设计和制造电可擦除可编程只读存储器(EEPROM)。1984年,公司推出了业界第一个商用FPGA产品,即EP300系列,标志着阿尔特拉在FPGA领域的开创性突破。随后,公司不断扩大产品线,加大研发投入,逐步成为FPGA领域的领军企业之一。

  2. FPGA技术创新:阿尔特拉公司在FPGA技术方面持续进行创新。1992年,公司推出了基于静态随机存储器(SRAM)的FPGA器件,使得FPGA在速度和灵活性方面有了显著提升。此后,阿尔特拉不断推出新的器件系列和工具软件,以满足客户对于性能和可编程性的不断提升的需求。

  3. 与竞争对手的竞争:在FPGA市场,阿尔特拉与Xilinx是两大主要竞争对手。两家公司之间展开了激烈的竞争,包括技术研发、产品性能、市场份额等方面。为了在市场上取得优势,阿尔特拉不断加大研发投入,推出了一系列领先的产品和解决方案,并通过全球销售网络拓展市场。

  4. 收购与合并:阿尔特拉公司在发展过程中进行了多次收购与合并,以扩大市场份额和提升技术实力。2015年,英特尔公司以约160亿美元的价格收购了阿尔特拉,将其并入英特尔旗下成为其子公司。这一收购使得英特尔得以整合阿尔特拉的FPGA技术和产品,进一步巩固了其在半导体行业的地位。

  5. 公司发展与创新:作为英特尔的子公司,阿尔特拉继续致力于技术创新和业务拓展。公司不仅持续改进现有产品的性能和功能,还积极投入到新兴领域的研发与应用,如数据中心、人工智能、物联网等。阿尔特拉通过不断推出创新产品和解决方案,保持了在半导体行业的领先地位。

以上是关于阿尔特拉公司发展的五个相关故事,这些故事展示了阿尔特拉从创立初期到被英特尔收购的发展历程,以及其在FPGA技术领域的技术创新、市场竞争和业务拓展等方面的重要进展。

Evans Capacitor Company公司的发展小趣事

随着市场竞争的加剧,ECC意识到单纯的技术创新已经不足以保持领先地位。因此,公司开始注重产品品质的提升。ECC引入了严格的质量管理体系,从原材料采购到生产流程,再到成品检测,每一个环节都严格把控。这一举措使得ECC的产品质量得到了显著提升,赢得了客户的广泛信任。

Glorious Sources Co Ltd公司的发展小趣事
在光学实验中,用于演示光的传播、反射、折射等现象;在光学教学中,作为辅助教学工具帮助学生理解光学原理。
Gemmy Electronics Co Ltd公司的发展小趣事
对于声波或超声波驱赶式捕鼠器,需检查发声元件和发射模块是否工作正常。
Autotrol公司的发展小趣事

Autotrol公司成立于1964年,最初是一家领先的可定制小功率齿轮马达生产商。在初创时期,公司面临着激烈的市场竞争和技术挑战。然而,Autotrol凭借其卓越的技术实力和创新能力,成功开发出一系列具有竞争力的齿轮马达产品,逐渐在市场中脱颖而出。公司不断完善产品线,推出了永久磁铁同步电动机、滞后电动机和直流齿轮马达等,这些产品以其高效、稳定的性能赢得了客户的信赖。

问答坊 | AI 解惑

NPN管工作时基极电压比射级高~~~

我的电路图如下,其中稳压管是Vz=30V,做实验时发现随着输入电压(集电极电压)的增加,基极电压不变,射级电压缓慢增加,Vbe逐渐减小,当Vc升到40+时,Vbe竟然变成负的(Vb约30V,Ve=30.5V),我的三极管型号是MJH11022。为啥我的管子Vbe会变成负 ...…

查看全部问答>

求用传感的方法测加速度

期末了,老师让我们写一片论文,题目是《加速度测量方法综述》,这门课的名字是《传感器原理及工程应用》,学的是很基本的传感器,但现在论文是要写这个,不会写~~,请高手指点!!大致内容说白了就是用各种各样的传感器来测量加速度。 大家给点资 ...…

查看全部问答>

EVC+ ACCESS +wince 5.0

谁在wince5.0平台上 用evc开发过访问access 数据库的应用?…

查看全部问答>

具有_SNRBoost_技术的最低功耗_4_通道_ADC_

本帖最后由 dontium 于 2015-1-23 13:40 编辑 具有SNRBoost 技术的最低功耗 11 位 200 MSPS ADC 4 通道、双通道与缓冲单通道选项 德州仪器 (TI) ADS58C48 系列是业界最低功耗的 11 位 ADC,速率高达 200 MSPS。 ...…

查看全部问答>

STM32F串口出现奇怪现象,是不是串口收发器BUG,望高手指点

大家好,我用的是红牛开发板,CPU型号是STM32F103ZE,在进行串口实验时,STM32会将收到的数据原封不动的发送回来。在实验中,如果发送的数据不是0x00,收发正确,即串口发送什么东西,STM32都会正确接收,并回复给串口助手,串口助手也能正确 ...…

查看全部问答>

指针用法

怎么样通过指向数组的指针来计算整个数组的长度呢?…

查看全部问答>

LM3S9B96的GPIO有多少个能做输入的啊?

图中的AIN应该表示模拟输入吧?图中的 - 号表示什么意思?9B96的GPIO一共有多少个可以用作输入呢?…

查看全部问答>

关于LED封装的问题

怎么Altium designer 中LED的封装特别像一个锁呢?直插的那种LED怎么回事那个形状呢?…

查看全部问答>

PID算法

最近在调跷跷板平衡小车 要用到PID算法 应该只需要PI,读取的应该是小车的角度值吧 ,  那要怎么样调节小车的电机呢??求c语言程序啊~~~…

查看全部问答>

啸叫检测!!!

本帖最后由 paulhyde 于 2014-9-15 03:04 编辑 啸叫检测都是怎么检测的啊?大家都说说  …

查看全部问答>