|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
求教各位大神,我编写了一个简单的独立按键防抖的子函数,程序如下,在定时中断中调用这个函数没有效果。然后我把这段程序直接写到中断函数中,它是起作用的。
8 \: S7 P9 n7 @' k% G) m1 j& ]bit INDRIVER(bit x): b/ }( i( ^7 r6 ^2 {
{- a1 y' d9 [/ C- x) L9 h
bit back;
% W' C6 N3 U% A$ ?; F! ]2 v bit y;+ M2 C% x* n; g0 r& Y
static uchar keybuf = 0xff;
" W/ q3 j0 i# f# p8 R keybuf = (keybuf<<1) | x; //扫描一次,左移输入一位
" L- I5 j- v4 W; g2 N2 ] if (keybuf == 0x00) //8次扫描均为0
: \* P' C; s) b d2 w$ j {
% Z- Y; b* g- K' d0 v$ p y = 0; //按键弹起状态$ v# j3 c! U5 ?) \7 k0 V! s
}
4 H$ j. {0 q( T6 _- T( H; o1 j z else if (keybuf==0xff)
( ?( X. J7 \: H5 d! r$ X8 k( Y {
$ S% Q! |( J8 ? y = 1; //按键按下状态
4 r# y) f. f/ p8 L' V! S. f/ }4 M }
4 n. _- I3 h3 J3 V" C8 h else
P, s6 L; R5 {4 A {}! v: P# u! I3 u; o& l8 `. ?
back = y;( a6 N/ t7 N* d4 y1 N9 k6 o
return back;
" {- c# m( t+ H4 p, t}
' n- z: u) {% ?1 z3 w
7 B8 F/ ]7 ?& U# |4 Z定时中断函数:. c& U' E( ]0 G, Y1 N
void T1_ISR(void) interrupt 3
% Z1 v, N8 p% V6 a/ v{, k0 ^2 [6 c9 D
TH1=0xF8;4 P1 l2 l1 f6 `
TL1=0xCD;
1 F: j2 u# c" d# `8 | Ms5_Time++;
4 n. y* q- A6 c3 Y1 X9 s/ R0 ^( S1 b if(20>Ms5_Time && Ms5_Time>0)
+ m, D- Q i' e% W% e3 J# q {
* Q# r- Z1 `6 g- V c8 e+ T) d2 c IN2=1; //关闭第二片245
& l) @$ G. ^3 ?; A2 G1 F4 Z2 g OUT_QS1=0; //关闭第一片573! Z# c0 }% m! c" O
OUT_QS2=0; //关闭第二片573! [; r) Q9 d. w7 b
IN1=0; // 选中第一片245" y) e0 h. c% e ?. W+ w
// P1=0XFF;
0 ]0 W" E" j$ F7 o _nop_(); " [5 M* w$ l" t6 E; [0 _
Input0=INDRIVER(Data0); //扫描按键状态1
/ |8 y" l' K1 C- ~9 e Input1=INDRIVER(Data1);/ M5 E1 @" G% H. i, I2 U: a
Input2=INDRIVER(Data2);
8 H/ s! e1 _% u& O Input3=INDRIVER(Data3);* Y, |. p9 @' g& B
Input4=INDRIVER(Data4);
# D# D) E' @4 a3 y' t, _ Input5=INDRIVER(Data5);
( u4 z# W$ w' c }
6 t8 c- ?1 X4 A6 {: J4 x7 c: d! `
/ [7 d7 S( g% J是不是因为在子函数中定义了静态变量,所以不能多次调用? 还是我的设计思路就是有问题的?把子函数直接写在中断中,定义多个静态变量,程序重复写多次,是可以运行的。因为硬件上有很多路输入,实在不想重复写防抖程序,求教各位大神,到底哪里出问题了。0 z2 @: s' c- N/ w: j
|
|