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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机开发板附带键盘检测源程序# R' p. a% U+ ^- @; y! ^  f3 d9 Y
! {* Y, A& u$ {9 y' H7 [7 \" c
- _, @/ `9 r0 n0 p+ t5 ^2 X) g
#include <reg51.h>
# w% F, L# t3 G( y#define uchar unsigned char
& @4 r0 ~' k$ H#define uint unsigned int8 T0 k4 H% {) u
uchar code table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,1 T  H. K0 ^0 M& f+ }- F
                     0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};1 B5 `& {/ Z" b+ G5 ~: N% z5 F9 q
void delay1ms(uchar x)
- [! T) u- K2 k( W& \" `{6 G  h# R& N! `! U
        uint i,j;
, V! ?9 T6 m% z8 P& a- Z1 [        for(i = x;i > 0;i --)
( P# k- Y4 T' {8 J                for(j = 110;j > 0;j --);$ c# W. u. \& h. F
}
, W" B) O! B' ^- o" u" s7 Uvoid display(uchar num)3 q4 O" }: X& p" q! d! u% s" B
{
( ?; F6 g; d  X3 w! g& u        P0 = ~table[num];
2 K3 d( F! w+ S+ @}
2 J$ t  S* x) w  h; ?! ~/*9 J1 O/ {7 p  ^
*键盘扫描程序
- _; G7 J9 {1 N$ ~*/4 z$ F; Q& v7 n; B- i( V7 z: A' h3 E
void keyscanf()
6 J' l, q- I$ X$ l- x+ x{! a$ h) U' T$ c
        uchar temp, key;
7 n: q% B8 Z% R        P2 = 0Xef;
  H% N1 Y) O3 x: T3 p! ~        temp = P2;
* G  H- _  x3 V6 j        temp = temp & 0x0f;
8 j. S7 J0 {; Q: Z+ r1 ?        if(temp != 0x0f)
8 M$ ]" W2 ]! Y% l; S$ G& ]" t. Y/ ~        {
, o# R4 ~0 G3 {% a                delay1ms(5);//去抖动
) A! l+ R  q4 ?/ l                temp=P2;, }+ q7 f8 Q% h, M0 g) ?2 O6 D
                temp = temp & 0x0f;; P* e( M- g7 ?0 O5 |4 K' h
                if(temp != 0x0f)
/ V/ W/ g& F9 z& t( e                {8 W% _# u# h7 @8 C
                        temp = P2;' K# E5 N- t- y# j$ q3 U9 V. w: n
                        switch(temp)//此时按键已经定位到第一行了" b  G$ s4 g2 C, {7 N$ b
                        {
. g( L& K7 H' K* H. q1 m0 b" E                                case 0xe7: key = 0; break;//此时代表第一行的第一个按键按下,即11101110
2 N1 C/ I, }0 j& ]9 \( _                                case 0xeb: key = 1; break;+ J. }' L' V# f( {. e
                                case 0xed: key = 2; break;
% F7 |, d8 `9 I0 G8 H/ e  |  }                                case 0xee: key = 3; break;
1 b0 b/ k0 Q5 m! Y  h: l( v9 a                        }
9 F2 n! t: I! ^' F9 ]  t/ \                        while(temp != 0x0f)//按键松开
  b4 Y, c+ Y8 N                        {+ A0 G% ]9 Q$ F* {3 b! s! F
                                temp = P2;* {# z9 k0 w! Q$ \2 t/ E8 i/ Q+ ~
                                temp = temp & 0x0f;
/ g8 V0 X- m# E7 a' w7 R3 O                        }
- r; H% s3 ]. j! t+ z" s                        display(key);
3 D5 i( |8 e" Q% G0 R. x- v# \                }) h( E  N8 {3 P) {% ^% o% @) @0 q! f
        }. Z, ]$ Q1 e, u' p
        P2 = 0Xdf;
' N+ ?1 x" J0 l, O- r- W        temp = P2;
# u( e( J: D% R        temp = temp & 0x0f;
+ x: X% q* ~( f        if(temp != 0x0f)
+ X- r& x, p: `% @7 ^6 Z  ^        {5 J: l6 j% T  P/ |% F
                delay1ms(5);//去抖动# G" C1 v+ p0 ]( v2 K
                temp = P2;" S& c$ u$ K3 j2 R
                temp = temp & 0x0f;
' y! ~9 s! v6 ]+ a                if(temp != 0x0f)1 z- S9 ]5 Q6 ~6 r8 [6 I7 _
                {! N& q/ k- `3 r$ j
                        temp = P2;7 `" l$ A# w' E! N- e- H
                        switch(temp)//此时按键已经定位到第er行了8 N- I, l0 t* Y* j, f) Z7 {% X
                        {
' ~4 f4 D3 u1 r/ |0 Z                                case 0xd7: key = 4; break;//此时代表第一行的第一个按键按下,即11011110
9 D9 K2 Q* r- X) ^8 R                                case 0xdb: key = 5; break;2 ]" F7 e* |& V! ?8 k
                                case 0xdd: key = 6; break;
8 G- z  T# O9 }7 b3 o                                case 0xde: key = 7; break;
2 P) W$ C0 F# V5 ~- F6 A2 W. B9 h                        }
& a0 ~1 j6 |+ a4 ^% `# x3 z                        while(temp != 0x0f)//按键松开
% E0 u6 H1 D  N" M0 [& r                        {" O0 V$ A3 c" {# y
                                temp = P2;( r4 ]$ ]. q. Y$ w: i$ C
                                temp = temp & 0x0f;* q& w8 n+ ~0 r. Y
                        }9 P3 i) G# I1 g  {  C
                        display(key);
/ i0 |) ?  T7 t1 V5 a+ Y                }% `2 |6 d  U, @: t
        }, R) \' u3 z+ X6 E: R
        P2 = 0Xbf;: X3 M8 u5 Y7 v. v5 t; I
        temp = P2;% e5 a7 d' \  Z$ S9 w5 l  C
        temp = temp & 0x0f;
8 S) W: ^" W$ \4 m0 g4 o9 R        if(temp != 0x0f). d% @/ l  c+ }5 X9 t
        {! j- z1 h7 h/ s9 ]
                delay1ms(5);//去抖动0 t6 c; P6 w. [4 V% D6 |
                temp=P2;
0 E8 n8 r/ @. C4 \                temp = temp & 0x0f;# \) t, t8 ^1 c& r0 K( j( j) }. N
                if(temp != 0x0f)
/ m+ K5 q) F7 Y/ r& V5 }0 E                {. k8 O6 ?4 e: n- B$ R- s
                        temp = P2;
/ s; C6 z3 I0 c$ O0 u4 c8 V                        switch(temp)//此时按键已经定位到第san行了+ u% d8 Y# s* L6 [( D% W  ~
                        {
- q2 D2 H9 B" e7 ~( z                                case 0xb7: key = 8; break;//此时代表第一行的第一个按键按下,即10111110
8 Q0 X: {. L' B. l' K: G2 W                                case 0xbb: key = 9; break;
- R' d3 l3 B$ y9 b                                case 0xbd: key = 10; break;# c4 H/ e2 K2 q
                                case 0xbe: key = 11; break;  K' A5 c3 J$ O/ K) r
                        }  @. c* \) n: }' M
                        while(temp != 0x0f)//按键松开" N/ v5 K' p' Q
                        {
, y1 F; A8 k9 i. c3 l- {! N                                temp = P2;
( b# C& g, g" u( l# q: b1 W                                temp = temp & 0x0f;! w7 D" t, K  A; e4 ~, v& M
                        }, q5 O+ E; H) K6 K0 z
                        display(key);7 D3 f8 L1 ?5 g9 S: j
                }
% ^$ l- |( r) Q7 G: m& K        }
% N9 Q/ H3 _' i* C        P2 = 0X7f;
- ?) R2 Y; n( v        temp = P2;
5 h  w: Z' N# W& \- V        temp = temp & 0x0f;
0 h6 O+ u) P9 F; \0 |. n        if(temp != 0x0f)
0 n$ ]" K: e. i; A" x        {4 Z1 m1 i" b5 e' }# e: G
                delay1ms(5);//去抖动& y( _5 L  P4 H- o& i8 B+ o
                temp=P2;8 d( q6 `" W8 _1 a
                temp = temp & 0x0f;
" Y! W- T" E7 F3 y9 z                if(temp != 0x0f)
, F) \% i; K4 T" M                {1 @5 r; s/ p! R$ T7 |+ k
                        temp = P2;2 y4 z5 @9 \; t8 e2 L# v7 Z$ Z
                        switch(temp)//0 z' q& z# I2 ^5 j# p: G
                        {
+ P* i1 M# R5 Y0 e3 p6 n                                case 0x77: key = 12; break;//此时代表第一行的第一个按键按下,即011111101 {/ D4 Z& O5 v) d- {! e% I
                                case 0x7b: key = 13; break;, N6 I* y+ c# }7 W
                                case 0x7d: key = 14; break;
+ E* L( _$ d7 ]                                case 0x7f: key = 15; break;
9 n; T! Z7 j% t  g5 u                        }
6 J' M5 z* p  S! ?                        while(temp != 0x0f)//按键松开, e& m7 R% @8 `  R6 d2 S$ ~
                        {
# Q8 g. s& r$ {7 y1 \& m                                temp = P2;
; P( G2 M) Z6 Y0 L/ \% J7 `                                temp = temp & 0x0f;5 g% q+ \! {; N) b
                        }2 ]& t( B) _. z$ \1 O1 a/ ^
                        display(key);: o3 ^; z. R3 M+ `# Q( L
                }( l, N# w( n4 [( E; a" L5 B0 _
        }* E' s( N1 h* g" {& M* a1 j; o$ ]
}
/ D: a/ E  _; Pvoid main()& P0 X6 @4 C1 F( N7 {. G& [
{9 \. m" ~# h9 E  P7 }# H5 j5 S
        P0 = 0xff;. ?# B# I4 Q& L& i4 r
        while(1)
7 z/ u* O0 ?* U, \* F        {. p1 i# D! N4 u5 _
                keyscanf();- P  N0 y& T' n; ^! y5 N6 j0 K. o/ ^
        }3 |' a9 L& A) [; w
}" d1 u; X$ F0 N4 {' Y: f) f0 l9 R
游客,如果您要查看本帖隐藏内容请回复
  Y* a" d3 {- ~* V4 f9 W

4 z! N1 D) ^5 j" d# x8 ]/ L

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 16:02 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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