51单片机
P3口接4×4矩阵键盘,P1口接数码管(并接LED灯)。我现在已经计算出键值,但是不知道怎么把它显示出来,或者方便查表。
(以下是已经编好能计算出键值的程序)
;A005_1.ASM
;矩阵键盘练习
KEYCARD BIT 00H ;标志位
KEYS EQU 5AH ;键值缓存
ORG 0000H
AJMP START
ORG 30H
START:
MOV P1,#00H
MOV P2,#0FH
CLR KEYCARD
LOOP:
ACALL KEY_CHECK
JNB KEYCARD,LOOP
ACALL KEY_MARK
AJMP LOOP
KEY_CHECK: ;键盘扫描
MOV P3,#0FH
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,KEY_C1
CLR KEYCARD
RET
KEY_C1:
ACALL DELAY
SETB KEYCARD
RET
KEY_MARK:
MOV A,#0EFH
KEY_M1: ;键值扫描
MOV P3,A
MOV KEYS,A
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,KEY_M2
MOV A,KEYS
SETB C
RLC A
JC KEY_M1
CLR KEYCARD
RET
KEY_M2: ;键值计算
MOV R0,#KEYS
XCH A,@R0
XCHD A,@R0
MOV P1,A
KEY_MX: ;等待按键释放
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,KEY_MX
CLR KEYCARD
RET
DELAY:
MOV R7,#20 ;延时大约2ms
D1:MOV R6,#50
DJNZ R6,$
DJNZ R7,D1
RET
END
还有什么硬件?就一个单片机,P3口接键盘,P1口接4位数码管并接8个LED灯,别的没啦.学习用的嘛
单片机的矩阵键盘检测,扫描程序已经写出来了,怎么显示呢
MOV A,R1 ;R1中是要显示的十进制 MOV DPTR,#TABEL ;使DPTR 指向TABEL(TABEL 中 是10进制对应的16进制表格)MOVC A,@A+DPTR;查表 MOV P2,A ;此时A中即是 16进制 ;---LED的 共阴码表--- TABEL:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;0123456789 DB 77H,7CH...
51单片机 矩阵键盘 检测的命令
temp的值会受到按键的影响,例如变成:7e或别的值等。
51单片机如何把矩阵键盘控制数码管和独立键盘控制蜂鸣器共同实现_百度...
对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路是:首先使行作为输入,使用单片机内部电阻上拉为高电平,列输出低电平,读行的状态。如果行有一个IO口是低,说明有键按下,进行下一步,否则退出扫描。如果有键按下,置列为输入,行输出低电平,读列的状态。最后根据 行列的状态查表就可以知道...
51单片机矩阵键盘程序:想把按键的值一一存到数组里,最后按下某个按键...
给一个键盘扫描程序参考:void delay(unsigned int a){unsigned int i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);}uchar kbscan(void){unsigned char sccode,recode;P1=0x0f; \/\/发0扫描,列线输入if ((P2 & 0x0f) != 0x0f) \/\/有键按下{delay(20); \/\/延时去抖动if (...
51单片机矩阵键盘扫描程序,怎样判断当前按键式第几行的?
p3=fe就是扫描第一行,然后&上f0就是屏蔽低位高位不等于f0则有建按下,后面你那个12345678……就是第几个建,如你的例子,=ed的时候是发生在p3=fd的程序,fd是第二行手机打字欢迎追问
单片机矩阵键盘按键行列逐级扫描法
=0xf0) { \/\/表示有按键按下 KeyPort=0xfe; \/\/检测第一行if(KeyPort!=0xfe) { Val=KeyPort&0xf0; Val+=0x0e; \/\/相当于检测到第一行有键按下,键值=列(高四位)+行(低四位) while(KeyPort!=0xfe); DelayMs(10); \/\/去抖 while(KeyPort!=0xfe); return Val; ...
用89C51单片机设计4*4矩阵式键盘计算器程序 要汇编的
;查表求键值程序DK: MOV B,#00H MOV A,KEYBUF ;查表程序 查对应的键号数据 MOV DPTR,#TABLE ;把表头地址放入DPTR MOVC A,@A+DPTR ;A里面存放的为键号,利用A和表头地址找到对应的键号数据 MOV B,A ;把查到的数据送往显示单元 INC R1 ;取下一个显示单元 MOV A,R1 CJNE A,#36H,DKA1 ;判断...
51单片机做矩阵键盘,定义四个键,其中一个确认键,要求按下确认键时才显 ...
之前按下的按键数值保存在变量里面,当检测到按下确认键的时候再把之前的按键数值取出来显示。
51单片机矩阵键盘检测方面的问题
第一个问题,应该是考虑如果先开锁存器,在那一时刻,P0的值还是上一次给P0赋的值,下在一条语句才将这次的值给P0,这样会造成数码管的余辉,静态显示的时候,因为太快看不到,动态显示时,就会比较明显了。第二个问题他的程序应该检测的是高四位,是否被拉低,因为temp和0xf0与,低四位不管是...
帮忙看看这个51单片机的计数器程序哪里出问题了吧,用矩阵键盘控制的
1、数码管显示部分的问题,没有消 0 ,C 语言中变量初值都是 0 ,所以一开始就会显示 0 如果你不想让显示 0 ,那就要写消 0 的程序,就加两句话,很简单的 2、键盘处理部分的问题,如果确认你的键盘检测是对的,那么就是键值处理部分的问题了 3、51都是加法计数器,如果你要想进行减法计数的...