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

实验扩充 LED显示4*4键位值

代码功能概述

  1. 键盘扫描
    • 使用 KeyPort(定义为 P1)作为键盘输入端口。
    • 扫描 4x4 矩阵键盘,检测按键并返回按键编号(0~15)。
  2. 数码管显示
    • 根据按键编号,从 SegCode 数组中获取对应数码管段码,并通过 P2 输出显示。
  3. 延时
    • 使用简单的循环实现按键消抖。
      #include <reg51.h>
      #define uchar unsigned char
      #define uint unsigned int#define KeyPort P1
      #define INIT_DISPLAY 0x8C  // 初始显示状态// 数码管段码定义(0~15)
      uchar code SegCode[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90,0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
      // 列扫描码定义
      uchar code ColCode[] = {0xFE, 0xFD, 0xFB, 0xF7};// 延时函数
      void delay(uchar m) {uchar j;while (m--) {for (j = 120; j > 0; j--);}
      }// 键盘扫描函数
      uchar keyscan() {uchar temp, row, col, i;KeyPort = 0xF0;  // 设置行高电平,列低电平delay(10); temp = KeyPort & 0xF0;if (temp != 0xF0) {  // 检测到按键按下delay(10);       // 消抖temp = KeyPort & 0xF0;if (temp != 0xF0) {  // 再次确认按键按下// 确定行号switch (temp) {case 0x70: row = 3; break;  // 第一行case 0xB0: row = 2; break;  // 第二行case 0xD0: row = 1; break;  // 第三行case 0xE0: row = 0; break;  // 第四行default: return 16;          // 错误情况}// 确定列号for (i = 0; i < 4; i++) {KeyPort = 0xF0 | ColCode[i] & 0x0F;  // 确保高 4 位为 1,低 4 位为列扫描码temp = KeyPort & 0xF0;if (temp != 0xF0) {    // 检测到按键col = i;break;}} return (row * 4 + col);  // 返回按键编号	             	}     }return 16;  // 无按键按下
      }
      void main(void) {uchar keyNum;P2 = INIT_DISPLAY;  // 初始状态while (1) {keyNum = keyscan();if (keyNum < 16) {P2 = SegCode[keyNum];  // 显示按键编号对应的数码管段码} else {P2 = INIT_DISPLAY;  // 无按键按下时恢复初始状态}}}

http://www.xdnf.cn/news/38215.html

相关文章:

  • 航电春季赛(七)1010 网格计数
  • python(八)-数据类型转换
  • 【C++算法】66.栈_比较含退格的字符串
  • linux软件仓库
  • 【AIVS】OPENAIVS开源视频推理系统简介
  • 【内置函数】84个Python内置函数全整理
  • 嘉立创原理图、PCB常见问题
  • 8.5/Q1,Charls最新文章解读
  • JavaScript 变量命名规范
  • LeetCode 2563.统计公平数对的数目:排序 + 二分查找
  • 行为审计软件:企业合规与内部监控的数字守门人
  • 硬件工程师面试常见问题(3)
  • Linux下使用C++获取硬件信息
  • Spring Cloud CircuitBreaker服务熔断+隔离+限流
  • 【解决】torch引入过程中的ImportError: __nvJitLinkAddData_12_1, version libnvJitLink.so.12
  • 编程技能:调试04,逐语句命令
  • 08-DevOps-向Harbor上传自定义镜像
  • 【数字IC进阶】整数除3和模3的高效实现
  • 网络开发基础(游戏方向)之 概念名词
  • ESP32-S3上跑通红外重复码发送(7)
  • Linux cmp 命令使用详解
  • SQL注入绕过一些过滤的方式
  • 【数据结构】_栈和队列相关面试题
  • Photoshop安装与配置--简单攻略版
  • 数字化转型四步走:企业的进化密码
  • 新手记录--从零开始[labelme安装及使用]
  • springAi---智能客服
  • 微信、抖音、小红书emoji符号大全
  • Step文件无法编辑怎么办?
  • 案例驱动的 IT 团队管理:创新与突破之路:第六章 组织进化:从案例沉淀到管理体系-6.1 案例库建设方法论-6.1.1结构化案例采集模板