C51单片机矩阵键盘输入&数码管静态显示
创作时间:
作者:
@小白创作中心
C51单片机矩阵键盘输入&数码管静态显示
引用
CSDN
1.
https://m.blog.csdn.net/weixin_42411288/article/details/142202548
实验目的
学会矩阵键盘的检测,掌握数码管静态显示原理。
实验现象
依次按下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连接。
硬件电路
程序代码
#include <reg52.h>
//sbit beep=P2^3; //位定义蜂鸣器控制I/O
sbit dula=P2^6; //位定义数码管段选控制I/O
sbit wela=P2^7; //位定义数码管位选控制I/O
unsigned char x,temp,key;
unsigned char code table[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };
void delay(unsigned char x)
{
unsigned char i,j;
for(i=x;j>0;j--)
for(j=110;j>0;j--);
}
void LED_display(unsigned int num)
{
dula=1;
P0=table[num]; //发送显示的数值
dula=0;
P0=0xFF; //消影
wela=1;
P0=0xC0;
wela=0;
}
void Key_1H()
{
P3=0xfe; //给P3.0送低电平,其余为高电平(第一行)
temp=P3; //将P3口的数据读回来
temp=temp&0xf0; //把P3口的数据与11111110相与
if(temp!=0xf0) //如果有按键按下则一定不相等,进入下一步检测
{
delay(10); //延时去抖动
if(temp!=0xf0) //再次判断是否有按键按下
{
temp=P3; //判断有按键按下,读取P3口的数据
switch(temp) //根据p3口的数据,判断是第几列的按键按下
{
case 0xee: //如果P3数据等于0xee则说明是第一行第1列按键被按下1110 1110
key=0;
break;
case 0xde: //如果P3数据等于0xde则说明是第一行第2列按键被按下1101 1110
key=1;
break;
case 0xbe:
key=2; //1011 1110
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0) //检测按键是否被释放
{
temp=P3;
temp=temp&0xf0;
//beep=0; //蜂鸣器一直响
}
//beep=1; //关闭蜂鸣器
LED_display(key); //显示按键数值
P1=0xfe; //第2行亮2个灯
}
}
}
void Key_2H()
{
P3=0xfd; //给P3.0送低电平,其余为高电平(第一行)
temp=P3; //将P3口的数据读回来
temp=temp&0xf0; //把P3口的数据与11111110相与
if(temp!=0xf0) //如果有按键按下则一定不相等,进入下一步检测
{
delay(10); //延时去抖动
if(temp!=0xf0) //再次判断是否有按键按下
{
temp=P3; //判断有按键按下,读取P3口的数据
switch(temp) //根据p3口的数据,判断是第几列的按键按下
{
case 0xed: //如果P3数据等于0xee则说明是第一行第1列按键被按下
key=4;
break;
case 0xdd: //如果P3数据等于0xde则说明是第一行第2列按键被按下
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; //关闭蜂鸣器
LED_display(key); //显示按键数值
P1=0xfc; //第2行亮2个灯
}
}
}
void Key_3H()
{
P3=0xfb; //给P3.0送低电平,其余为高电平(第一行)
temp=P3; //将P3口的数据读回来
temp=temp&0xf0; //把P3口的数据与11111110相与
if(temp!=0xf0) //如果有按键按下则一定不相等,进入下一步检测
{
delay(10); //延时去抖动
if(temp!=0xf0) //再次判断是否有按键按下
{
temp=P3; //判断有按键按下,读取P3口的数据
switch(temp) //根据p3口的数据,判断是第几列的按键按下
{
case 0xeb: //如果P3数据等于0xee则说明是第一行第1列按键被按下
key=8;
break;
case 0xdb: //如果P3数据等于0xde则说明是第一行第2列按键被按下
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; //关闭蜂鸣器
LED_display(key); //显示按键数值
P1=0xf8; //第3行亮3个灯
}
}
}
void Key_4H()
{
P3=0xf7; //给P3.0送低电平,其余为高电平(第一行)
temp=P3; //将P3口的数据读回来
temp=temp&0xf0; //把P3口的数据与11111110相与
if(temp!=0xf0) //如果有按键按下则一定不相等,进入下一步检测
{
delay(10); //延时去抖动
if(temp!=0xf0) //再次判断是否有按键按下
{
temp=P3; //判断有按键按下,读取P3口的数据
switch(temp) //根据p3口的数据,判断是第几列的按键按下
{
case 0xe7: //如果P3数据等于0xee则说明是第一行第1列按键被按下
key=12;
break;
case 0xd7: //如果P3数据等于0xde则说明是第一行第2列按键被按下
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0) //检测按键是否被释放
{
temp=P3;
temp=temp&0xf0;
//beep=0; //蜂鸣器一直响
}
//beep=1; //关闭蜂鸣器
LED_display(key); //显示按键数值
P1=0xf0; //第2行亮2个灯
}
}
}
void main()
{
dula=0;
wela=0; //先关闭两个锁存器
while(1)
{
Key_1H();
Key_2H();
Key_3H();
Key_4H();
}
}
本文原文来自CSDN
热门推荐
长寿果是什么果?它有哪些健康益处?
深度揭秘:男子用AI中彩票真能中奖吗?
焯水,烹饪前不可或缺的一步!10种蔬菜再懒也不能省,别再忽略
盐酸利多卡因适应症有哪些
摄影中 为什么说UV、CPL、ND、渐变ND是必不可少的几种滤镜
感冒发烧该挂哪科?一般是这3科
全面解析:如何挑选适合家庭使用的高性价比激光打印机
从休闲到生态,探索城市公园设计的生态创新之路
如何有效删除Word文档中的空白页和多余页面技巧总结
探讨礼仪文化:朋友孩子升学送什么礼物好?10招教会你
如何查看Windows 10系统的版本号及内部版本号
酸菜鱼里用的是哪种鱼?你分得清吗?
2025年中国最顶级古玩鉴宝专家影响力最新前十名公布
野蒜、野蒜苗和野蒜葱的功效与作用及禁忌
如何将C语言代码复制到Arduino中
这些问题的答案,从女人的表情中就能看出来!
冷冻馒头怎么蒸才好吃?一文详解冷冻馒头的正确蒸法
毕业生自我鉴定如何体现个人优势和特长?
二战结束,英国租借的美国战机还有737架,美国命令:推入大海
咀嚼解压:科学揭示零食与压力缓解的奇妙联系
如何实现家庭软路由的家长控制
剑来的故事大致剧情主线是什么?深入解析这部奇幻巨著的脉络与魅力
斯坦福脑科学家:最佳学习方法与原理
鸡蛋价格何时会下跌?这种农产品市场的供需关系如何变化?
格列美脲降血糖的作用机制是什么
@找工作的朋友,这些求职陷阱需防范
构建专利壁垒:企业技术创新战略中的关键布局
格列齐特对血尿检的影响及注意事项
明起!西安往返上海可以坐国产大飞机C919了→
葫芦巴是什么?有什么作用和潜在风险?