按键扫描思路

首页 | 行业黑名单 | 委托交易 | 帮助 | English
IC 非IC 电子资讯 技术资料 电子论坛


IC库存(103815364条) PDF资料(329万) IC价格 IC求购 资讯 技术资料
电子元器件搜索:
采购IC?下载Datasheet?上维库,维库电子市场网,中国最大的IC采购和资料下载平台!


技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

我用C51做的键盘程序,望大家批砖
作者:hexiaoxiao 栏目:单片机

我用C51做的键盘程序,望大家批砖
该程序没有被仿真过,可能有一些错误.不过编译是通过的.
这是我一时兴起编的,望高手指点.
#include
#include
#define uCHAR unsigned CHAR
#define uint unsigned int
uCHAR bdata flags ;
sbit flag0=flags^0 ;
sbit KEY_A=P0^2; //列1
sbit KEY_B=P0^1; //列2
sbit KEY_C=P0^0 ; //列3
void delayms(void);
/*================================================*/
/* KEY程序 */
/*================================================*/
void main(void)
{
uCHAR m;
int i;
int h=0 ;
int n=4;
flag0=0;
m=0xef;
P0=0x0f ;
if((P0&0x0f)!=0x0f) //有键按下往下执行
{
delayms();
if((P0&0x0f)!=0x0f) //确认有键按下
{
for(i=0;i<4;i++) //扫描4行
{
P0=m; //从P0.4=0(第一行)开始扫描
if(KEY_A==0) //列1有效
{
h=h+1; //算出列1键盘值
flag0=1;
while(KEY_A==0) //等待按键松开
;
}
else if(KEY_B==0) //列2有效
{
h=h+2 ; //算出列2键盘值
flag0=1;
while(KEY_B==0)
;
}
else if(KEY_C==0)//列3有效
{
h=h+3; //算出列3键盘值
flag0=1;
while(KEY_C==0)
;
}
if(flag0==1)
break ;
m<<=1; //调整扫描行
m=m+1; //修正列
h=h+3; //修正键盘值
}
}
}
}
/*=====================================================================*/
/* 延时10毫秒*/
/*=====================================================================*/
void delayms(void)
{
uCHAR i;
for(i=300;i>0;i--);
}
/*==================================================================*
下面是键盘布局:

P02 P01 P00
1 2 3 P04
4 5 6 P05

7 8 9 P06
M 0 C P07



2楼: >>参与讨论
作者: djc001 于 2005-4-14 22:13:00 发布:
--------------------------------------------------------------------------------
看看我的;一直在用的键盘子程序;

uchar getkey()
{
uchar i,state,key;
p2=0x0F;
while((p2&0x0F)==0x0F) //等待键盘按下
{
while((p2&0x0F)==0x0F);
delay(100); //延时1MS
}
p2=0xFF;
for(i=4;i>0;i--)
{
p2=0xFF&(~(0x01<<(0x8-i))); //要扫描的列置0 state=p2&0x0F; //屏蔽高4位
if(state!=0x0F) //Óмü°´ÏÂ
{
SWITCH(state)
{
case 0x0E:
key=(0x4-i)*0x4+0x1;
break;
case 0x0D:
key=(0x4-i)*0x4+0x2;
break;
case 0x0B:
key=(0x4-i)*0x4+0x3;
break;
case 0x07:
key=(0x4-i)*0x4+0x4;
break;
default:
break;
}

}

}
return key;
}
// 键盘说明
// P24 P25 P26 P27
// 1 5 9 D P20
// 2 6 A E P21
// 3 7 B F P22
// 4 8 C 10 P23




3楼: >>参与讨论
作者: freede 于 2005-4-15 8:42:00 发布:
--------------------------------------------------------------------------------
不知道楼主的延时10ms程序是怎么算的?
有没有看过汇编代码是否真的能延时10ms?


4楼: >>参与讨论
作者: hexiaoxiao 于 2005-4-15 9:26:00 发布:
--------------------------------------------------------------------------------
当然

5楼: >>参与讨论
作者: fushaobing 于 2005-4-15 10:48:00 发布:
--------------------------------------------------------------------------------
受益了
我一直用汇编写程序,现在看你们的C程序,真的是很简洁


6楼: >>参与讨论
作者: shiguiyuan 于 2005-4-15 11:25:00 发布:
--------------------------------------------------------------------------------
顶那,不知楼上各位如何处理多级菜单
我接手的项目都有多级菜单,以前的程序都是菜单键盘独占主程序的结构,我想修改一下,按多任务思想来做.
各位DX有什么好的建议吗?我写好了也贴出来看看.



7楼: >>参与讨论
作者: lele乐乐 于 2005-4-15 15:40:00 发布:
----------------------------------------------------------

----------------------
用查表可以很容易实现

8楼: >>参与讨论
作者: xwj 于 2005-4-15 16:38:00 发布:
--------------------------------------------------------------------------------
我一般都不在键盘程序中延时,而是通过隔一段时间调用来确定
呵呵
看到大家讨论按键,也把我设计按键程序的思路说说,欢迎大家拍砖

1、一般都不在键盘程序中延时,而是通过隔一段时间调用(比如10毫秒)来扫描按键,以尽量释放CPU资源;
2、所有键盘程序基本上都是一个模式,可以处理加速键、一键多功能等情况;
3、对外接口只有2个,换用不同硬件的键盘只需把该键盘程序加入工程编译即可,其他不需要作任何改动,非常方便。


基本上都是一个模式:
有键?--YES——和上次相同?--No--Keyold=0;退出
| |
| YES--Keyold++;
| |
| Keyold==首键延时KEYDELAY?--No--退出
| |
| YES--Keyok=1; //按下不放一定时间发首键,后面发加速键
| 保存键值到Keydata;(必要时译码)
| Keyold=KEYDELAY-KEYLOOP(按住不放的延时);--退出
|
No--Keyold==0?--YES--退出
|
N0--Keyok=1; //不为0说明按了键再放开,当然作按键有效处理
保存键值到Keydata;(必要时译码)
Keyold=0;--退出

所有键盘程序对外接口:
unsigned CHAR KeyGetCode(void) //返回按键码
{
key_ok=0;
return(key_data);
}

bit KeyTest(void) //检查有无按键
{
KeyScan(); //键扫描
return(key_ok);
}








9楼: >>参与讨论
作者: djc001 于 2005-4-15 17:09:00 发布:
--------------------------------------------------------------------------------
C51里面的函数反回值可以为位变量吗?
还真没听说过啊!


10楼: >>参与讨论
作者: xwj 于 2005-4-15 17:21:00 发布:
--------------------------------------------------------------------------------
呵呵,当然可以

11楼: >>参与讨论
作者: fushaobing 于 2005-4-15 17:32:00 发布:
--------------------------------------------------------------------------------
TO xwj:
你的意思是不是这样:把键盘扫描放在定时中断子程序中(定时周期约10ms),可以用两次中断的时间间隔来去抖动,可以引入“键龄”的概念来实现连击的处理(在中断中使键龄减1)。例如,如果设“键龄=25”,则每25*10=250ms操作一次按键。


12楼: >>参与讨论
作者: xwj 于 2005-4-15 18:10:00 发布:
--------------------------------------------------------------------------------
呵呵,就是这个意思,比如首键键龄25,就是延时250MS,连续键...
连续键把键龄设为

25-10,就是延时100MS一次连续键,当然这个参数你可以根据自己的习惯调节的


13楼: >>参与讨论
作者: andrew_hot 于 2005-4-15 19:30:00 发布:
--------------------------------------------------------------------------------
受益良多
谢谢


14楼: >>参与讨论
作者: ri1982 于 2005-4-15 21:02:00 发布:
--------------------------------------------------------------------------------
这样的帖子多发点,不错。

15楼: >>参与讨论
作者: hotpower 于 2005-4-16 1:26:00 发布:
--------------------------------------------------------------------------------
改为子程序可能会好些...
实战意义不大...必须和键盘命令结合...

延时消抖属正规战,效率太低...


16楼: >>参与讨论
作者: luhuaren 于 2005-4-16 8:16:00 发布:
--------------------------------------------------------------------------------
RE
/*===================================
NOTE:
键盘处理主程序模块
此程序在主程序中调用
===================================*/
void key_scan(void)
{
unsigned int i;

SWITCH(key_state)
{
case 0:
if(key_exist()) //判断有无键按下入口
{
key_time=system_time;
key_before=key_get();
key_state=1;
}
break;
case 1: //消抖入口 if(key_system-key_time>=10)
{
if(key_exist())
{
if(key_before==key_get())
{
key_result=key_before;
key_state=2;
}
else
{
key_before=0xff;
key_result=0xff;
key_state=0;
}
}
else
{
key_before=0xff;
key_result=0xff;
key_state=0;
}
}
break;
case 2: //判断键有没有被释放入
if(key_exist())
{
if(key_before=key_get())
{
return;
}
else
{
key_before=0xff;
key_state=0;
}
}
else
{
key_before=0xffff;
key_state=0;
}
break;
case initalize: //初始化如入口
key_result=0xff;
key_before=0xff;
key_time=0;
key_state=0;
break;
default:
break;
}
}



17楼: >>参与讨论
作者: xjw230 于 2005-4-16 10:16:00 发布:
--------------------------------------------------------------------------------
51开发板
各位大侠
谁有51的开发板啊
请教教我吧!!!!!
谢谢啊


18楼: >>参与讨论
作者: jinccg 于 2005-4-16 10:40:00

发布:
--------------------------------------------------------------------------------
我用的是汇编键盘扫描程序
;后面的按键不是循环的.这个程序是篮球赛计分器中的一部分!如有需要可以联系我!
SETTIME:PUSH PSW
PUSH ACC ;保护
SETB RS0
SETB RS1 ;切换到工作寄存器 3 区
MOV P3,#0FFH ;置P3口为输入I/O口
CHECK:MOV C,P3.3
JC EXITINT ;查询中断INT1有无按键按下,无则退出中断子程序
LCALL DELAY1000 ;
SETB P3.3
MOV C,P3.3
JC EXITINT ;0.2us后再确认查询中断INT1有无按键按下,无则退出中断子程序
MOV P3,#0FFH
MOV C,P3.4
JNC CLRTIME ;若P3.4有键按下则转入定时分支程序
MOV P3,#0FFH
MOV C,P3.5
JNC SETTIME1 ;若P3.5有键按下则转入设时分支程序
SJMP EXITINT
CLRTIME: INC SIGN ;按键次数标志加1
MOV A,SIGN
CJNE A,#01H,TWOENTER ;第二次按下则开始计时
CLR TR0 ;关定时器T0,即实现定时功能
SJMP EXITINT
SETTIME1:CLR TR0
MOV A,MINUTE
INC A
DA A
MOV MINUTE,A
CJNE A,#ENTERDATA,BEXIT
MOV MINUTE,#00H
;MOV A,MINUTES
;INC A
;MOV MINUTES,A
;CJNE A,#0AH,BEXIT
;CLR MINUTES
;MOV A,MINUTED
;INC A
;MOV MINUTED,A
; CJNE A,#06H,BEXIT
;CLR MINUTED
SJMP BEXIT
TWOENTER:MOV SIGN,#00H
BEXIT:SETB TR0
EXITINT: POP ACC
POP PSW
RETI


ADDMARK:PUSH PSW
PUSH ACC
MOV P3,#0FFH
CHK: MOV C,P3.2 ;查询中断0
JC EXITI ;判为抖动产生中断,则退出中断
LCALL DELAY1000 ;软件消抖
MOV P3,#0FFH
MOV C,P3.2
JC EXITI ;判为抖动产生中断,则退出中断
CLR TR0 ;进球后秒表不走
SETB P3.0
MOV C,P3.0
JNC REDMARKADD
SEEDEC1:SETB P3.1
MOV C,P3.1
JNC REDMARKDEC
SETB P3.6
MOV C,P3.6
JNC BLUEMARKADD
SEEDEC2: SETB P3.7
MOV C,P3.7
JNC BLUEMARKDEC
SETB TR0 ;开定时
SJMP EXITI
REDMARKADD:MOV A,REDTEAM ;加两分
INC A
INC A
DA A
MOV REDTEAM,A
CJNE A,#99H,SEEDEC1
MOV REDTEAM,#00H
SJMP EXITI
REDMARKDEC:MOV A,REDTEAM ;减一分
DEC A
DA A
MOV REDTEAM,A
CJNE A,#0,EXITI
MOV REDTEAM,#00H
SJMP EXITI
BLUEMARKADD:MOV A,BLUETEAM ;加两分
INC A
INC A
DA A
MOV BLUETEAM,A
CJNE A,#99H,SEEDEC2
MOV BLUETEAM,#00H
SJMP EXITI
BLUEMARKDEC:MOV A,BLUETEAM ;减一分
DEC A
DA A
MOV BLUETEAM,A
CJNE A,#0,EXITI
MOV BLUETEAM,#00H
SJMP EXITI
EXITI: SETB TR0 ;

开定时
POP ACC
POP PSW
RETI


19楼: >>参与讨论
作者: keeyoo 于 2005-4-16 11:12:00 发布:
--------------------------------------------------------------------------------
按键程序不要去做延时好
让系统多次检测,再确定是否按下,做有效的判定


20楼: >>参与讨论
作者: leidexiao 于 2005-4-17 3:47:00 发布:
--------------------------------------------------------------------------------
太高深了,我还是初学这些东东呀!

21楼: >>参与讨论
作者: coolkhas 于 2005-4-17 9:11:00 发布:
--------------------------------------------------------------------------------
这个星期刚学了键盘
看起来还是有点吃力,大段的程序看起来总是力不从心啊。。


22楼: >>参与讨论
作者: DD123 于 2005-4-18 12:42:00 发布:
--------------------------------------------------------------------------------
建议用中断做按键程序
如果一个芯片只做按键检测一个任务时可以用循环延时,但是如果按键只是其中一个任务时,时间片都被这个延时程序占用了,其它的任务就别做了。


23楼: >>参与讨论
作者: gwnpeter 于 2005-4-18 18:02:00 发布:
--------------------------------------------------------------------------------
我是很反对在程序中延时的,调用一次就浪费10ms!
10ms可以执行大概15000条指令了(22.1184MHZ晶振)
心痛................


24楼: >>参与讨论
作者: gwnpeter 于 2005-4-18 18:18:00 发布:
--------------------------------------------------------------------------------
我是很反对在程序中延时的,调用一次就浪费10ms!
10ms可以执行大概15000条指令了(22.1184MHZ晶振)
心痛.............................


25楼: >>参与讨论
作者: cjxytu 于 2005-4-18 20:00:00 发布:
--------------------------------------------------------------------------------
为什么不用swtich 语句

26楼: >>参与讨论
作者: yf815 于 2005-4-18 20:10:00 发布:
--------------------------------------------------------------------------------
我要向你学习
我觉得如果你能用swtich...case语句可能看上去更直观些,虽然结果一样,但是自己看过来还是好看些吧。我不是很懂C51,发表点自己的看法。


27楼: >>参与讨论
作者: jinjianhui 于 2005-4-18 21:20:00 发布:
--------------------------------------------------------------------------------
我用C51做的键盘程序,望大家批砖
真是太好了,各有秋色!过一阵子我也要上传一个给大家批批!


28楼: >>参与讨论
作者: lgl88911 于 2005-4-19 10:04:00 发布:
--------------------------------------------------------------------------------
有没有比较新奇的键盘加速
键盘加速,就是长按键二义,一般都是用计数器,

有没有比较新奇的算法


29楼: >>参与讨论
作者: natural_z 于 2005-4-19 16:41:00 发布:
--------------------------------------------------------------------------------
TO DJC001:关于消抖探讨
DJC001
我想如果把你上传的键盘程序消抖部分"
while((p2&0x0F)==0x0F) //等待键盘按下
{
while((p2&0x0F)==0x0F);
delay(100); //延时1MS
} "

改为如下程序可能更合理些"

do
{
while((p2&0x0F)==0x0F); //等待键盘按下
delay(100); //延时1MS
}while((p2&0x0F)==0x0F);
"
拙见请赐教!!!


30楼: >>参与讨论
作者: wangzhaofu 于 2005-4-19 18:29:00 发布:
--------------------------------------------------------------------------------
如果把键盘接口接在8255的扩展口怎么样???

31楼: >>参与讨论
作者: bassein 于 2005-4-23 9:39:00 发布:
--------------------------------------------------------------------------------
写得很好啊!真应该有C写,以前用汇编编死人了

32楼: >>参与讨论
作者: jtgetja 于 2005-4-23 11:37:00 发布:
--------------------------------------------------------------------------------
好~~~顶~~学习~~~

33楼: >>参与讨论
作者: datazyb 于 2005-4-23 22:43:00 发布:
--------------------------------------------------------------------------------
好帖子,希望以后能多见到这样的
键盘处理各有千秋,我是赞成不在键盘中延时来消除按键抖动,只要多次判断,检查是否有效就很好,CPU效率也高.




34楼: >>参与讨论
作者: gwnpeter 于 2005-4-24 10:13:00 发布:
--------------------------------------------------------------------------------
使用SuperLoop结构,不要延时,很浪费cpu!

35楼: >>参与讨论
作者: tcl 于 2005-4-24 10:25:00 发布:
--------------------------------------------------------------------------------
有按键带数显专用芯片,干吗不用???????????

36楼: >>参与讨论
作者: zfs1985 于 2005-4-25 22:35:00 发布:
--------------------------------------------------------------------------------
偶不懂咧
有没有用汇编,编的呀,“C”偶不懂咧!!!!


37楼: >>参与讨论
作者: xiaoguang 于 2005-4-26 9:33:00 发布:
--------------------------------------------------------------------------------
按键带数显专用芯片不用钱吗?

38楼: >>参与讨论
作者: zhenqihui 于 2005-4-26 14:33:00 发布:
--------------------------------------------------------------------------------
谢谢了

39楼: >>参与讨论
作者: jiayongli 于 2005-4-26 14:51:00 发布:
---------------------------------------------------------

-----------------------
呵呵,我的键盘是用时间才扫描,
呵呵,我的键盘是用时间才扫描,在需要键盘操作的程序地方,才调用,
思路是保存上次键盘值,如果本次和上次一样就说明没有按键按下,返回一个无效的键盘值即可,必须松开,相当于判键盘释放。


40楼: >>参与讨论
作者: yingzeziga 于 2005-4-30 14:31:00 发布:
--------------------------------------------------------------------------------
你做的程序要使用中断才合适,否则一直在扫描占用太多资源

41楼: >>参与讨论
作者: zhiwei 于 2005-4-30 18:39:00 发布:
--------------------------------------------------------------------------------
不要用延时去抖,
我的意见跟上面一位大侠相同,按键是一个慢过程,如果不是要求特别实时的话,可以每过10或20ms进行一次判断按键,进行函数,读状态,并执行相应状态的操作,执行完就跳出。也就是说一个完整的按键判断读取过程不是一次执行完毕的,也不需要用延时的方法来执行,因为延时会降低CPU的效率。如果系统有空闲timer就很容易达到,每执行一个状态的时间不会太长,所以可以放在ISR中。如果使用RTOS就更方便了,每次执行完之后延时一个systemtick再执行,按键状态变化图:

1读键值,(无按键,状态不变;有按键,键值->current,改状态为2)
2读键值,(无按键,返回状态1;有按键,current->last,键值->current,若current = last,键值有效,转状态3;不等,则键值无效,也转状态3)
3读键值,(有按键,状态不变;无按键,一次流程完成,转状态1;)

我以前写过程序,大致流程是这样,其实可以设置多个类型的键值缓冲区;可以有键合动作(键按下时就有效,输出键值);标准键过程(键抬起之后再输出键值),象鼠标一样,有些事件需要mouse down动作激活,有些事件需要mouse up动作激活。


42楼: >>参与讨论
作者: winterliu 于 2005-5-4 22:55:00 发布:
--------------------------------------------------------------------------------
唉 我也是刚学!!看不懂啊
呵呵


43楼: >>参与讨论
作者: senior 于 2005-5-5 0:30:00 发布:
--------------------------------------------------------------------------------

强啊 顶下


44楼: >>参与讨论
作者: ray0812 于 2005-5-6 0:13:00 发布:
--------------------------------------------------------------------------------
提供一个流程图,希望对大家有帮助
要3个寄存器:KCNT, KHCNT, KEYCODE。 3个位:Keypressed, KeyHit, KeyHold。

定时扫描键盘。可以分别处理短时按键还是长时按键(HOLD),稍改还可以处理同键重复。


对不起,好象图片现在上不去,知道怎样贴

图片的请告知。






45楼: >>参与讨论
作者: fushaobing 于 2005-5-6 12:21:00 发布:
--------------------------------------------------------------------------------
图片这样贴:
1,上传图片
2,把图片的地址复制到“链接图片”栏


46楼: >>参与讨论
作者: wujian 于 2005-5-6 14:44:00 发布:
--------------------------------------------------------------------------------
你可以试试Proteus来仿真一下
这个软件还不错


47楼: >>参与讨论
作者: lijianpei 于 2005-5-6 19:57:00 发布:
--------------------------------------------------------------------------------
8279不错啊
有专门的8279片子啊,很不错的


48楼: >>参与讨论
作者: RI1982 于 2005-5-7 11:34:00 发布:
--------------------------------------------------------------------------------
用中断就好啦

49楼: >>参与讨论
作者: hailants 于 2005-5-7 12:38:00 发布:
--------------------------------------------------------------------------------
汇编语言编写的,定时扫描键盘并处理的程序。
汇编语言编写的,定时扫描键盘并处理的程序。
;;*********************************键盘扫描流程****************************
;;KEY_Y=0x0H
;; |
;;KEY_X=0xFH?--YES--KEY_HOLD=0?--NO--KEY_PRESS=1--KEY=KEY_OLD--RET
;; | |
;; NO YES--RET
;; |
;;KEY_X=KEY_X(反向扫描)
;; |
;;读KEY_Y,
;;KEY_NEW_H4=KEY_Y,
;;KEY_NEW_L4=KEY_X
;; |
;;KEY_NEW=KEY_OLD? --NO-- KEY_OLD=KEY_NEW
;; | |
;; YES KEY_HOLD=0
;; | |
;;KEY_HOLD++ RET
;; |
;;KEY_HOLD=KEY_DEALY? --NO-- RET
;; |
;; YES
;; |
;;KEY_PRESS=1
;;KEY=KEY_NEW
;;KEY_HOLD=KEY_LOOP (KEY_LOOP;; |
;; RET
;;***************************************************************************
;;***********************************键盘扫描子程序**************************
;;键盘端口: KEY_X0=P1.0, KEY_X1=P1.1, KEY_X2=P1.2, KEY_X3=P1.3
;; KEY_Y0=P1.4, KEY_Y1=P1.5, KEY_Y2=P1.6, KEY_Y3=P1.7
;;输入: 无
;;输出: KEY, KEY_PRESS(Bit)
;;内部寄存器: KEY_HOLD, KEY_OLD, KEY_NEW,
;;***************************************************************************
;;*********定义寄存器**************
KEY EQU 30H
KEY_PRESS EQU 08H
KEY_HOLD EQU 31H
KEY_OLD EQU 32H
KEY_NEW EQU 33H
KEY_DEALY EQU 10H
KEY_LOOP EQU 0AH
;;*********主程序******************
KEY_INT: PUSH ACC
PUSH PSW
MOV P1,#0FH
MOV A,P1
ANL A,#0FH
MOV KEY_NEW,A
CJNE A,#0FH,KEY_INT1
MOV A,KEY_HOLD
CJNE A,#00H,KEY_INT2
POP PSW
POP ACC
RET
KEY_INT1: MOV A,

KEY_NEW
ORL A,#0F0H
MOV P1,A
MOV A,P1
ANL A,#0F0H
ANL KEY_NEW,A
XRL KEY_NEW,#0FFH
MOV A,KEY_NEW
CJNE A,KEY_OLD,KEY_INT3
INC KEY_HOLD
MOV A,KEY_HOLD
CJNE A,#KEY_DEALY,KEY_INT4
SETB KEY_PRESS
MOV KEY,KEY_NEW
MOV KEY_HOLD,#KEY_LOOP
POP PSW
POP ACC
RET
KEY_INT2: SETB KEY_PRESS
MOV KEY,KEY_OLD
POP PSW
POP ACC
RET
KEY_INT3: MOV KEY_OLD,KEY_NEW
MOV KEY_HOLD,#00H
POP PSW
POP ACC
KEY_INT4: RET
END


50楼: >>参与讨论
作者: chess01 于 2005-5-8 20:44:00 发布:
--------------------------------------------------------------------------------
不用延时?
不用延时用什么办法消抖啊?


51楼: >>参与讨论
作者: 水星 于 2005-5-19 8:50:00 发布:
--------------------------------------------------------------------------------
楼主设计键盘程序的时候是不是考虑到了以下的问题?
1,按键检测有优先级是不是你的初衷?
2,我先前的按键没有松开的时候为什么不算是继续按键呢?
3,第一个按键不松开就不能检测到别的按键是不是你当初设计时候的要求?
4,由于优先级的原因,按下某键早于比之优先级高的键小于抗抖动时延是不是也不能够被检测出来?



52楼: >>参与讨论
作者: wysrb 于 2005-5-21 20:04:00 发布:
--------------------------------------------------------------------------------
偶现在用FPGA实现键盘扫描

53楼: >>参与讨论
作者: baipengwei 于 2005-5-21 21:44:00 发布:
--------------------------------------------------------------------------------
我编译过有错误哦,
编译过后提示如下,请指教;
ERROR C142 IN LINE 31 OF C:\WAVE\KEIL\C51\INC\REG51.H:'SFR': invalid base address

ERROR C142 IN LINE 32 OF C:\WAVE\KEIL\C51\INC\REG51.H:'SFR': invalid base address

ERROR C142 IN LINE 33 OF C:\WAVE\KEIL\C51\INC\REG51.H:'SFR': invalid base address

ERROR C142 IN LINE 34 OF C:\WAVE\KEIL\C51\INC\REG51.H:'SFR': invalid base address

ERROR C142 IN LINE 35 OF C:\WAVE\KEIL\C51\INC\REG51.H:'SFR': invalid base address

ERROR C142 IN LINE 36 OF C:\WAVE\KEIL\C51\INC\REG51.H:'SFR': invalid base address

ERROR C142 IN LINE 37 OF C:\WAVE\KEIL\C51\INC\REG51.H:'SFR': invalid base address

ERROR C142 IN LINE 38 OF C:\WAVE\KEIL\C51\INC\REG51.H:'SFR': invalid base address

ERROR C142 IN LINE 78 OF SHOW.C: unterminated comment


54楼: >>参与讨论

作者: cds828 于 2005-7-12 15:56:00 发布:
--------------------------------------------------------------------------------
各位朋友,小弟有一事相求!
我想做一个程序,当键一按下时即刻能执行程序,而不必等键松开,请帮帮忙!万分感谢啦。。。


55楼: >>参与讨论
作者: yhhdsp 于 2005-7-12 16:07:00 发布:
--------------------------------------------------------------------------------
中断或查询都可
中断或查询都可,查询的实时性低一些


56楼: >>参与讨论
作者: gxlww 于 2005-7-12 18:36:00 发布:
--------------------------------------------------------------------------------
re:
不明白,为什么不少人在等待键盘的释放!这样很耗时间的啊!效率太低了。


57楼: >>参与讨论
作者: yadog 于 2005-7-12 21:25:00 发布:
--------------------------------------------------------------------------------
re

58楼: >>参与讨论
作者: 混混 于 2008-4-17 17:37:48 发布:
--------------------------------------------------------------------------------
8279 怎么仿真?
参与讨论

昵称:
讨论内容: 字体 宋体 黑体 楷体 仿宋 隶书 幼圆 Arial Arial Black Arial Narrow Brush Script MT Century Gothic Comic Sans MS Courier Courier New MS Sans Serif Script System Times New Roman Verdana Wide Latin Wingdings 字号 一号 二号 三号 四号 五号 六号 七号


相关帖子
内部RAM 256 byte,变量全用xdata,为什么会溢出呢?多谢!
求教:at89x51.h跟REG51.C的区别
请高手帮忙,关于串口。
天,我的两块AD7730难倒都是坏的吗?
什么芯片可以代替AD0809?

免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入

--------------------------------------------------------------------------------


Copyright ? 1998-2006 https://www.360docs.net/doc/3017563104.html, 浙ICP证030469号

相关文档
最新文档