EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
- 独立式键盘实验设计
* ~" r' |* C. L1 n5 [
使用AT89S52 单片机,设计一个具有8个按键的独立式键盘,每个按键对应一个发光二极管。功能要求:无键按下时,键盘输出全为“1”,发光二极管全部熄灭;有键按下时,其所对应发光二极管点亮。 - 实验原理
2 l) f0 x0 [) g4 i h$ x
独立式键盘电路组成由单片机最小系统;7 L# a/ f( r; a: i1 v* {3 c! v
8个按键电路;8个LED电路。5 i1 F' Z: ]5 S5 z, S8 P
单片机I/O口引脚分配8个按键接P0口;按键一端接地;另一端接P0口引脚,并通过上拉电阻接+5V。 e4 A! P L" x5 C1 F7 ^
8个LED接P1口,LED采用共阳极接法。 独立式键盘电路设计时,每个按键的一端与P0口的一个引脚相连,另一端接地。 无键按下时,P0的8个I/O口均通过电阻接高电平,信息为“1” ,键盘输出全为“1”发光二极管全部熄灭。 有键按下,将使对应的I/O口通过该键接地,信息为“0” ,对应发光二极管点亮。 CPU可以通过检测P0的8个I/O口线哪个是“0”就可以识别是否有键按下,并能识别出是哪一个键按下。 - 实验过程
0 T! G2 k7 V! p& W: Y9 H
- 在keil软件中,新建项目,新建c语言独立式键盘文件,输入代码保存并编译,生成hex文件
$ e' \% q. n+ v* p! K2 H- u' J$ s7 d
代码如下:
) O% G" {: Q0 b! k. K2 e w& Z0 Y3 `; I独立式键盘功能实现分析
7 ?2 _# O9 w- p; a判断是否有按键按下
+ ]4 s f9 w' a$ M1 R0 ywhile(x==0xff) //循环判断是否有键按下
9 G8 H) b3 I! I3 H: l{1 ?$ K, S# ~, E& p0 v
x=P0; //读键盘状态
$ t5 E+ N e) b' R; P$ Y}0 S" d+ |, ^- c+ M3 @
delay10ms(); //延时10ms去抖动0 C6 h9 p/ f/ k" [; F
x=P0; //再次读键盘状态- v% e" o% B* \( j, _0 O
if(x==0xff) continue;//如果无键按下则认为是按* X; u- x; G: D8 S
//键抖动,重新扫描根据键值点亮对应的发光二极管" v! g6 l6 t$ x4 p
switch(~x)
7 E; k; O; g3 v* @$ w- J( H{3 q( k: q. t( J8 N& h$ A
case 0x01:P1=0xfe; break;//点亮第一个发光二极管. T' M3 _" N& J
case 0x02:P1=0xfd; break;//点亮第二个发光二极管
& O0 f2 E& G6 g4 Z8 x+ V+ o0 X case 0x04:P1=0xfb;break;//点亮第三个发光二极管
4 P% q0 {/ E& Q% o9 z5 r4 \ case 0x08:P1=0xf7; break;//点亮第四个发光二极管
5 T! I, [- E- }" f0 N: @# ? case 0x10:P1=0xef; break;//点亮第五个发光二极管) Z; ^- z1 O$ u$ @9 f8 S. o
case 0x20:P1=0xdf; break;//点亮第六个发光二极管
2 c8 @9 `2 ]- K3 e case 0x40:P1=0xbf; break;//点亮第七个发光二极管! t" e# b! [+ `
case 0x80:P1=0x7f; break;//点亮第八个发光二极管# W0 P# a Q8 l+ S# ^# v: s& P
default:break;
* A& j e* @ R( V& [" x& E7 j) j}
} } - 运行Proteus,新建“独立式键盘”设计文件,放置并编辑ST89C52、CRYSTAL、CAP、CAP-ELEC 、RES 、BUTTON 、LED-YELLOW等元器件.有键按下,其发光二极管点亮。9 ~' k: `7 _' X/ q w8 g
- 实验总结2 W% I4 E6 c2 W, _" D" I9 r+ E
程序要判断是否有2个或2个以上的键盘同时按下,以免键盘分析错误。 4 t2 \" c- y# F* g
2 Z6 B* P2 \+ ^( }3 \4 L- 实验总结" {& w6 |# G. O+ N* X1 g" C
给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID 的值是不相同的,所以单片机就很容易识别不同功能的身份了。 D1到D4发光二极管在每个时刻的闪烁的时间是受按键来控制,我们给D1到D4闪烁的时段,定义出不同的ID号,只要每次按下按键时,分别给出不同的ID号我们就能够完成上面的任务了。 ) B( b2 I5 e: A* R
; P9 n3 B' y5 n
, b: I1 }( w0 |7 h9 x, U! D/ _3 D
|