汇编语言写4×4按键矩阵

汇编语言写4×4按键矩阵,第1张

ORG 0000H

MAIN: MOV P2,#0F0H 4×4矩阵连接蚂李P2

MOV A,P2 进行列扫描

CJNE A,#0F0H,NEXT1 判断是否有按键按下

AJMP MAIN

NEXT1: MOV R0,A 列值赋给A

MOV P2,#0FH

MOV A,P2 进行行扫描

CJNE A,#0FH,NEXT2 判断是否有按键按下

AJMP MAIN

NEXT2: ACALL DELY 延时去抖,再次读P2口赋给A

MOV A,P2

CJNE A,#0FH,NEXT3 判断是否有按键按下

AJMP MAIN

NEXT3: ORL A,R0 行列值求或得到按键值

MOV R0,A

MOV DPTR,#TABLE1 指向键闷衫迟值表

MOV R1,#0

MOV 30H,R0

COOR: MOV A,R1

MOVC A,@A+DPTR

CJNE A,30H,NEXT4 按键值与按键表中塌蚂一一对应

AJMP NEXT5

NEXT4: INCR1 计数判断具体按键对应的位置

AJMP COOR

NEXT5: MOV A,R1

MOV DPTR,#TABLE2 指向数码管的显示表

MOVC A,@A+DPTR

MOV P0,A将值送入P0口

AJMP MAIN

DELY:MOV R7,#50

DLY0:MOV R6,#100 延时10ms

DLY1:DJNZ R6,DLY1

DJNZ R7,DLY0

RET

TABLE1: DB 0EEH,0DEH,0BEH,7EH

DB 0EDH,0DDH,0BDH,7DH

DB 0EBH,0DBH,0BBH,7BH

DB 0E7H,0D7H,0B7H,77H

TABLE2: DB 0C0H,0F9H,0A4H,0B0H

DB 99H,92H,82H,0F8H

DB 80H,90H,88H,83H

DB 0C6H,0A1H,86H,8EH

END

#include<reg51.h>

unsigned char keyval,keynum=0

unsigned char distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}

void t1isr() interrupt 3

{

unsigned char sccode,recode

TH0=(65536-10000)/256

TL0=(65536-10000)%256

P3=0x0f //发0扫描,列线输入

if ((P3 &0x0f) != 0x0f)keynum++ //有兄蠢裤键按下

else keynum=0

if(keynum>5) //档顷按键保持在羡简5次中断以上

{

keynum=0

sccode = 0xef //逐行扫描初值

while((sccode&0x01)!=0)

{

P3=sccode

if((P3&0x0f)!=0x0f)

{

recode=(P3&0x0f)|0xf0

getkey((~sccode)+(~recode))

}

else

sccode=(sccode<<1)|0x01

}

}

getkey(0)

}

void getkey(unsigned char key)

{

if(key==0){keyval=0xffreturn}

switch(key)

{

case 0x11:keyval=7break

case 0x12:keyval=4break

case 0x14:keyval=1break

case 0x18:keyval=10break

case 0x21:keyval=8break

case 0x22:keyval=5break

case 0x24:keyval=2break

case 0x28:keyval=0break

case 0x41:keyval=9break

case 0x42:keyval=6break

case 0x44:keyval=3break

case 0x48:keyval=11break

case 0x81:keyval=12break

case 0x82:keyval=13break

case 0x84:keyval=14break

case 0x88:keyval=15break

default:keyval=0xffbreak

}

}

main()

{

TMOD=0x01

TH0=(65536-10000)/256

TL0=(65536-10000)%256

TR0=1

ET0=1

EA=1

while(1)

{

if(keyval!=0xff)P0=distab[keyval]

}

}

#define N 4

void main()

{

int a[N][N]

int i,j,max,p,q

printf("输入4*4矩阵:\n")

for(i=0i<Ni++)

for (j=0j<Nj++)

scanf("%d",&a[i][j])

printf("输入的矩阵为:\n")

for(i=0i<Ni++)

{

for(j=0j<Nj++) printf("%4d",a[i][j])

printf("肆尘祥\n")

}

max=a[1][0]

p=1q=0

for(i=1i<Ni++)

for(j=0j<ij++)

if(a[i][j]>max)

{

max=a[i][j]

p=iq=j

}

a[q][p]=max

printf("处理以后的兄仿矩阵为:\裂搏n")

for(i=0i<Ni++)

{

for(j=0j<Nj++) printf("%4d",a[i][j])

printf("\n")

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12556109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存