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

devtools/2025/3/19 1:58:24/

说明

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

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);//延时消除按键抖动}	
}

http://www.ppmy.cn/devtools/168211.html

相关文章

通向AGI的未来之路!首篇2D/视频/3D/4D统一生成框架全景综述(港科大中山等)

文章链接&#xff1a; https://arxiv.org/pdf/2503.04641 摘要 理解并复现现实世界是人工通用智能&#xff08;AGI&#xff09;研究中的一个关键挑战。为实现这一目标&#xff0c;许多现有方法&#xff08;例如世界模型&#xff09;旨在捕捉支配物理世界的基本原理&#xff0…

使用Ajax技术进行动态网页的爬虫(pycharm)

Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;技术在现代Web开发中广泛应用。 它允许网页在不重新加载整个页面的情况下&#xff0c;通过JavaScript与服务器进行异步通信&#xff0c;动态更新部分内容。这种技术对爬虫的功能和作用产生了显著影响&#xff0c;…

详细讲一下 Webpack 主要生命周期钩子流程(重难点)

1. Webpack 主要生命周期钩子流程 class LifecyclePlugin {apply(compiler) {// 1. 初始化阶段compiler.hooks.initialize.tap(LifecyclePlugin, () > {console.log(1. 初始化 Webpack);});// 2. 开始编译compiler.hooks.beforeRun.tap(LifecyclePlugin, () > {console.…

【后端】【django】抛弃 Django 自带用户管理后,能否使用 `simple-jwt`?

抛弃 Django 自带用户管理后&#xff0c;能否使用 simple-jwt&#xff1f; 一、结论 是的&#xff0c;即使抛弃了 Django 自带的用户管理&#xff08;AbstractUser 或 AbstractBaseUser&#xff09;&#xff0c;仍然可以使用 django-rest-framework-simplejwt&#xff08;简称…

Java中接口隔离原则简介和代码举例

简介&#xff1a; 接口隔离原则&#xff08;Interface Segregation Principle&#xff0c;ISP&#xff09;是面向对象设计SOLID原则中的“I”&#xff0c;其核心思想是&#xff1a; 定义 客户端不应被迫依赖它不使用的方法。即&#xff0c;一个类对另一个类的依赖应建立在最…

软考中级-数据库-4.4 文件管理与作业管理

主要考点 文件管理&#xff1a; 1、文件的结构和组织 2、文件的目录结构 3、文件存储空间的管理 4、作业调度算法 文件的结构和组织 • 文件的逻辑结构&#xff1a;从用户角度看到的文件组织形式就是文件的逻辑结构&#xff0c;但实际上这些文件在内存上的存放方式可能并不是这…

Hyperlane:轻量、高效、安全的 Rust Web 框架新选择

Hyperlane&#xff1a;轻量、高效、安全的 Rust Web 框架新选择 在 Web 开发的世界中&#xff0c;框架的选择往往决定了项目的效率与未来。Hyperlane&#xff0c;一款基于 Rust 语言打造的轻量级 Web 框架&#xff0c;正以其卓越的性能、简洁的设计和可靠的安全性&#xff0c;…

WEB安全--SQL注入--DNSlog外带

一、原理&#xff1a; 访问域名时&#xff0c;dns协议将我们访问的语句解析为ip地址&#xff0c;并将其记录在其日志中&#xff1b;在这个过程中&#xff0c;如果我们在语句中写入SQL注入的语句&#xff0c;那么在dns解析时会执行这些语句并通过concat将结果和域名一起记录在日…