51单片机

51单片机程序仿真!!!

设计包含一个矩阵式键盘电路和动态显示电路的单片机应用系统,通过根据按下不同的数字按键(0~9),在数码管上显示出自己学号的后8位。

各位大神帮忙挑挑错,或者问题太大了可以帮忙写一个新的么!!!!
万分感谢!!!好着急
A_8255 EQU 7CFFH ;A口
B_8255 EQU 7DFFH ;B口
C_8255 EQU 7EFFH ;C口
CON_8255 EQU 7FFFH ;控制字地址
ORG 0000H
SJMP MAIN
ORG 0030H

MAIN: MOV A, #89H;控制字,A、B口输出,C口输入
MOV DPTR, #CON_8255;8255控制端口
MOVX @DPTR, A;写入控制字
MOV R1,#00H
KEY:LCALL KS ;调查询程序判别有无键按下
JNZ K2 ;确有键按下,转逐列扫描
AJMP KEY ;无键按下,返回

K2:MOV R2,#0FEH ;首列扫描字送R2
MOV R4,#00H ;首列号送R4
K3: MOV A,R2
MOV P1,A ;列扫描字送8255PD口
MOV DPTR, #C_8255;指向8255PC口
MOVX A,@DPTR ;读取行扫描值
JB ACC.0,L1 ;第0行无键按下,转查第1行
MOV A,#00H ;第0行有键按下,行首键号送A
AJMP LK ;转求健号
L1:JB ACC.1,NEXT ;第1行无键按下,查第2行
MOV A,#08H ;第1行有键按下,行首键号送A
AJMP LK ;转求键号
LK:ADD A,R4 ;形成键号送A
PUSH ACC ;键号q
K4:LCALL KS ;等待键释放
JNZ K4 ;未释放;等待
POP ACC ;键释放,弹出键号
INC R1
RET
NEXT:INC R4 ;修改列号
MOV A,R2
JNB ACC.7,KEY ;8列扫描完返回KEY
RL A ;未扫完扫描字左移一位
MOV R2,A ;扫描字存R2
AJMP K3
KS:MOV DPTR,#P1;PD口地址送DPTR
MOV A,#00H;全扫描字送A
MOVX @DPTR,A;全扫描字送PD口
MOV DPTR, #C_8255;指向C口
MOVX A,@DPTR;读取PC口行状态
CPL A;变正逻辑,高电平有键按下
ANL A,#03H;屏蔽高8位
RET

DIS:MOV R0,A ;显示缓冲首地址
MOV R3,#01111111B ;扫描位
MOV R7,#0
AGAIN: MOV A,R3
MOV DPTR,#A_8255
MOVX @DPTR,A
RR A
MOV R3,A
MOV A,@R0
MOV DPTR,#DSEGS ;数码管段表地址
MOVC A,@A+DPTR ;查表
MOV DPTR,#B_8255 ;送段显示
MOVX @DPTR,A
DJNZ R7,$
CJNE R1,#08H,KEY
AJMP AGAIN
DSEGS: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END

51单片机_第1张图片

你可能感兴趣的:(51单片机)