当前位置: 首页 > news >正文

C51 Proteus仿真实验17:数码管显示4×4键盘矩阵按键

说明

按下任意键时,数码管都会显示其键的序号,扫描程序首先判断按键发生在哪一列,然后根据所发生的行附加不同的值,从而得到按键的序号

Proteus仿真

数码管显示4x4键盘矩阵按键

注意:
K0、K4、K8、KC右边引脚连接的是P1.0
K1、K5、K9、KD右边引脚连接的是P1.1
K2、K6、KA、KE右边引脚连接的是P1.2
K3、K7、KB、KF右边引脚连接的是P1.3
K0、K1、K2、K3左边引脚连接的是P1.4
K4、K5、K6、K7左边引脚连接的是P1.5
K8、K9、KA、KB左边引脚连接的是P1.6
KC、KD、KE、KF左边引脚连接的是P1.7

使用到的元器件:
单片机:AT89C51
电容:CAP
极性电容:CAP-ELEC
电阻:RES、RESPACK-8
晶振:CRYSTAL
排阻:RX8
按键:BUTTON
数码管:7SEG-COM-CAT-GRN(共阴极,高电平点亮)

C51代码

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//数码管显示码表 0-9、A-F、所有段关闭
uchar code DSY_CODE[]=
{
 	0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00
};

//定义一个蜂鸣器引脚
sbit BEEP = P3^7;

//定义上次按键值和当前按键值,默认为16
uchar Pre_keyNo = 16,KeyNo = 16;

//延时
void DelayMs(uint ms)
{
	uchar i;
	while(ms--)
	{
		for(i=0;i<120;i++);
	}
}

//蜂鸣器
//无源蜂鸣器 需要 高低电平交替 形成振荡信号,才能发出声音。
//有源蜂鸣器 只需要单片机提供一个高电平,它内部有振荡电路自动发声
void Beep()
{
	uchar i;
	for(i=0;i<100;i++)
	{
	 	DelayMs(1);
		BEEP = ~BEEP;//一直取反切换高低电平,驱动蜂鸣器发出响声
	}
	BEEP = 1;
}

//按键扫描,通过行列得出当前按下的按键值
void Key_Scan()
{
	uchar Tmp;
	P1 = 0x0f;//设置低四位,监测是哪一列按下
	DelayMs(1);
	Tmp = P1 ^ 0x0f;//异或,相同为0,不同为1,得到列数                
	switch(Tmp)
	{
		case 1:KeyNo = 0;break;
		case 2:KeyNo = 1;break;
		case 4:KeyNo = 2;break;
		case 8:KeyNo = 3;break;
		default:KeyNo = 16;
	}
	P1 = 0xf0;//设置高四位,监测是哪一行按下
	Tmp = P1 >> 4 ^ 0x0f;//得到行数
	switch(Tmp)
	{
		case 1:KeyNo += 0;break;
		case 2:KeyNo += 4;break;
		case 4:KeyNo += 8;break;
		case 8:KeyNo += 12;
	}

}

void main()
{
	P0 = 0x00;//熄灭数码管,数码管高电平点亮
	while(1)
	{
		P1 = 0x0f;
		if(P1 != 0x0f)
			Key_Scan();
		if(Pre_keyNo != KeyNo)//判断按键是否发生改变
		{
			P0 = ~DSY_CODE[KeyNo];
			Beep();
			Pre_keyNo = KeyNo;
		}
		DelayMs(100);//延时消除按键抖动
	}	
}

相关文章:

  • CesiumforUE中Cesium3DTileset中高频使用的组件概述
  • 【最新】 ubuntu24安装 1panel 保姆级教程
  • Flutter PopScope对于iOS设置canPop为false无效问题
  • 网络安全信息收集[web子目录]:dirsearch子目录爆破全攻略以及爆破字典结合
  • 用python代码将excel中的数据批量写入Json中的某个字段,生成新的Json文件
  • 如何判断一个项目用的是哪个管理器
  • PhotoMill X for Mac v2.8.1 图片批量编辑工具 支持M、Intel芯片
  • TypeScript 高级类型 vs JavaScript:用“杂交水稻”理解类型编程
  • AWK 入门教程:强大的文本处理工具
  • 区块链知识点2
  • Blender学习方法与技巧
  • React19源码系列之FiberRoot节点和Fiber节点
  • Linux网络编程——UDP网络通信的简单实现
  • Android UI 组件系列(二):Button 进阶用法
  • 第五天 Labview数据记录(5.4 EXCEL文件读写)
  • 安装 oepn-webui报错 Cannot connect to host api.openai.com:443 ssl
  • 网络空间安全(31)安全巡检
  • 将 IPoIB 驱动修改为仅使用 RC 模式
  • X86 RouterOS 7.18 设置笔记七:不使用Upnp的映射方法
  • 《实战AI智能体》DeepSearcher 的架构设计
  • 因操纵乙烯价格再遭诉讼,科莱恩等四家企业被陶氏索赔60亿
  • 李强会见巴西总统卢拉
  • A股高开高走:沪指涨0.82%,创指涨2.63%,超4100股收涨
  • 宁德时代港股募资预计最高至50亿美元:90%将投向匈牙利项目
  • 这些网红果蔬正在收割你的钱包,营养师:吃了个寂寞
  • 巴基斯坦军方:印度导弹袭击巴首都附近空军基地