找回密码
 注册
关于网站域名变更的通知
查看: 309|回复: 1
打印 上一主题 下一主题

单片机开发板附带键盘检测源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-4 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机开发板附带键盘检测源程序: \3 @, C; U* h" g, y4 J1 ^# j

8 V. }$ `0 p+ U# Y
8 E) \0 H) ^8 {
#include <reg51.h>
2 U7 l, q% b, ?# D#define uchar unsigned char. G, B" d2 v1 r% C5 b
#define uint unsigned int
1 l  J. p5 ]: Q) |, p: |5 o3 z3 juchar code table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
6 j% B  Y  T# a8 f' y& V                     0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};# z! w' c4 _# L9 ^
void delay1ms(uchar x)
. P2 W' r7 H1 w. Z{$ i' n2 [% e3 ^* e4 v  X2 \, S9 {8 X
        uint i,j;' S7 k% P. u) ^1 k* v+ m
        for(i = x;i > 0;i --)
. i  S4 U4 l& b                for(j = 110;j > 0;j --);4 b9 J" |$ w3 a3 ^
}/ K- K- y& Y% \1 j4 i- `" e
void display(uchar num)7 E+ L% e1 p, j1 E+ ]
{
6 o# a0 j: `( i* [5 }; b        P0 = ~table[num];3 @3 Q( s% n2 F5 L6 C& k
}6 B7 y$ u$ h& t7 f1 D- o1 `
/*
" H) P6 q& m3 [0 p: H+ s4 B% j( u1 l1 q*键盘扫描程序( c1 g& G" [5 }7 P
*/1 C3 [$ X7 R! J! M
void keyscanf()  i7 F4 t3 V6 n4 }9 J& j; K
{
/ m+ P- O) z6 V        uchar temp, key;: i  `8 F( V) ~+ J! p% y
        P2 = 0Xef;
0 V: Q  i4 B! Z6 P+ ?        temp = P2;. k; h# w0 L: e
        temp = temp & 0x0f;
- o1 h. {8 e" R6 d, N        if(temp != 0x0f)
/ c) ?0 V, {/ {: P! V( K        {& L9 A" |/ `: }  c) c- U) F
                delay1ms(5);//去抖动% e# O" F0 l" z5 {7 Y1 x
                temp=P2;7 q, F6 e7 S9 J1 s) \* I$ o' F
                temp = temp & 0x0f;% q) g& c7 C0 l* F# }8 B, \
                if(temp != 0x0f)
$ n' S1 C5 H$ i: a" _9 f                {
7 U/ M6 J9 d' B8 N8 O- m  p                        temp = P2;3 R7 H; P( w, y0 t: f
                        switch(temp)//此时按键已经定位到第一行了- K: I3 @! i# X) E
                        {: k  d  ~3 ~/ F% i- q. P7 ^  H8 d
                                case 0xe7: key = 0; break;//此时代表第一行的第一个按键按下,即111011107 K2 {: s$ L9 H/ N+ F, x2 m
                                case 0xeb: key = 1; break;9 H, w. W+ D- p; R* ~) c2 T8 ~
                                case 0xed: key = 2; break;
2 u: @/ r% W# T! A$ ?! M. d4 n0 d) X                                case 0xee: key = 3; break;. h" j0 c6 s2 c" f
                        }
0 T4 s: w" `" V- i9 v$ ?. b) M& q                        while(temp != 0x0f)//按键松开8 {; o- f) ~, U9 @. Z% [. U* I
                        {
6 ?0 `8 y! j5 G5 p1 j                                temp = P2;
. ]# i8 B* ]+ ]( z                                temp = temp & 0x0f;# _, r& w& ~7 k( f# V
                        }
6 o2 K* t% k3 l' ?: F2 O6 _                        display(key);
1 Y# m3 v* F  a. X2 R                }
/ g) z" `% X! Z: H- s' y0 w0 {; d        }! D! E: q7 Z$ c, I$ M
        P2 = 0Xdf;
3 Q+ G- J% C4 j$ A  {) _$ D        temp = P2;
: U6 E; B' |8 U        temp = temp & 0x0f;
. v4 ?) R, D5 T3 P8 o) x8 o        if(temp != 0x0f)
: \* |& x0 i& [1 D        {
- d6 e5 C; R# F3 J" B% z; `                delay1ms(5);//去抖动6 D8 [8 ?& `9 _) `+ E
                temp = P2;  ?* u% J8 ^& A9 X/ z; l
                temp = temp & 0x0f;
- s. O% p4 ~# \% p* I# H. ]( F                if(temp != 0x0f)
. p- L8 }" b0 C7 r& l8 L6 j                {/ a( P5 A, }* u6 I% `
                        temp = P2;
6 }8 X& n; W& O: K                        switch(temp)//此时按键已经定位到第er行了
( I; r6 i5 K) B" W: V/ \                        {
; D5 A1 h2 p5 y1 k. [+ d& ]; w  B                                case 0xd7: key = 4; break;//此时代表第一行的第一个按键按下,即110111102 h7 m  P6 _' z# k' v9 h
                                case 0xdb: key = 5; break;
8 G& a: H4 h# I& C" N. ^                                case 0xdd: key = 6; break;
5 C# {& C2 q, U2 e& n0 q                                case 0xde: key = 7; break;: h# i, R& k, M. h2 L9 f, Q
                        }" g1 y) K+ q- a/ V" ?
                        while(temp != 0x0f)//按键松开# a0 s6 v2 z7 x) Q  U+ V
                        {3 k+ t! q" B. F+ x# I
                                temp = P2;
) O1 A! U) {% I                                temp = temp & 0x0f;
/ i5 {+ `6 A, d) ~! Z6 f% p6 H2 p. O                        }5 U! ?2 O" G4 b1 Q! h
                        display(key);
% W4 y" m2 I7 Y4 p3 C                }
- M' R( Z- f. v4 @        }
5 |4 O. K6 ]; ~        P2 = 0Xbf;1 e" U+ S, m3 G; |" z2 c- z
        temp = P2;. j; }) a/ ^* U1 S
        temp = temp & 0x0f;
+ i2 c& h6 x- c1 a1 h9 k. v        if(temp != 0x0f)# _: g4 D; x3 I9 f5 o( M
        {
9 D- Y# ?! G( G( |                delay1ms(5);//去抖动: d  ]7 H- |6 R5 u: n& |- @( O
                temp=P2;
! Y! ~6 U3 }3 C+ M1 V                temp = temp & 0x0f;
. \* W1 _9 s1 }/ ^% h9 d0 H                if(temp != 0x0f)6 q: g0 C+ J/ r% J5 l! n3 B
                {
/ {7 p9 G. W/ |2 x( b9 Z                        temp = P2;
. X$ i9 A9 Y2 {! K2 I' z                        switch(temp)//此时按键已经定位到第san行了% j! ?$ u. ?- Y, j
                        {# W3 }8 h0 d) h  X; M* ^* C8 c: `/ \
                                case 0xb7: key = 8; break;//此时代表第一行的第一个按键按下,即10111110
3 [) `7 [# g3 G; T                                case 0xbb: key = 9; break;0 _* R: j7 X4 ~( v  L
                                case 0xbd: key = 10; break;
* S6 T& P- n! o3 i9 c                                case 0xbe: key = 11; break;. P' x& a5 e: \6 U: s
                        }' z% ~7 q: n& j4 f* |% q
                        while(temp != 0x0f)//按键松开6 b! b: v) U; Q/ l
                        {8 V/ J# W; i9 g4 m
                                temp = P2;2 G' {( A: q6 e" C8 s
                                temp = temp & 0x0f;
& k$ a1 _2 \5 h1 q                        }
& H" @8 ^! C5 B7 {* {* D/ |                        display(key);0 M7 @* R- u& p: S* E, M; U& @* \$ k
                }* Q" d5 d4 J- b6 S0 {
        }
% U  b4 @6 v9 `: d$ E( X: A7 l        P2 = 0X7f;
: P+ x4 t3 ?1 X6 E1 z* t- z        temp = P2;
! A7 f6 P# K4 j& z+ \2 R) ?( h/ y        temp = temp & 0x0f;
3 n6 P0 V% M9 [2 H3 k        if(temp != 0x0f)
' s6 X$ Z% }& U! b$ M        {
+ Z$ ?: b1 J) z+ ~* L                delay1ms(5);//去抖动
9 M: n! R% s# f4 |% ]$ e4 p                temp=P2;3 K  E6 a) \- J0 ~1 w* G* G
                temp = temp & 0x0f;: T! }$ ]3 B& O$ l" [
                if(temp != 0x0f)3 u% c: M% U- E
                {
7 Y/ D2 o( b7 V: X0 H( i' x                        temp = P2;
, g  h+ g/ L7 H' Y4 E  P# {                        switch(temp)//0 X! H& `/ H- a/ J; Y, p4 Z. J
                        {
* U1 \  a/ [4 P) @                                case 0x77: key = 12; break;//此时代表第一行的第一个按键按下,即01111110  ~0 w" ]; y* E0 J* R
                                case 0x7b: key = 13; break;
9 \+ D* _5 C' z. N+ f9 f                                case 0x7d: key = 14; break;
' ]. b3 D% X) _                                case 0x7f: key = 15; break;6 ~$ }* r+ q& G1 C
                        }
3 M/ b" Y; P# ~) h% o* h7 u                        while(temp != 0x0f)//按键松开
) G0 h2 \6 C6 c/ \+ b! K                        {8 R" g+ ^' u8 w& w% _' e
                                temp = P2;
' V3 C. I* x. |  @/ R                                temp = temp & 0x0f;
$ |9 n# o- i, N                        }# l! T! Q: \) E$ ?9 `6 w
                        display(key);( v- T$ H/ m/ |! b! {) y: R8 C
                }
. A7 ?1 e7 C* D$ O( D# v! C        }
/ s9 [+ d* B" s6 W) b6 b}
, {% I% ?  R$ \3 Jvoid main()+ C4 W( a1 {* V& U# T
{
6 `) k$ b) e* |9 D        P0 = 0xff;8 v5 U8 o5 D" W% V6 S4 j2 {
        while(1)
( A/ \3 y" w2 [3 M) Y, Q/ a        {- O- T; n+ T: Y/ Z6 g  \6 o  @( w* c
                keyscanf();# W" _0 c" ~" M' ]) m6 E5 b) h3 h9 Z
        }
- v* t2 R, d7 r}5 j: ~: f! ^8 [; H1 B
游客,如果您要查看本帖隐藏内容请回复

1 b) U! F* E; G0 q+ O" k
# U, {: F, S4 s

该用户从未签到

2#
发表于 2019-1-4 18:15 | 只看该作者
好东东,谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-8 23:42 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表