EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
- 独立式键盘实验设计: w) Z1 N7 q( k4 d, G2 U
使用AT89S52 单片机,设计一个具有8个按键的独立式键盘,每个按键对应一个发光二极管。功能要求:无键按下时,键盘输出全为“1”,发光二极管全部熄灭;有键按下时,其所对应发光二极管点亮。 - 实验原理
, l; f3 Y" D6 }, G, a$ Q
独立式键盘电路组成由单片机最小系统;/ F3 d6 h' F" j# K6 o5 A6 [
8个按键电路;8个LED电路。
W6 U/ |. r' _- N单片机I/O口引脚分配8个按键接P0口;按键一端接地;另一端接P0口引脚,并通过上拉电阻接+5V。! d0 `6 b: f' G5 V7 M
8个LED接P1口,LED采用共阳极接法。 独立式键盘电路设计时,每个按键的一端与P0口的一个引脚相连,另一端接地。 无键按下时,P0的8个I/O口均通过电阻接高电平,信息为“1” ,键盘输出全为“1”发光二极管全部熄灭。 有键按下,将使对应的I/O口通过该键接地,信息为“0” ,对应发光二极管点亮。 CPU可以通过检测P0的8个I/O口线哪个是“0”就可以识别是否有键按下,并能识别出是哪一个键按下。 - 实验过程2 Y. c4 [* O* I& L) ^
- 在keil软件中,新建项目,新建c语言独立式键盘文件,输入代码保存并编译,生成hex文件
8 e2 t0 q8 O w5 i6 r, `. g! i
代码如下:
$ z# ?8 g: R$ }1 I/ h8 S; s独立式键盘功能实现分析
9 s4 M+ N8 \/ Q& ^2 ]判断是否有按键按下3 O& W- E' s( n! {( Y9 l: j
while(x==0xff) //循环判断是否有键按下2 Q, G8 i! b" t5 |+ M( Q- Z: E
{
+ ?7 H7 J% n, T1 ]- ?9 W$ N7 l x=P0; //读键盘状态3 r; f. M' O/ @
}" O, R X4 s2 I
delay10ms(); //延时10ms去抖动 ^: p L/ u' S' m4 P: ]. J
x=P0; //再次读键盘状态" ^+ C1 \+ k( e& r* Z/ e
if(x==0xff) continue;//如果无键按下则认为是按' f: v" I# C# h. j/ E# k
//键抖动,重新扫描根据键值点亮对应的发光二极管; F o2 V. |0 t3 a+ j! [, B
switch(~x)
) P9 q8 U( E9 r$ X8 M6 V{9 g: b7 A5 x/ l) K7 x, @
case 0x01:P1=0xfe; break;//点亮第一个发光二极管4 Z8 R7 ?9 T- A' }* [. Q9 r- l8 n
case 0x02:P1=0xfd; break;//点亮第二个发光二极管
* V- X9 ?$ z( \) C: U+ Y case 0x04:P1=0xfb;break;//点亮第三个发光二极管. y" @, o, ?1 i/ c" H
case 0x08:P1=0xf7; break;//点亮第四个发光二极管
7 P% C3 i7 y7 e" O0 x case 0x10:P1=0xef; break;//点亮第五个发光二极管 n! y; I( c6 I' |/ o
case 0x20:P1=0xdf; break;//点亮第六个发光二极管
: S: X+ t: L$ A4 d! P8 }/ b case 0x40:P1=0xbf; break;//点亮第七个发光二极管
9 S, k+ S; B9 W+ R( z/ P$ U case 0x80:P1=0x7f; break;//点亮第八个发光二极管# i7 \ l8 Q' l3 c( L- M7 m$ x3 N
default:break;
. T* Y7 T: e9 W}
} } - 运行Proteus,新建“独立式键盘”设计文件,放置并编辑ST89C52、CRYSTAL、CAP、CAP-ELEC 、RES 、BUTTON 、LED-YELLOW等元器件.有键按下,其发光二极管点亮。
. K* R; X1 ^& m _! {4 }- _) o" x- }
程序要判断是否有2个或2个以上的键盘同时按下,以免键盘分析错误。 3 a6 G# q9 w6 A$ s
/ o# Y- [% C5 |0 k9 {: u* K( p- 实验总结9 J: F' _5 _2 `3 Y( z; _. \
给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID 的值是不相同的,所以单片机就很容易识别不同功能的身份了。 D1到D4发光二极管在每个时刻的闪烁的时间是受按键来控制,我们给D1到D4闪烁的时段,定义出不同的ID号,只要每次按下按键时,分别给出不同的ID号我们就能够完成上面的任务了。 , c0 I( B- N' K P; I
/ H$ a* C1 ^8 C6 }' _0 Y4 R6 I4 D3 |5 U9 ^& [8 V3 |1 {
) b- x3 i) L! a6 K7 J |