EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
- 独立式键盘实验设计! S a6 \' r! D7 P2 R$ L+ G* Q
使用AT89S52 单片机,设计一个具有8个按键的独立式键盘,每个按键对应一个发光二极管。功能要求:无键按下时,键盘输出全为“1”,发光二极管全部熄灭;有键按下时,其所对应发光二极管点亮。 - 实验原理
$ d% \/ Y1 ~0 r* ]! y: ?
独立式键盘电路组成由单片机最小系统;6 W- f0 o4 S1 m. r- ^
8个按键电路;8个LED电路。* n8 Z* z! |: n+ _
单片机I/O口引脚分配8个按键接P0口;按键一端接地;另一端接P0口引脚,并通过上拉电阻接+5V。: ^& k7 @3 l0 T
8个LED接P1口,LED采用共阳极接法。 独立式键盘电路设计时,每个按键的一端与P0口的一个引脚相连,另一端接地。 无键按下时,P0的8个I/O口均通过电阻接高电平,信息为“1” ,键盘输出全为“1”发光二极管全部熄灭。 有键按下,将使对应的I/O口通过该键接地,信息为“0” ,对应发光二极管点亮。 CPU可以通过检测P0的8个I/O口线哪个是“0”就可以识别是否有键按下,并能识别出是哪一个键按下。 - 实验过程+ H0 }7 n1 |3 [* D3 Q" X
- 在keil软件中,新建项目,新建c语言独立式键盘文件,输入代码保存并编译,生成hex文件' G1 G2 c! a& T# n
代码如下: " s& {' K( x- [- p
独立式键盘功能实现分析
0 {. i7 A( b; U$ @/ R& @& u: P8 }判断是否有按键按下4 b: p# o+ \. \
while(x==0xff) //循环判断是否有键按下
. g, h; z- S& U8 ~{
; ?4 R7 x' w' b% G. D5 c: g x=P0; //读键盘状态: W& c) R+ r2 b4 y; R8 V
}
3 |, S. F+ \; vdelay10ms(); //延时10ms去抖动, P# V. E4 W' _% i
x=P0; //再次读键盘状态' q8 Y- t g7 e+ ~4 i4 e
if(x==0xff) continue;//如果无键按下则认为是按
+ Y# ~+ ?) G: l$ v0 e8 v' b //键抖动,重新扫描根据键值点亮对应的发光二极管. s0 B s& ^: P+ m" O
switch(~x) ) v! n# M6 k7 I1 t/ P& P" _
{
* Q* G" d, ~6 b case 0x01:P1=0xfe; break;//点亮第一个发光二极管
0 X' e+ ?! h" s; u; B& P J case 0x02:P1=0xfd; break;//点亮第二个发光二极管
6 E7 e6 s+ [% |/ H case 0x04:P1=0xfb;break;//点亮第三个发光二极管8 v! Q# e/ N# c4 Z& ^8 k2 M; G
case 0x08:P1=0xf7; break;//点亮第四个发光二极管
2 w% J- W- L! d8 @* O, u' Y case 0x10:P1=0xef; break;//点亮第五个发光二极管
. B' G% R. u0 x f6 _ case 0x20:P1=0xdf; break;//点亮第六个发光二极管# N) r7 j$ }- b" i
case 0x40:P1=0xbf; break;//点亮第七个发光二极管
9 V2 _( H# b1 J9 L8 ~9 n# @& v& H& { case 0x80:P1=0x7f; break;//点亮第八个发光二极管5 w- ^4 w @( u
default:break;
. I/ J t9 T3 {: ~, g$ y* d} } } - 运行Proteus,新建“独立式键盘”设计文件,放置并编辑ST89C52、CRYSTAL、CAP、CAP-ELEC 、RES 、BUTTON 、LED-YELLOW等元器件.有键按下,其发光二极管点亮。9 T1 \5 G# q0 [5 R z
- 实验总结
; {1 r# q% p% n4 D6 S
程序要判断是否有2个或2个以上的键盘同时按下,以免键盘分析错误。
% y% `5 {2 ~! ?: y
, {8 N7 H- s6 f- E x! l; \- 实验总结0 k# G2 v1 q- w/ E& F+ i
给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID 的值是不相同的,所以单片机就很容易识别不同功能的身份了。 D1到D4发光二极管在每个时刻的闪烁的时间是受按键来控制,我们给D1到D4闪烁的时段,定义出不同的ID号,只要每次按下按键时,分别给出不同的ID号我们就能够完成上面的任务了。
5 v1 u! f/ L8 {- R
# ]5 ^% ^4 F/ e) G) Q
, i! }3 ?$ s H( G6 l, ?
; M8 p* m+ F/ ?' M7 g* r |