写一个2*4的矩阵式按键的检测程序,方便移植

如题所述

电脑面51行明877A现台电脑面没源代码
4×4矩阵式键盘识别技术
实验任务
图4.14.2所示用AT89S51并行口P1接4×4矩阵键盘P1.0-P1.3作输入线P1.4-P1.7作输线;数码管显示每按键0-F序号应按键序号排列图4.14.1所示

图4.14.1
硬件电路原理图

图4.14.2
系统板硬件连线
单片机系统区域P3.0-P3.7端口用8芯排线连接4X4行列式键盘区域C1-C4 R1-R4端口;
单片机系统区域P0.0/AD0-P0.7/AD7端口用8芯排线连接四路静态数码显示模块区域任a-h端口;要求:P0.0/AD0应着aP0.1/AD1应着b……P0.7/AD7应着h
程序设计内容
4×4矩阵键盘识别处理
每按键行值列值 行值列值组合识别按键编码矩阵行线列线别通两并行接口CPU通信每按键状态同需变数字量01关端(列线)通电阻接VCC接通程序输数字0实现键盘处理程序任务:确定键按判断哪键按键功能;要消除按键闭合或断抖两并行口输扫描码使按键逐行态接另并行口输入按键状态由行扫描值馈信号共同形键编码识别按键通软件查表查该键功能
程序框图

图4.14.3
汇编源程序
KEYBUF EQU 30H
ORG 00H
START: MOV KEYBUF,#2
WAIT:
MOV P3,#0FFH
CLR P3.4
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1
LCALL DELY10MS
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,NK1
MOV KEYBUF,#0
LJMP DK1
NK1: CJNE A,#0DH,NK2
MOV KEYBUF,#1
LJMP DK1
NK2: CJNE A,#0BH,NK3
MOV KEYBUF,#2
LJMP DK1
NK3: CJNE A,#07H,NK4
MOV KEYBUF,#3
LJMP DK1
NK4: NOP
DK1:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A

DK1A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK1A
NOKEY1:
MOV P3,#0FFH
CLR P3.5
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY2
LCALL DELY10MS
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY2
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,NK5
MOV KEYBUF,#4
LJMP DK2
NK5: CJNE A,#0DH,NK6
MOV KEYBUF,#5
LJMP DK2
NK6: CJNE A,#0BH,NK7
MOV KEYBUF,#6
LJMP DK2
NK7: CJNE A,#07H,NK8
MOV KEYBUF,#7
LJMP DK2
NK8: NOP
DK2:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A

DK2A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK2A
NOKEY2:
MOV P3,#0FFH
CLR P3.6
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY3
LCALL DELY10MS
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY3
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,NK9
MOV KEYBUF,#8
LJMP DK3
NK9: CJNE A,#0DH,NK10
MOV KEYBUF,#9
LJMP DK3
NK10: CJNE A,#0BH,NK11
MOV KEYBUF,#10
LJMP DK3
NK11: CJNE A,#07H,NK12
MOV KEYBUF,#11
LJMP DK3
NK12: NOP
DK3:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A

DK3A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK3A
NOKEY3:
MOV P3,#0FFH
CLR P3.7
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY4
LCALL DELY10MS
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY4
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,NK13
MOV KEYBUF,#12
LJMP DK4
NK13: CJNE A,#0DH,NK14
MOV KEYBUF,#13
LJMP DK4
NK14: CJNE A,#0BH,NK15
MOV KEYBUF,#14
LJMP DK4
NK15: CJNE A,#07H,NK16
MOV KEYBUF,#15
LJMP DK4
NK16: NOP
DK4:
MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A

DK4A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK4A
NOKEY4:
LJMP WAIT
DELY10MS:
MOV R6,#10
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
END
C语言源程序
#include
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
unsigned char temp;
unsigned char key;
unsigned char i,j;

void main(void)
{
while(1)
{
P3=0xff;
P3_4=0;
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=7;
break;
case 0x0d:
key=8;
break;
case 0x0b:
key=9;
break;
case 0x07:
key=10;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
}
}
}

P3=0xff;
P3_5=0;
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=4;
break;
case 0x0d:
key=5;
break;
case 0x0b:
key=6;
break;
case 0x07:
key=11;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
}
}
}

P3=0xff;
P3_6=0;
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=1;
break;
case 0x0d:
key=2;
break;
case 0x0b:
key=3;
break;
case 0x07:
key=12;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
}
}
}

P3=0xff;
P3_7=0;
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=0;
break;
case 0x0d:
key=13;
break;
case 0x0b:
key=14;
break;
case 0x07:
key=15;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
}
}
}
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

写一个2*4的矩阵式按键的检测程序,方便移植
图4.14.2所示用AT89S51并行口P1接4×4矩阵键盘P1.0-P1.3作输入线P1.4-P1.7作输线;数码管显示每按键0-F序号应按键序号排列图4.14.1所示 图4.14.1 硬件电路原理图 图4.14.2 系统板硬件连线 单片机系统区域P3.0-P3.7端口用8芯排线连接4X4行列式键盘区域C1-C4 R1-R4端口;单片...

用C语言编写:编写一个函数,要求在主函数中输入两个数,输出其中最大值...
C语言代码如下:include<stdio.h> int main(){ int a,b;printf("please enter two number:"); ---两个数字用空格隔开,以回车键结束输入。scanf("%d %d",&a,&b);if(a>b)printf("The max is %d",a);else if(b>a)printf("The max is %d",b);else printf("The two Numbers ...

keil中一个文件夹下好好几个文件,这样做的目的是不是方便子程序移植
呵呵,是的,主要是便于模块化编程,提高程序的可读性,复用性,特别是将与底层硬件无关的程序独立出来,对于移植和复用非常方便,当需要移植时只需要修改与硬件变更有关的程序即可。。。:)

简单好玩的编程代码?
1、代码解释:以上这段代码是用C语言写出来的代码,他所解决的问题是:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少??可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去?掉不满足条件的排列。 2、C语言介绍:C语言是一门通用计算机编程语言,应用广泛。C语言的...

电脑四核和双核有什么区别笔记本电脑双核和四核有什么区别
换句话说,将两个 物理处理器核心整合入一个核中。芯片制造厂商们也一直坚持寻求增进性能而不用提高实际硬件覆盖区的方法。多核处理器解决方案针对这些需求,提供更强的性能而不需要增大能量或实际空间。 2、四核处理器即是基于单个半导体的一个处理器上拥有四个一样功能的处理器核心。换句话说,将四个物理处理器核心...

如何编写snort的检测规则
它只是一个简单的文本字符串,使用作为转义符。 格式: msg:"";3.2 logto logto选项告诉snort把触发某条规则所有的数据包都记录到指定的文件。使用这个选项,对处理来自nmap扫描、HTTP CGI扫描的数据非常方便。注意如果使用二进制日志模式,这个选项会失效。 格式: logto:"<文件名>";3.3 ttl 这个选项设置要测试的...

win7网络诊断工具
脚本调试器可以测试一个脚本文件的运行情况,调试脚本文件的错误。脚本调试器并非Windows 2000默认安装。选择“控制面板”-“添加\/删除程序”-“添加\/删除Windows组件”-“脚本调试器”,然后单击“下一步”按钮就可以安装脚本调试器。选择“开始”-“程序”-“附件”-“Microsoft script debugger”可以打开脚本调试器。4...

复杂推理模型从服务器移植到Web浏览器的理论和实战
Pyodide作为浏览器中的科学计算框架,很好的解决了这个问题:浏览器中运行原生的Python代码进行前、后处理,大量numpy、scipy的矩阵、张量等计算无需翻译为Javascript,为移植节省了很多工作。本文就基于pyodide框架,从理论和实战两个角度,帮助前端同学解决复杂模型的移植这一棘手问题。二原理篇 Pyodide是个可以在浏览器中跑的...

3D游戏程序可以乱写吗?
综述: VC是程序员用的东西。如果你是一个永不满足的人,而且可以在编程上投入很大的精力和时间,那么学习VC你一定不会后悔的。 C语言简介 === 方案四 C++语言 & C++ Builder 优点(1)C++语言的优点全部得以继承。 (2)完全的可是化。 (3)极强的兼容性,支持OWL、VCL和MFC三大类库。 (4)编译速度非常快。 缺...

会议记录收费软件电脑端有哪些好用的免费的剪辑软件可以推荐可以剪辑导 ...
1,剪映app这个是一个手机的剪辑软件,可以合成视频,剪辑,插图,定制logo,最厉害的是可以自动识别字幕然后对照如果有错的地方就删除。 2,快剪辑这个是电脑软件,快剪辑分为两种版本,一个是专业版,一个是快速版,两种版本都在同一个界面,操作方便一看就懂。 3,ps这个是老派软件了,身兼数职,缺点是要花钱。 1、爱剪...

相似回答