实验五 基于单片机的矩阵键盘检测.doc_第1页
实验五 基于单片机的矩阵键盘检测.doc_第2页
实验五 基于单片机的矩阵键盘检测.doc_第3页
实验五 基于单片机的矩阵键盘检测.doc_第4页
实验五 基于单片机的矩阵键盘检测.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验五 矩阵键盘检测一、实验目的 学会矩阵键盘的检测,掌握数码管静态显示原理二、实验内容依次按下4*4 矩阵键盘上从第1到第20个键,同时在六位数码管上依次显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。开发板上数码管为共阴极。静态数码管显示原理: 一位数码管内一共有8个发光二极管,对共阴极来说其8个发光二极管的阴极在数码管内部全部接在一起,也就是“共阴”说法的来源,阳极是独立的,设计电路时一般把阴极接地,当从外部给任一个阳极加一个高电平时这个发光二极管就亮了,如果想要出一个8 字,并且把右下角的小数点也点亮的话,那可以给8个阳极全送高电平,想让数码管显示几就给相对应的发光二极管送高电平,因此在显示数字的时候首先做的就是给0-9 十个数字编好码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。一般的数码管每一段亮至少需要10个毫安的电流,而单片机的IO 口送不出如此大的电流,所以需要加数码管的驱动电路,可以用上拉电阻的方法,也可以使用专门的驱动芯片,本开发板使用的74HC573,其输出电流较大,足够点亮数码管。本开发板上的六位数码管中每个相同段号(段指a,b,c,d,e,f,g,h)全部是接在一起的,其中每一个位(阴极)是独立的,所以在做静态显示的时候所有的数码管只能显示相同的数字,当然可以控制哪几位显示,如果让它们显示不同的数字那就得给每一个数码管加一套驱动电路。下面给出本开发板共阴极数码管数字编码:矩阵键盘的四行分别与P3.0-P3.3 连接,四列分别与P3.4-P3.7 连接。三、实验电路:四、实验程序/4*4键盘检测程序,按下键后相应的代码显示在数码管上#includesbit beep=P23; /蜂鸣器接口sbit dula=P26; /控制数码管段选的锁存器锁存端sbit wela=P27; /控制数码管位选的锁存器锁存端unsigned char i=100;unsigned char j,k,temp,key;void delay(unsigned char i) /可自定义延时长短的延时函数 /当i=10 时大约为10 毫秒 for(j=i;j0;j-) for(k=125;k0;k-);unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/ 0-F 编码display(unsigned char num) / 显示子函数 P0=tablenum; /将第num 个显示编码送P0 口 dula=1; /一个下降沿将数据锁存 dula=0; P0=0xc0; /位选通全部的数码管 wela=1; /一个下降沿将数据锁存 wela=0;void main() dula=0; /先关闭两个锁存器 wela=0; while(1) /进入检测总循环 P3=0xfe; /给P3.0 送低电平,其余为高电平 temp=P3; /把P3 口数据读回来 temp=temp&0xf0; /把P3 口与11110000 相与 if(temp!=0xf0) /如果有键按下一定不相等,于是进入下一步检测 delay(10); /延时去抖动 if(temp!=0xf0) /再次判断是否有键按下 temp=P3; /判断为有,再次读P3 口数据 switch(temp) /因为刚才是将第一行置的低 /在这里再判断是第几列 case 0xee: /如果temp=0xee 则为第一行和第一列 key=0; /的交叉点,由此知道是矩阵键盘 break; /上的第一个键被按下,给key=0 case 0xde: /以后依此类推 key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; while(temp!=0xf0) /这段程序是检测按键是否被释放 temp=P3; /如果没有释放就一直等待并且 temp=temp&0xf0; beep=0; /蜂鸣器一直响 beep=1; /释放后关闭蜂鸣器 display(key); /显示按下相应键值的数据 P1=0xfe; /将第一个发光二极管点亮 /程序测试用 P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; display(key); P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; beep=0; beep=1; display(key); P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; while(tem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论