没有硬件电路,单从程序来看应该没错。我加了注释,你可以参考下。
#include<STC12C5A60S2h>
char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x00,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void delayms(int xms)
{
int i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
void display(char num)
{
P1=table[num]; //段选数据
}
void matrixkeyscan()
{
char temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)//说明有按键按下
{
delayms(10);//延时,去抖动
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)//说明按键被持续按下
{
temp=P3;//记录P3口状态
switch(temp)//根据现在的状态判断哪个按键被按下
{
case 0xee: //p3^4被按下
key=0;
break;
case 0xde: //p3^5
key=1;
break;
case 0xbe://p3^6
key=2;
break;
case 0x7e://p3^7
key=3;
break;
}
while(temp!=0xf0)//按键松开之后跳出循环
{
temp=P3;
temp=temp&0xf0;
}
display(key);//显示
}
}
P3=0xfd;
{};
P3=0xfb:
{};
P3=0xf7;
{};
void main()
{
P0M1 = 0x00;//推挽输出的定义
P0M0 = 0x0f;//推挽输出的定义
P0=0x0f;
while(1)
{
matrixkeyscan();//不停调用键盘扫描程序
}
}
;字符串首地址(段值:偏移),占四字节
push bp
mov bp,sp
mov bx,word ptr [bp+4]
sub sp,2
mov ax,es
mov word ptr [bp-2],es
mov ax,word ptr [bp+6]
mov es,ax
loop1
mov ah,0
int 16h
cmp al,8
jne go1
sub bx,1
mov ah,0eh
int 10h
mov al,32
mov ah,0eh
int 10h
mov al,8
mov ah,0eh
int 10h
jmp loop1
go1
mov word ptr [es:bx],al
add bx,1
mov ah,0eh
int 10h
cmp al,13
jne loop1
mov ax,0e0ah
int 10h
sub bx,1
xor ah,ah
mov byte ptr [es:bx],ah
mov word ptr ax,[bp-2]
mov es,ax
mov sp,bp
pop bp
ret
;--------------------------------------------------
说明: 可以用call 指令来调用此过程
在调用之前 将字符串的 段值和偏移 按顺序压栈
调用后 需要释放栈
例如 :
mov ax,offset string
push ds
push ax
call _input
add sp,4
1、打开VBA编辑界面。
2、首先先编写一个测试函数的框架,如下图所示。
3、接着定义两个字符串变量用来存放用来比较的两个字符串的。Dimstr1AsStringDimstr2AsString。
4、然后为定义好的两个字符串变量赋值。str1="ABCD" str2="abcd"。
5、然后使用StrComp函数进行两个字符串比较,这个函数有三个参数,前两个参数是两个字符串,最后一个参数为1,是说明要进行字符串的比较,如果的不给第三个参数,那就是进行而二进制的比较。
6、最后点击运行查看结果。(结果为0说明两者相等,-1就是前者小于后者,1就是大于后者)。
以上就是关于单片机矩阵键盘程序求解释和修正!全部的内容,包括:单片机矩阵键盘程序求解释和修正!、汇编怎样编写从键盘接收字符串的程序呢、编一个程序,实现对键盘输入的两个字符串进行比较,然后输出两个字符串第一个不相同字符的ASCII码之差!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)