4*4矩阵键盘汇编语言程序对应的C语言程序。
下面的汇编语言程序怎么写成C语言程序?LINEEQU30HROWEQU31HVALEQU32HORG00HSTART:MOVDPTR,#TABLEMOVP2,#00HLS...
下面的汇编语言程序怎么写成C语言程序?
LINE EQU 30H
ROW EQU 31H
VAL EQU 32H
ORG 00H
START: MOV DPTR,#TABLE
MOV P2,#00H
LSCAN: MOV P3,#0F0H
L1: JNB P3.0,L2
LCALL DELAY
JNB P3.0,L2
MOV LINE,#00H
LJMP RSCAN
L2: JNB P3.1,L3
LCALL DELAY
JNB P3.1,L3
MOV LINE,#01H
LJMP RSCAN
L3: JNB P3.2,L4
LCALL DELAY
JNB P3.2,L4
MOV LINE,#02H
LJMP RSCAN
L4: JNB P3.3,L1
LCALL DELAY
JNB P3.3,L1
MOV LINE,#03H
RSCAN: MOV P3,#0FH
C1: JNB P3.4,C2
MOV ROW,#00H
LJMP CALCU
C2: JNB P3.5,C3
MOV ROW,#01H
LJMP CALCU
C3: JNB P3.6,C4
MOV ROW,#02H
LJMP CALCU
C4: JNB P3.7,C1
MOV ROW,#03H
CALCU: MOV A,LINE
MOV B,#04H
MUL AB
ADD A,ROW
MOV VAL,A
MOVC A,@A+DPTR
MOV P2,A
LJMP LSCAN
DELAY: MOV R6,#20
D1: MOV R7,#250
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 展开
LINE EQU 30H
ROW EQU 31H
VAL EQU 32H
ORG 00H
START: MOV DPTR,#TABLE
MOV P2,#00H
LSCAN: MOV P3,#0F0H
L1: JNB P3.0,L2
LCALL DELAY
JNB P3.0,L2
MOV LINE,#00H
LJMP RSCAN
L2: JNB P3.1,L3
LCALL DELAY
JNB P3.1,L3
MOV LINE,#01H
LJMP RSCAN
L3: JNB P3.2,L4
LCALL DELAY
JNB P3.2,L4
MOV LINE,#02H
LJMP RSCAN
L4: JNB P3.3,L1
LCALL DELAY
JNB P3.3,L1
MOV LINE,#03H
RSCAN: MOV P3,#0FH
C1: JNB P3.4,C2
MOV ROW,#00H
LJMP CALCU
C2: JNB P3.5,C3
MOV ROW,#01H
LJMP CALCU
C3: JNB P3.6,C4
MOV ROW,#02H
LJMP CALCU
C4: JNB P3.7,C1
MOV ROW,#03H
CALCU: MOV A,LINE
MOV B,#04H
MUL AB
ADD A,ROW
MOV VAL,A
MOVC A,@A+DPTR
MOV P2,A
LJMP LSCAN
DELAY: MOV R6,#20
D1: MOV R7,#250
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 展开
3个回答
TableDI
2024-07-18 广告
2024-07-18 广告
在上海悉息信息科技有限公司,我们处理数据时经常使用到表格匹配函数。匹配函数如`VLOOKUP`(垂直查找)在Excel中特别常见,它能在某一区域的首列中查找指定值,并返回该行中指定列处的值。这样的函数在处理大量数据时非常高效,能够快速定位和...
点击进入详情页
本回答由TableDI提供
追问
我对应不过来
追答
针对楼主的问题,把程序缩减了一些,如下:
//=======================================================
#include
char disp_buff [] ={0, 0, 0, 0, 0, 0, 0, 0};//显示缓冲单元
//-------------------------------------------------------
delay1ms(unsigned int t) //1ms延时函数
{
unsigned int i, j;
for(i = 0; i < t; i++) for(j = 0; j < 120; j++);
}
//-------------------------------------------------------
void display(void) //显示函数
{
char code table[] = { //共阴数码管的段码
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
P2 = ~table[disp_buff [0]]; //取反,用于共阳数码管
delay1ms(2);
}
//-------------------------------------------------------
unsigned char keyboard(void) //扫描键盘函数
{
char i, j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
for(j = 0; j < 4; j++) { //循环扫描四行
P3 = Buffer[j]; //在高四位分别输出一个低电平
temp = 0x01; //计划先判断第0位
for(i = 0; i < 4; i++) { //循环扫描四列
if(!(P3 & temp)) //从低四位,截取1位
return (i + j * 4); //如果为0就返回按键值
temp <<= 1; //判断的位,左移一位
} }
return 16; //判断结束,没有键按下,返回16
} //呵呵,实质性的语句不过8行,就是这么简练!
//-------------------------------------------------------
void main(void)
{
unsigned char i, key;
while(1) { //无限循环
display(); //显示一遍
key = keyboard(); //读出一遍键盘
if (key < 16) { //如果有人按键
disp_buff [0] = key;
for (i = 0; i < 20; i++) display();//稍稍延时
while(key < 16) { //等待按键释放
key = keyboard(); //再读
display(); //别忘了显示
} } } //无限循环
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
4*4矩阵键盘c语言 仿真实例供参考
更多追问追答
追问
我的汇编语言程序可以实现,现在我要C语言程序啊~
追答
再下载就是4*4矩阵键盘c语言
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询