找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2190|回复: 0
打印 上一主题 下一主题
收起左侧

我的单片机独立式键盘包含程序代码原理图

[复制链接]
跳转到指定楼层
楼主
  • 独立式键盘实验设计

使用AT89S52单片机,设计一个具有8个按键的独立式键盘,每个按键对应一个发光二极管。功能要求:无键按下时,键盘输出全为“1”,发光二极管全部熄灭;有键按下时,其所对应发光二极管点亮。
  • 实验原理

独立式键盘电路组成由单片机最小系统;
8个按键电路;8个LED电路。
单片机I/O口引脚分配8个按键接P0口;按键一端接地;另一端接P0口引脚,并通过上拉电阻接+5V。
8个LED接P1口,LED采用共阳极接法。
独立式键盘电路设计时,每个按键的一端与P0口的一个引脚相连,另一端接地。
无键按下时,P0的8个I/O口均通过电阻接高电平,信息为“1” ,键盘输出全为“1”发光二极管全部熄灭。
有键按下,将使对应的I/O口通过该键接地,信息为“0” ,对应发光二极管点亮。
CPU可以通过检测P0的8个I/O口线哪个是“0”就可以识别是否有键按下,并能识别出是哪一个键按下。
  • 实验过程

  • keil软件中,新建项目,新建c语言独立式键盘文件,输入代码保存并编译,生成hex文件

代码如下:

独立式键盘功能实现分析
判断是否有按键按下
while(x==0xff)                    //循环判断是否有键按下
{
     x=P0;      //读键盘状态
}
delay10ms();    //延时10ms去抖动
x=P0;        //再次读键盘状态
if(x==0xff) continue;//如果无键按下则认为是按
   //键抖动,重新扫描根据键值点亮对应的发光二极管
switch(~x)                  
{
  case 0x01:P1=0xfe; break;//点亮第一个发光二极管
  case 0x02:P1=0xfd; break;//点亮第二个发光二极管
  case 0x04:P1=0xfb;break;//点亮第三个发光二极管
  case 0x08:P1=0xf7; break;//点亮第四个发光二极管
  case 0x10:P1=0xef; break;//点亮第五个发光二极管
  case 0x20:P1=0xdf; break;//点亮第六个发光二极管
  case 0x40:P1=0xbf; break;//点亮第七个发光二极管
  case 0x80:P1=0x7f; break;//点亮第八个发光二极管
   default:break;
}
}
}
  • 运行Proteus,新建“独立式键盘”设计文件,放置并编辑ST89C52、CRYSTAL、CAP、CAP-ELEC 、RES 、BUTTON 、LED-YELLOW等元器件.有键按下,其发光二极管点亮。

  • 实验总结

程序要判断是否有2个或2个以上的键盘同时按下,以免键盘分析错误。
  • 实验总结

给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID 的值是不相同的,所以单片机就很容易识别不同功能的身份了。 D1到D4发光二极管在每个时刻的闪烁的时间是受按键来控制,我们给D1到D4闪烁的时段,定义出不同的ID号,只要每次按下按键时,分别给出不同的ID号我们就能够完成上面的任务了。

2.png (250.58 KB, 下载次数: 124)

2.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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