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
热门推荐
人工智能未来发展趋势中的伦理问题有哪些?
慢性肾炎恢复指南:8大生活细节助力病情改善
隔热保温行业的颠覆性创新:真空玻璃市场潜力有多大?
IC集成电路的EMC测试项目和测试设备
2024年夏季流行:15款短发鲍伯头外翘发型范本
劝你多吃芋头 理由1个就够了
春日里的油菜花人像这么拍就对了,这些技巧你一定不能错过
29岁浙江男子患胃癌,家人揭一年外卖超300次
砂拉越文化村:马来西亚多元文化的活态博物馆
这份高中老师给初二娃精选的历史书单, 收藏量极高!
你的眼睛也会长结石,但这事没什么可怕的
五一假期必吃美食:8座城市的地道美味
如何看待激素药?在皮肤科临床上激素药的使用如何?
乡村小镇外卖骑手的故事:互联网快车下的新生活与兼职收入
快手做短剧,比行业多走半步
电动汽车与混合动力汽车对环境的影响
空气炸锅和微波炉的区别
医用红外热像仪与其他影像检查相比,优势是什么?
中国古建筑装饰题材的社会功能与意义
6部影片,带你进入虚拟世界
Pandas高级数据处理:管道操作
肌肉拉伤怎么办?复原时间?多久会好?症状一次看懂
书海泛舟,塑就非凡自我——阅读的力量与边界的超越
打造地方特色文旅产品 满足游客多元化需求
音箱线与普通电线:从材料到应用的全面解析
复利计算:如何运用时间与持续性创造财富、健康与成长
西安秋季最佳徒步指南:探秘17条绝美历史与自然风光路线
【路由交换技术】ACL、NAT综合实验
记忆主深度解析与攻略
职业伤害保障为新就业形态“撑伞”