- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验五 基于单片机的矩阵键盘检测
实验五 矩阵键盘检测
一、实验目的
学会矩阵键盘的检测,掌握数码管静态显示原理
二、实验内容
依次按下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键盘检测程序,按下键后相应的代码显示在数码管上
#includereg51.h
sbit beep=P2^3; //蜂鸣器接口
sbit dula=P2^6; //控制数码管段选的锁存器锁存端
sbit wela=P2^7; //控制数码管位选的锁存器锁存端
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=table[num]; //将第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=temp0xf0; //把P3 口相与
if(temp!=0xf0) //如果有键按下一定不相等,于是进入下一步检测
{
delay(10); //延时去抖动
if(temp!=0xf0) //再次判断是否有键按下
{
temp=P3; //判断为有,再次读P3 口数据
switch(temp) //因为刚才是将第一行置的低
{
文档评论(0)