导航:首页 > 操作系统 > 单片机键盘扫描程序

单片机键盘扫描程序

发布时间:2022-02-18 02:32:01

㈠ 用单片机编写的键盘扫描程序怎样编写它的求键号程序

要不要我帮你写一段,你后面没扫描,当然无法获取键值
t1:mov p1,#0fh ;p1接口高4位为0,低4位输入
mov a,p1 ;读p1
anl a,#0fh ;屏蔽高4位
cjne a,#0fh,t2 ;有键按下转t2
sjmp t1 ;无键按下转回
t2:lcall delay10;延时10ms,去抖
mov a,p1 ;重新扫描p1口
anl a,#0fh
cjne a,#0fh,t3
sjmp t1
t3:mov r0,#00 ;行计数值
mov r1,#00 ;列计数值
mov r3,#0efh ;扫描初值
t4:mov a,r3
mov p1,a;输出行扫描字
mov a,p1
mov r1,a
anl a,#0fh
cjne a,#0fh,t5 ;该行有键按下
inc r0 ;行计数器加1 ,扫下一行
MOV A,R3
RLC A
MOV R3,A
MOV A,R0
CJAE A,#04H,t4 ;扫到最后一行?
t6: ret ;结束
t5:mov a,r1
jnb acc.0,t7
jnb acc.1,t8
jnb acc.2,t9
jnb acc.3,t10
sjmp t6
t7: mov r2,#00 ;0列号
sjmp t11
t8:mov r2,#01 ;1列号
sjmp t11
t9:mov r2,#02 ;2列号
sjmp t11
t10:mov r2,#03 ;3列号
t11:mov a,r0
mov b,#04
mul ab ;行号乘4
add a,r2 ;键值在A中
ret

㈡ 单片机四个键的独立式键盘扫描汇编程

参考:
uchar read_key(void)
{
uchar x1, x2;
KEY_IO = 255;
x1 = KEY_IO;
if (x1 != 255) {
delay(100);
x2 = KEY_IO;
if (x1 != x2) return 255;
while(x2 != 255) x2 = KEY_IO;
if (x1 == 0x7f) RST();
else if (x1 == 0xbf) DISPLAY();
else if (x1 == 0xdf) TEMP++;
else if (x1 == 0xef) TEMP--;
}
return 255;
}

㈢ 单片机矩阵键盘扫描程序

P3=0x7f;
temp=P3;
temp的值是实时的P3口的值,还是等于0x7f?
temp 的值,是 P3 外部引脚输入的值。
具体是何值?取决于 P3 外接的电路。
如果 P3 外面,八个引脚,都接地,那么:
temp 就是 0000 0000。

㈣ 51单片机 键盘扫描程序

P2的按键扫描跟实时钟模块共用IO了,虽然几率很小但是还是会有几率误触发导致数据读取错误。

㈤ 单片机键盘扫描。

兄弟,你好

void key()
{uchar key1,key2,key3; 这条语句后就key1=key2=key3=0了,肯定就一直在key()函数中一直不出来了撒,你的key1等是按键,怎么没有分配一个IO口呢

你如果这样的话就可以了
void key()
{uchar key1,key2,key3;
key1=key2=key3=1;这样的话就不会一直在key()中了

要想达到效果,估计你还的弄几个按键
添几句

sbit key1=P3^0;
。。。。。。
再把 uchar key1,key2,key3;这一句删了,

你试一下,祝你成功

㈥ 寻单片机“经典键盘”的扫描程序(要C语言的)

uchar keyscan()
{
uchar key,i,keyscan;
P3=0x3d; //准备读取P3.2~P3.5 51的I/0为准双向I/0口 作为输入是最好先将其置1
//读取接地按键值
if((P1&0x3d)!=0x3d){ //若无按键按下 P3.2~P3.5为高
delay(); //延时去抖动
if((P1&0x3d)!=0x3d){//判断哪个按键按下
key=P1&0x3d;
return key;
}
}

keyscan=0x3D;
for(i=0;i<4;i++){
P1=keyscan; //输出I/O口扫描 输出 判断
if(P1!=keyscan){ //读取I/O口,看输出扫P1.0~P1.5的值是否与扫描不同
key=P1&0x3D; //转换扫描码
return key;
}
keyscan=(keyscan<<1)|0x01; //逐行输出扫描 0
}
return 0;
}

㈦ 单片机4*4键盘扫描程序

这这个循环4次的程序段就是发送扫描码,再分别检测按键情况的。扫描码就是k_out,分别是0xfe;0xfd;0xfb,0xf7;这几个数是靠k_out=crol_(k_out,1);来实现的。键盘扫描,你要理解是“扫描”也就是一行一行的发送扫描码,再检测每“列”的值,这个值就是键值。

㈧ 单片机键盘扫描C程序

uchar code act[4]={0xfe,0xfd,0xfb,0xf7};
char scan_key(void)
{
uchar i,j,in,ini,inj;
bit find=0;
for(i=0;i<4;i++)
{ //额 ,先给你解释下4*4
P1=act[i]; //开通读取,并输出高电平
delay(10); //延时
in=P1; //读取单片机值并赋值给in,四种情况4个按键,
in=in>>4; //右移四位,去掉低位
in=in|0xf0; //位或运算,高四位补1,
for(j=0;j<4;j++)
{
if(act[j]==in) //判断具体哪个按键
{
find=1;
inj=j;ini=i;
}
}
}
if(find==0)return-1; //返回值 -1,return 1是正常返回,return -1是非正常返回 程序写法标准而已,即没按键
return(ini*4+inj); //i是判断高四位,j判断低4位
}

0 1 2 3 p1.0 p1.0为零 可判断0,1,2,3 如果开关0导通 p4即为0,即为1110 1110

4 5 6 7 p1.1 右移补1,得 1111 1110,及j为0

8 9 a b p1.2 开关1导通 p5为0, 即 1101 1110, 右移补1111 1101

c d e f p1.3 可判断j为1 同理可类推

p4 5 6 7

按这种思路4个端口只能实现4个开关4*4=16,2*2=4 得换思路,如果是因为端口紧张的话,可以用P3口,或者采用分压读取AD判断按键(AD键盘)

㈨ 单片机按键扫描程序

KEY: MOV A,P1
CLR C
SUBB A,#1
MOV 20H,A
RET
这样得不到键值呀
改:
KEY: MOV A,P1
SETB C
MOV R7,#8
LPKEY:
RRC A
JNC OUTK1
DJNZ R7,LPKEY

OUTK1: DEC R7
MOV 20H,R7 //如果20H=255则表无键
RET

㈩ 单片机的独立键盘扫描程序

这是keil 的语法规定的,在程序中不能有类似的P3^4的写法的。必须在主程序之前用sbit 命令定义成符号,所以,
if(P3^4==0)的写法是错误的,只有if(key==0)的写法才是正确的。
虽然编译是通过的,也没有报错,但是编译后的代码却是错误的。
如果懂得汇编代码,是可以查编译后的汇编代码,就知道是错的。

阅读全文

与单片机键盘扫描程序相关的资料

热点内容
给pdf加目录 浏览:472
加密软件怎么改安全问题 浏览:548
cmd命令ip 浏览:946
python输出单引号双引号 浏览:272
脚本编程管理命令 浏览:379
小爱音箱pro怎么自己装app 浏览:118
建立ftp文件夹命令 浏览:570
sha1withrsa算法 浏览:453
域名交易系统源码php 浏览:171
求解微分方程数值解的命令有哪些 浏览:626
程序员转时尚传媒 浏览:82
古拳谱pdf 浏览:42
一元二次方程无实数根的算法 浏览:352
程序员测试轻松吗 浏览:172
英雄联盟神魔怎么绑定服务器 浏览:984
音乐app怎么换音质 浏览:976
python进阶客户流失 浏览:282
华为荣耀10服务器地址 浏览:1000
javastring相等判断 浏览:413
程序员考研究生学校 浏览:937