EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
- 独立式键盘实验设计8 |3 p5 T$ J5 O9 r. w
使用AT89S52 单片机,设计一个具有8个按键的独立式键盘,每个按键对应一个发光二极管。功能要求:无键按下时,键盘输出全为“1”,发光二极管全部熄灭;有键按下时,其所对应发光二极管点亮。 独立式键盘电路组成由单片机最小系统;
: O4 i( I5 D! a: \6 o" k8个按键电路;8个LED电路。9 ~ f) h) S8 r* b4 p
单片机I/O口引脚分配8个按键接P0口;按键一端接地;另一端接P0口引脚,并通过上拉电阻接+5V。+ A$ z* o6 z( O! J% X& }
8个LED接P1口,LED采用共阳极接法。 独立式键盘电路设计时,每个按键的一端与P0口的一个引脚相连,另一端接地。 无键按下时,P0的8个I/O口均通过电阻接高电平,信息为“1” ,键盘输出全为“1”发光二极管全部熄灭。 有键按下,将使对应的I/O口通过该键接地,信息为“0” ,对应发光二极管点亮。 CPU可以通过检测P0的8个I/O口线哪个是“0”就可以识别是否有键按下,并能识别出是哪一个键按下。 - 实验过程, p% }& _: ~4 R8 D, x- D
- 在keil软件中,新建项目,新建c语言独立式键盘文件,输入代码保存并编译,生成hex文件
6 L2 Y" ]1 }0 U' p: b7 W
代码如下:
; l8 |6 k- J& \1 B独立式键盘功能实现分析6 X+ R! A$ V/ g
判断是否有按键按下/ s9 \# ^; v6 K% ~ S9 q
while(x==0xff) //循环判断是否有键按下
3 E6 ^; b; ^- @8 n' [5 h3 k{
) e; {* i' c4 D N1 \9 F! \ x=P0; //读键盘状态" m) X3 P0 U- A5 `( Y% m. i
}. K# z i- Q( |0 R
delay10ms(); //延时10ms去抖动
! } b# u3 D" k) v( X0 x! Y* S/ ]6 ox=P0; //再次读键盘状态
! ?! `& W( b$ w9 f9 h; Z* ^. @( o4 Jif(x==0xff) continue;//如果无键按下则认为是按 g7 b+ w' b' T8 W
//键抖动,重新扫描根据键值点亮对应的发光二极管
; U6 [2 w* D3 G4 ~% X: a( uswitch(~x) ( z; h* ?# G, M3 g/ t2 ~ i0 S
{
* p; s8 r' t0 e* o! ]& _- G case 0x01:P1=0xfe; break;//点亮第一个发光二极管
; [$ @$ _4 P' ~7 P! k2 \7 o; M case 0x02:P1=0xfd; break;//点亮第二个发光二极管
+ b, q: F* h: ~1 e case 0x04:P1=0xfb;break;//点亮第三个发光二极管/ F- C* G4 ?2 @8 h
case 0x08:P1=0xf7; break;//点亮第四个发光二极管
7 c& z- E2 J. h: I+ I, f0 L* y9 F case 0x10:P1=0xef; break;//点亮第五个发光二极管
3 ?, `; z I3 ^ case 0x20:P1=0xdf; break;//点亮第六个发光二极管
# W( ~3 k/ f1 r: W9 }7 O case 0x40:P1=0xbf; break;//点亮第七个发光二极管
4 Z; O$ e, J9 c* s; l- u case 0x80:P1=0x7f; break;//点亮第八个发光二极管
& Y% _2 F% @/ l/ g2 G- m default:break;
. W: M" g& _9 B8 T Y$ Z0 ^' y}
} } - 运行Proteus,新建“独立式键盘”设计文件,放置并编辑ST89C52、CRYSTAL、CAP、CAP-ELEC 、RES 、BUTTON 、LED-YELLOW等元器件.有键按下,其发光二极管点亮。7 r# A* W: N8 T7 O% z& Z4 S- k
- 实验总结
8 w+ I; e y/ L5 U! I k
程序要判断是否有2个或2个以上的键盘同时按下,以免键盘分析错误。 5 G8 n! B7 `0 v, b4 S# G
2 c( c/ P' L( r8 N7 O* B2 S- l# e- 实验总结
* w$ R& ? k d, [; P, X O4 H
给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID 的值是不相同的,所以单片机就很容易识别不同功能的身份了。 D1到D4发光二极管在每个时刻的闪烁的时间是受按键来控制,我们给D1到D4闪烁的时段,定义出不同的ID号,只要每次按下按键时,分别给出不同的ID号我们就能够完成上面的任务了。 % h! \ ~3 _' a/ f) q
! ~ d& X4 h' p# b) v4 l! Z
+ j ?1 Q1 d9 U) P( G+ y3 W( H4 g! U! s4 A% r+ B% V8 e; @, `7 S' Y. p
|