wordpress 表情 插件/北京seo优化公司
本文对矩阵按键的一个扩展,利用矩阵按键和动态数码管设计一个简易计算器。代码参考:https://blog.csdn.net/weixin_47060099/article/details/106664393
实现功能:使用矩阵按键,实现一个简易计算器,将计算数据及计算结果显示在数码管中。
矩阵按键设计如下图
代码实现:
/*实现功能:使用矩阵按键实现简易计算器[2023-12-07] zoya
*/
#include "reg52.h"typedef unsigned char u8;
typedef unsigned int u16;sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;#define GPIO_DIG P0 // 动态数码管
#define GPIO_KEY P1 // 矩阵按键u16 KeyValue; // 存放读取到的键值
u16 keyflag, i; // 用来判断按下的数字还是运算符或是清空键
u8 code smg[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00}; // 共阴极数码管u16 wei[8] = {0}; // 存放每一位数码管数字的数组// 延时函数,i=1延时10us
void delay(u16 i)
{while(i--);
}// 扫描显示动态数码管
void Display()
{LSA = 0; LSB = 0; LSC = 0; GPIO_DIG = smg[wei[7]]; delay(50); GPIO_DIG = 0x00; // 段选Y0,位选显示,延时,消隐LSA = 1; LSB = 0; LSC = 0; GPIO_DIG = smg[wei[6]]; delay(50); GPIO_DIG = 0x00; // 段选Y0,位选显示,延时,消隐LSA = 0; LSB = 1; LSC = 0; GPIO_DIG = smg[wei[5]]; delay(50); GPIO_DIG = 0x00; // 段选Y0,位选显示,延时,消隐LSA = 1; LSB = 1; LSC = 0; GPIO_DIG = smg[wei[4]]; delay(50); GPIO_DIG = 0x00; // 段选Y0,位选显示,延时,消隐LSA = 0; LSB = 0; LSC = 1; GPIO_DIG = smg[wei[3]]; delay(50); GPIO_DIG = 0x00; // 段选Y0,位选显示,延时,消隐LSA = 1; LSB = 0; LSC = 1; GPIO_DIG = smg[wei[2]]; delay(50); GPIO_DIG = 0x00; // 段选Y0,位选显示,延时,消隐LSA = 0; LSB = 1; LSC = 1; GPIO_DIG = smg[wei[1]]; delay(50); GPIO_DIG = 0x00; // 段选Y0,位选显示,延时,消隐LSA = 1; LSB = 1; LSC = 1; GPIO_DIG = smg[wei[0]]; delay(50); GPIO_DIG = 0x00; // 段选Y0,位选显示,延时,消隐
}// 检测有按键按下并读取键值
void KeyDown()
{u16 a = 0;GPIO_KEY = 0x0f; // 行全部为低电平,列全部为高电平if(0x0f != GPIO_KEY) // 读取按键是否按下{delay(1000); // 延时10ms进行消隐if(0x0f != GPIO_KEY){// 测试列GPIO_KEY = 0x0f;switch(GPIO_KEY) // 行列扫描法{case 0x07: KeyValue = 0; break;case 0x0b: KeyValue = 1; break;case 0x0d: KeyValue = 2; break;case 0x0e: KeyValue = 3; break;}// 测试行GPIO_KEY = 0xf0;switch(GPIO_KEY) // 行列扫描法{case 0x70: KeyValue = KeyValue; break;case 0xb0: KeyValue = KeyValue + 4; break;case 0xd0: KeyValue = KeyValue + 8; break;case 0xe0: KeyValue = KeyValue + 12; break;}if(KeyValue==0 || KeyValue==1 || KeyValue==2 || KeyValue==3 || KeyValue==4 || KeyValue==5|| KeyValue==6 || KeyValue==7 || KeyValue==8 || KeyValue==9){keyflag=1;}}while( (a < 50) && (GPIO_KEY != 0xf0) ) // 按键松手检测{delay(1000);a++;}}
}void main()
{u16 a=0, b=0, c=0;while(1){Display(); KeyDown(); // 键入第一个数字if(1 == keyflag){for(i=7;i>0;i--){wei[i] = wei[i-1]; // 键入一位数字向左移动一位}wei[0] = KeyValue;keyflag = 0;}else if(14 == KeyValue) // 清空显示{for(i=0;i<8;i++){wei[i] = 0;}Display();}else if(10 == KeyValue) // 加法运算{a = wei[0] + wei[1]*10 + wei[2]*100 + wei[3]*1000 +wei[4]*10000 + wei[5]*100000 + wei[6]*1000000 + wei[7]*10000000;for(i=0; i<8; i++){wei[i] = 0;}// 输入第二个数while(1){Display();KeyDown(); // 输入第二个数if(15 == KeyValue)break; // 当识别到等号时,停止输入if(1 == keyflag){for(i=7; i>0; i--){wei[i] = wei[i-1];}wei[0] = KeyValue;keyflag = 0;}}b = wei[0] + wei[1]*10 + wei[2]*100 + wei[3]*1000 +wei[4]*10000 + wei[5]*100000 + wei[6]*1000000 + wei[7]*10000000;c = a + b;wei[0] = c%10; // 计算C的各个位的数字wei[1] = c/10%10;wei[2] = c/100%10;wei[3] = c/1000%10;wei[4] = c/10000%10;wei[5] = c/100000%10;wei[6] = c/1000000%10;wei[7] = c/10000000%10;Display();}else if(11 == KeyValue) // 减法运算{a = wei[0] + wei[1]*10 + wei[2]*100 + wei[3]*1000 +wei[4]*10000 + wei[5]*100000 + wei[6]*1000000 + wei[7]*10000000;for(i=0; i<8; i++) // 清空数码管{wei[i] = 0;}// 输入第二个数while(1){Display();KeyDown(); // 输入第二个数if(15 == KeyValue)break; // 当识别到等号时,停止输入if(1 == keyflag){for(i=7; i>0; i--){wei[i] = wei[i-1];}wei[0] = KeyValue;keyflag = 0;}}b = wei[0] + wei[1]*10 + wei[2]*100 + wei[3]*1000 +wei[4]*10000 + wei[5]*100000 + wei[6]*1000000 + wei[7]*10000000;if(a > b){c = a - b;wei[0] = c%10; // 计算C的各个位的数字wei[1] = c/10%10;wei[2] = c/100%10;wei[3] = c/1000%10;wei[4] = c/10000%10;wei[5] = c/100000%10;wei[6] = c/1000000%10;wei[7] = c/10000000%10;}else if(a < b){u16 e = 0;c = b-a;wei[0] = c%10;wei[1] = c/10%10;if(wei[1] == 0){wei[1] = 16;e=1;}wei[2] = c/100%10;if(wei[2]==0 && e==0){wei[2] = 16;e=1;}wei[3] = c/1000%10;if(wei[3]==0 && e==0){wei[3] = 16;e=1;}wei[4] = c/10000%10;if(wei[4]==0 && e==0){wei[4] = 16;e=1;}wei[5] = c/100000%10;if(wei[5]==0 && e==0){wei[5] = 16;e=1;}wei[6] = c/1000000%10;if(wei[6]==0 && e==0){wei[6] = 16;e=1;}wei[7] = c/10000000%10;if(wei[7]==0 && e==0){wei[7] = 16;e=1;}}Display();}else if(12 == KeyValue) // 乘法运算{a = wei[0] + wei[1]*10 + wei[2]*100 + wei[3]*1000 +wei[4]*10000 + wei[5]*100000 + wei[6]*1000000 + wei[7]*10000000;for(i=0; i<8; i++){wei[i] = 0;}// 输入第二个数while(1){Display();KeyDown(); // 输入第二个数if(15 == KeyValue)break; // 当识别到等号时,停止输入if(1 == keyflag){for(i=7; i>0; i--){wei[i] = wei[i-1];}wei[0] = KeyValue;keyflag = 0;}}b = wei[0] + wei[1]*10 + wei[2]*100 + wei[3]*1000 +wei[4]*10000 + wei[5]*100000 + wei[6]*1000000 + wei[7]*10000000;c = a * b;wei[0] = c%10; // 计算C的各个位的数字wei[1] = c/10%10;wei[2] = c/100%10;wei[3] = c/1000%10;wei[4] = c/10000%10;wei[5] = c/100000%10;wei[6] = c/1000000%10;wei[7] = c/10000000%10;Display();}else if(13 == KeyValue) // 除法运算{a = wei[0] + wei[1]*10 + wei[2]*100 + wei[3]*1000 +wei[4]*10000 + wei[5]*100000 + wei[6]*1000000 + wei[7]*10000000;for(i=0; i<8; i++){wei[i] = 0;}// 输入第二个数while(1){Display();KeyDown(); // 输入第二个数if(15 == KeyValue)break; // 当识别到等号时,停止输入if(1 == keyflag){for(i=7; i>0; i--){wei[i] = wei[i-1];}wei[0] = KeyValue;keyflag = 0;}}b = wei[0] + wei[1]*10 + wei[2]*100 + wei[3]*1000 +wei[4]*10000 + wei[5]*100000 + wei[6]*1000000 + wei[7]*10000000;if(0 != b){c = a / b;wei[0] = c%10; // 计算C的各个位的数字wei[1] = c/10%10;wei[2] = c/100%10;wei[3] = c/1000%10;wei[4] = c/10000%10;wei[5] = c/100000%10;wei[6] = c/1000000%10;wei[7] = c/10000000%10;Display();}}}
}
仿真结果:
相关文章:

【51单片机系列】矩阵按键扩展实验
本文对矩阵按键的一个扩展,利用矩阵按键和动态数码管设计一个简易计算器。代码参考:https://blog.csdn.net/weixin_47060099/article/details/106664393 实现功能:使用矩阵按键,实现一个简易计算器,将计算数据及计算结…...

大数据云计算——Docker环境下部署Hadoop集群及运行集群案列
大数据云计算——Docker环境下部署Hadoop集群及运行集群案列 本文着重介绍了在Docker环境下部署Hadoop集群以及实际案例中的集群运行。首先,文章详细解释了Hadoop的基本概念和其在大数据处理中的重要性,以及为何选择在Docker环境下部署Hadoop集群。接着&…...

计算机网络链路层(期末、考研)
计算机网络总复习链接🔗 目录 组帧差错控制检错编码纠错编码 流量控制与可靠传输机制流量控制、可靠传输与滑动窗口机制单帧窗口与停止-等待协议多帧滑动窗口与后退N帧协议(GBN)多帧滑动窗口与选择重传协议 介质访问控制信道划分介质访问控制…...

洛谷 P8794 [蓝桥杯 2022 国 A] 环境治理
文章目录 [蓝桥杯 2022 国 A] 环境治理题目链接题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 思路解析CODE给点思考 [蓝桥杯 2022 国 A] 环境治理 题目链接 https://www.luogu.com.cn/problem/P8794 题目描述 LQ 国拥有 n n n 个城市,从 0 0 …...

力扣面试150题 | 买卖股票的最佳时期
力扣面试150题 | 买卖股票的最佳时期 题目描述解题思路代码实现 题目描述 121.买卖股票的最佳时期 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一…...

uniapp 之 图片 视频 文件上传
<view class"" style"padding: 24rpx 0"><text>相关资料 <text class"fs-26 color-666">(图片、视频、文档不超过9个)</text> </text><view class"flex align-center" style&…...

MIT线性代数笔记-第28讲-正定矩阵,最小值
目录 28.正定矩阵,最小值打赏 28.正定矩阵,最小值 由第 26 26 26讲的末尾可知在矩阵为实对称矩阵时,正定矩阵有以下四种判定方法(都是充要条件): 所有特征值都为正左上角所有 k k k阶子矩阵行列式都为正&…...

Python:五种算法RFO、GWO、DBO、HHO、SSA求解23个测试函数
一、五种算法介绍 (1)红狐优化算法(Red fox optimization,RFO) (2)灰狼优化算法(Grey Wolf Optimizer,GWO) (3)蜣螂优化算法(Dung beetle opti…...

如何参与开源项目
大家好,受卡哥邀请,和大家分享一下开源活动的相关经验。首先简要自我介绍一下,我目前在一所985研二在读,主要学习大数据方向,从去年开始参与开源活动近一年时间,也对多个Apache框架有所贡献。 由于学校或专…...

twitter开发如何避坑
此篇介绍在twitter开发过程中遇到的坑(尤其是费用的坑)。 一坑:免费接口少! 刚开始申请免费API使用的时候,twitter官方只会给你三个免费接口使用。 发twitter、删推文、查看用户信息。 这三个接口远远不够开发中使用…...

人工智能算法合集
人工智能(Artificial Intelligence,AI)作为当今世界最热门的技术领域之一,正日益改变着我们的生活方式、工作方式甚至整个社会结构。在人工智能领域中,算法是至关重要的一环,它们是实现人工智能技术应用的核…...

PythonStudio:一款国人写的python及窗口开发编辑IDE,可以替代pyqt designer等设计器了
本款软件只有十几兆,功能算是强大的,国人写的,很不错的python界面IDE.顶部有下载链接。下面有网盘下载链接,或者从官网直接下载。 目前产品免费,以后估计会有收费版本。主页链接:PythonStudio-硅量实验室 作…...

大模型应用_FastGPT
1 功能 整体功能,想解决什么问题 官方说明:FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!个人体会…...

elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理
一, 前言 本文主要内容是通过elasticsearch的api来进行一些集群的管理和信息查询工作,以及elasticsearch用户的增删改查和密码的重设以及重置如何操作 接上文:elasticsearch|大数据|elasticsearch低版本集群的部署安装和安全增强---密码设…...

Android多进程和跨进程通讯方式
前言 我们经常开发过程中经常会听到线程和进程,在讲述Android进程多进程前我打算先简单梳理一下这俩者。 了解什么是进程与线程 进程: 系统中正在运行的一个应用程序,某个程序一旦运行就是一个进程,是资源分配的最小单位&#…...

通过Jenkins将应用发布到K8s1.24.3
一、准备基础环境 cat >> /etc/hosts <<EOF 192.168.180.210 k8s-master 192.168.180.200 k8s-node1 192.168.180.190 k8s-node2 192.168.180.180 gitlab 192.168.180.170 jenkins 192.168.180.160 harbor EOF 配置主机名 hostnamectl set-hostname k8s-master &am…...

正则表达式入门与实践
文章目录 一、为什么要有正则二、正则表达式基础概念三、Pattern与Matcher类的使用(一)Pattern类的常用方法(二)Matcher类的常用方法四、常用正则规则及其含义(一)规范表示(二)数量表示(三)逻辑运算符五、String对正则表达式的支持六、实践演练(一)匹配给定文本中的…...

C++初阶(十六)优先级队列
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、priority_queue的介绍和使用1、priority_queue的介绍2、priority_queue的使用 二、priori…...

深入探索C语言中的二叉树:数据结构之旅
引言 在计算机科学领域,数据结构是基础中的基础。在众多数据结构中,二叉树因其在各种操作中的高效性而脱颖而出。二叉树是一种特殊的树形结构,每个节点最多有两个子节点:左子节点和右子节点。这种结构使得搜索、插入、删除等操作…...

如何发现服务器被入侵了,服务器被入侵了该如何处理?
作为现代社会的重要基础设施之一,服务器的安全性备受关注。服务器被侵入可能导致严重的数据泄露、系统瘫痪等问题,因此及时排查服务器是否被侵入,成为了保障信息安全的重要环节。小德将给大家介绍服务器是否被侵入的排查方案,并采…...

CSDN一键注释功能
这是什么牛逼哄哄的功能 看这里: 然后: 再试一个: 输出结果是?package yuyi03.interview;/*** ClassName: InterviewTest2* Package: yuyi03.interview* Description:** Author 雨翼轻尘* Create 2023/12/14 0014 0:08*/ publ…...

基于JAVA的校园电子商城系统论文
摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此校园购物信息的…...

直播传媒公司网站搭建作用如何
直播已然成为抖快等平台的主要生态之一,近些年主播也成为了一种新行业,相关的mcn机构直播传播公司等也时有开业,以旗下主播带来高盈利,而在实际运作中也有一些痛点难题: 1、机构宣传展示难 不少散主播往往会选择合作…...

数据结构与算法-动态规划-机器人达到指定位置方法数
机器人达到指定位置方法数 来自左程云老师书中的一道题 【题目】 假设有排成一行的 N 个位置,记为 1~N,N 一定大于或等于 2。开始时机器人在其中的 M 位置上(M 一定是 1~N 中的一个),机器人可以往左走或…...

K8S学习指南(2)-docker的基本使用
文章目录 引言安装 DockerDocker 基本概念1. 镜像(Images)示例:拉取并运行一个 Nginx 镜像 2. 容器(Containers)示例:查看运行中的容器 3. 仓库(Repository)示例:推送镜像…...

java 执行linux 命令
文章目录 前言一、linux命令执行二、使用步骤三、踩坑 前言 java 执行linux 命令; 本文模拟复制linux文件到指定文件夹后打zip包后返回zip名称,提供给下载接口下载zip; 一、linux命令执行 linux命令执行Process process Runtime.getRunti…...

ubuntu将本机的wifi网络通过网线分享给另一台机器(用于没有有线网络,重装系统后无wifi驱动或者另一台设备没有wifi网卡)
1.将两台机器通过网线连接 2.在pci ethernet中设置选择另一台机器的mac address,ipv4中选择share to other computer,另一台机器上设置为动态ip,连接上之后另一台机器即可上网。...

Docker + Jenkins + Gitee 自动化部署项目
1.简介 各位看官老爷,本文为Jenkins实战,注重实际过程,阅读完会有以下收获: 了解如何使用Docker安装Jenkins了解如何使用Jenkins部署maven项目了解如何使用JenkinsGitee实现自动化部署 2.Jenkins介绍 相信,正在读这…...

ChatGPT 应用开发(一)ChatGPT OpenAI API 免代理调用方式(通过 Cloudflare 的 AI Gateway)
前言 开发 ChatGPT 应用,我觉得最前置的点就是能使用 ChatGPT API 接口。首先我自己要能成功访问,这没问题,会魔法就可以本地调用。 那用户如何调用到我的应用 API 呢,我的理解是通过用户能访问到的中转服务器向 OpenAI 发起访问…...

【TC3xx】GETH
目录 一、RGMII 二、SMI接口 三、TC3xx MCAL 3.1 MCU 3.2 Port 3.3 DMA 3.4 中断配置 3.5 ETH 3.6 集成 一、RGMII TC3xx支持MII/RMII/RGMII三种以太网数据通信接口。其中RGMII经常用于MAC和MAC之间,或MAC与PHY之间的通信,RGMII的带宽可以是10M…...