实验五 基于单片机的矩阵键盘检测

实验五 基于单片机的矩阵键盘检测

ID:39576171

大小:205.50 KB

页数:7页

时间:2019-07-06

实验五 基于单片机的矩阵键盘检测_第1页
实验五 基于单片机的矩阵键盘检测_第2页
实验五 基于单片机的矩阵键盘检测_第3页
实验五 基于单片机的矩阵键盘检测_第4页
实验五 基于单片机的矩阵键盘检测_第5页
资源描述:

《实验五 基于单片机的矩阵键盘检测》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验五矩阵键盘检测一、实验目的学会矩阵键盘的检测,掌握数码管静态显示原理二、实验内容依次按下4*4矩阵键盘上从第1到第20个键,同时在六位数码管上依次显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。开发板上数码管为共阴极。静态数码管显示原理:一位数码管内一共有8个发光二极管,对共阴极来说其8个发光二极管的阴极在数码管内部全部接在一起,也就是“共阴”说法的来源,阳极是独立的,设计电路时一般把阴极接地,当从外部给任一个阳极加一个高电平时这个发光二极管就亮了,如果想要出一个8字,并且把右下角的小数点

2、也点亮的话,那可以给8个阳极全送高电平,想让数码管显示几就给相对应的发光二极管送高电平,因此在显示数字的时候首先做的就是给0-9十个数字编好码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。一般的数码管每一段亮至少需要10个毫安的电流,而单片机的IO口送不出如此大的电流,所以需要加数码管的驱动电路,可以用上拉电阻的方法,也可以使用专门的驱动芯片,本开发板使用的74HC573,其输出电流较大,足够点亮数码管。本开发板上的六位数码管中每个相同段号(段指a,b,c,d,e,f,g,h)全部是接在一起的,其中每

3、一个位(阴极)是独立的,所以在做静态显示的时候所有的数码管只能显示相同的数字,当然可以控制哪几位显示,如果让它们显示不同的数字那就得给每一个数码管加一套驱动电路。下面给出本开发板共阴极数码管数字编码:矩阵键盘的四行分别与P3.0-P3.3连接,四列分别与P3.4-P3.7连接。三、实验电路:7四、实验程序//4*4键盘检测程序,按下键后相应的代码显示在数码管上#includesbitbeep=P2^3;//蜂鸣器接口sbitdula=P2^6;//控制数码管段选的锁存器锁存端sbitwela=P

4、2^7;//控制数码管位选的锁存器锁存端unsignedchari=100;unsignedcharj,k,temp,key;voiddelay(unsignedchari)//可自定义延时长短的延时函数{//当i=10时大约为10毫秒for(j=i;j>0;j--)for(k=125;k>0;k--);}unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}

5、;7//0-F编码display(unsignedcharnum)//显示子函数{P0=table[num];//将第num个显示编码送P0口dula=1;//一个下降沿将数据锁存dula=0;P0=0xc0;//位选通全部的数码管wela=1;//一个下降沿将数据锁存wela=0;}voidmain(){dula=0;//先关闭两个锁存器wela=0;while(1)//进入检测总循环{P3=0xfe;//给P3.0送低电平,其余为高电平temp=P3;//把P3口数据读回来temp=temp&0xf0;//把

6、P3口与11110000相与if(temp!=0xf0)//如果有键按下一定不相等,于是进入下一步检测{delay(10);//延时去抖动if(temp!=0xf0)//再次判断是否有键按下{temp=P3;//判断为有,再次读P3口数据switch(temp)//因为刚才是将第一行置的低{//在这里再判断是第几列case0xee://如果temp=0xee则为第一行和第一列key=0;//的交叉点,由此知道是矩阵键盘break;//上的第一个键被按下,给key=0case0xde://以后依此类推key=1;b

7、reak;case0xbe:key=2;break;7case0x7e: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){del

8、ay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xed:key=4;break;case0xdd:key=5;break;case0xbd:key=6;break;7case0x7d:key=7;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;}beep=1;di

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。