MAIN: MOV P2,#0F0H 4×4矩阵连接蚂李P2
MOV A,P2 进行列扫描
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 4void 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")
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)