【STM32单片机】简易计算器设计
文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用STM32F103C8T6单片机控制器,使用动态数码管模块、矩阵按键、蜂鸣器模块等。
主要功能:
系统运行后,数码管默认显示0,输入对应的操作数进行四则运算,支持最大8位显示,支持显示小数点后2位数。
二、软件设计
/*
作者:嗨小易(QQ:3443792007)*///将整数各位取出存放数组
//num:转换的整数
//buf:转换后存储到数组内
//返回值:整数的长度
u8 int_to_array(u32 num,u8 buf[])
{u8 i=0;u8 tempbuf[SMG_SHOW_BITNUM];int j=0;u8 cnt=0;if(num!=0)//传入的数据不为0{while(num!=0){tempbuf[i]=num%10;//将各个位的数赋值于数组tempbuf[i]num/=10;//现在数组tempbuf[i]记录的是各个位上的数的反序i++;//i记录这个数是几位数 }for(j=i-1;j>=0;j--){buf[cnt++]=gsmg_code[tempbuf[j]]; } }else//传入的数据为0buf[cnt++]=gsmg_code[0]; return cnt;
}//计算结果并显示
void get_result_show(void)
{u8 smgbuf[SMG_SHOW_BITNUM];u8 bitnum=0;u8 key=0;u8 buf[3];//缓存显示小数的数据while(1){key=KEY_Matrix_Scan();if(key==14) //清除操作{sys_ctrl.equal=0;sys_ctrl.sign=0;sys_ctrl.curNum=0;sys_ctrl.preNum=0;sys_ctrl.dot=0;break;}//等号键、计算结果if(sys_ctrl.equal==SIGN_EQUAL){switch(sys_ctrl.sign){case SIGN_ADD: sys_ctrl.result=sys_ctrl.preNum+sys_ctrl.curNum;break;case SIGN_MIN: if(sys_ctrl.preNum<sys_ctrl.curNum)sys_ctrl.result=sys_ctrl.curNum-sys_ctrl.preNum;elsesys_ctrl.result=sys_ctrl.preNum-sys_ctrl.curNum;break;case SIGN_MUL: sys_ctrl.result=sys_ctrl.preNum*sys_ctrl.curNum;break;case SIGN_DIV: if(sys_ctrl.curNum!=0)sys_ctrl.result=(float)sys_ctrl.preNum/sys_ctrl.curNum;if(sys_ctrl.result!=(int)sys_ctrl.result)//有小数,保留小数后2位{sys_ctrl.result=sys_ctrl.result*100;sys_ctrl.dot=2;}break;}bitnum=int_to_array(sys_ctrl.result,smgbuf);if(sys_ctrl.dot)//有小数显示{if(sys_ctrl.result<10)//放大100倍结果小于10,比如0.01{buf[0]=0x3f|0x80;buf[1]=0x3f;buf[2]=smgbuf[0];SMG_Display(buf,SMG_SHOW_BITNUM-1-bitnum); }else if(sys_ctrl.result<100)//放大100倍结果小于100,比如0.12{buf[0]=0x3f|0x80;buf[1]=smgbuf[0];buf[2]=smgbuf[1];SMG_Display(buf,SMG_SHOW_BITNUM-bitnum); }else{smgbuf[bitnum-1-sys_ctrl.dot]|=0x80;SMG_Display(smgbuf,SMG_SHOW_BITNUM+1-bitnum); } }else //无小数显示 SMG_Display(smgbuf,SMG_SHOW_BITNUM+1-bitnum);sys_ctrl.sign=0; }else{sys_ctrl.equal=0;break;} }
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619


联系作者
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。
相关文章:
【STM32单片机】简易计算器设计
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器,使用动态数码管模块、矩阵按键、蜂鸣器模块等。 主要功能: 系统运行后,数码管默认显示0,输入对应的操作数进行四则运…...
【详解二叉树】
🌠作者:TheMythWS. 🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 目录 树形结构 概念 树的示意图 树的基本术语 树的表示 树的应用 二叉树(重点) 二叉树的定义 二叉树的五…...
【Amazon】在Amazon EKS集群中安装部署最小化KubeSphere容器平台
文章目录 一、准备工作二、部署 KubeSphere三、访问 KubeSphere 控制台四、安装Amazon EBS CSI 驱动程序4.1 集群IAM角色建立并赋予权限4.2 安装 Helm Kubernetes 包管理器4.3 安装Amazon EBS CSI 驱动程序 五、常见问题六、参考链接 一、准备工作 Kubernetes 版本必须为&…...
ubuntu20.04下安装标注工具CVAT
1 安装docker sudo apt-get update sudo apt-get --no-install-recommends install -y apt-transport-https ca-certificates \curl \gnupg-agent \software-properties-commoncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-r…...
pytest-pytest-html测试报告这样做,学完能涨薪3k
在 pytest 中提供了生成html格式测试报告的插件 pytest-html 安装 安装命令如下: pip install pytest-html使用 我们已经知道执行用例的两种方式,pytest.main()执行和命令行执行,而要使用pytest-html生成报告,只需要在执行时加…...
本地运行“李开复”的零一万物 34B 大模型
这篇文章,我们来聊聊如何本地运行最近争议颇多的,李开复带队的国产大模型:零一万物 34B。 写在前面 零一万物的模型争议有很多,不论是在海外的社交媒体平台,还是在国内的知乎和一种科技媒体上,不论是针对…...
Redis-Redis缓存高可用集群
1、Redis集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可…...
Django之admin页面样式定制(Simpleui)
好久不见,各位it朋友们! 本篇文章我将向各位介绍Django框架中admin后台页面样式定制的一个插件库,名为Simpleui。 一)简介 SimpleUI是一款简单易用的用户界面(UI)库,旨在帮助开发人员快速构建…...
TypeScript 中的type与interface
TypeScript 中的type与interface 对于 TypeScript,有两种定义类型的方法:type与interface。 人们常常想知道该使用哪一种,而答案并不是一刀切的。这确实取决于具体情况。有时,其中一种比另一种更好,但在许多情况下&a…...
【uniapp】uniapp开发小程序定制uni-collapse(折叠面板)
需求 最近在做小程序,有一个类似折叠面板的ui控件,效果大概是这样 代码 因为项目使用的是uniapp,所以打算去找uniapp的扩展组件,果然给我找到了这个叫uni-collapse的组件(链接:uni-collapse)…...
单片机学习7——定时器/计数器编程
#include<reg52.h>unsigned char a, num; sbit LED1 P1^0;void main() {num0;EA1;ET01;//IT00;//设置TMOD的工作模式TMOD0x01;//给定时器装初值,50000,50ms中断20次,就得到1sTH0(65536-50000)/256;TL0(65536-50000)%256;TR01; // 定时器/计数器启…...
OpenWrt Lan口上网设置
LAN口上网设置 连接上openwrt,我用的 倍控N5105,eth0,看到Openwrt的IP是10.0.0.1 在 网络 -> 网口配置 -> 设置好 WAN 口和 LAN 口 初次使用经常重置 openwrt 所以我设置的是 静态IP模式 - 网络 -> 防火墙 -> 常规设置 ->…...
监控同一局域网内其它主机上网访问信息
1.先取得网关IP 2.安装IPTABLES路由表 sudo apt-get install iptables 3.启用IP转发 sudo sysctl -p 查看配置是否生效 4.配置路由 iptables -t nat -A POSTROUTING -j MASQUERADE 配置成功后,使用sudo iptables-save查看...
DC cut 滤直流滤波器实现
在音频处理中,会无意中产生直流偏置,这个偏置如果通过功放去推喇叭,会对喇叭造成不可逆转的损坏,所以在实际应用中,会通过硬件(添加直流检测模块,如果有 使用继电器切断输出) 、软件(软件直流滤波算法)&…...
uni-app,nvue中text标签文本超出宽度不换行问题解决
复现:思路: 将text标签换为rich-text,并给rich-text增加换行的样式class类名解决:...
和鲸ModelWhale平台与海光人工智能加速卡系列完成适配认证,夯实 AI 应用核心底座
AIGC 浪潮席卷,以大模型为代表的人工智能发展呈现出技术创新快、应用渗透强、国际竞争激烈等特点。创新为本,落地为王,技术的快速发展与大规模训练需求的背后,是对平台化基础设施与 AI 算力的更高要求。在此全球 AI 产业竞争的风口…...
Flutter学习(四)如何取消listview的越界效果
背景 在flutter的开发过程中,ListView是很常见的一个组件,但是,由于ListView的某些自带的体验,导致不太好的用户体验。例如ListView中,滑动到顶部或者底部的时候,再次滑动,会有越界的效果&…...
system.setProperty导致的https血案
system.setProperty导致的https血案 现象排查思考建议 现象 系统外调签名服务突然无法使用,排查发起请求的服务正常,查看日志报recieve fatal alert: protocal_version, 当时大家没有深入研究代码,印象里最近没有动过服务,就网络…...
Python 测试框架 Pytest 的入门
简介 pytest 是一个功能强大而易于使用的 Python 测试框架。它提供了简单的语法和灵活的功能,用于编写和组织测试代码。 1、简单易用:pytest 的语法简洁明了,使得编写测试用例更加直观和易于理解。它使用 assert 语句来验证预期结果&#x…...
【开源】基于Vue.js的数据可视化的智慧河南大屏
项目编号: S 059 ,文末获取源码。 \color{red}{项目编号:S059,文末获取源码。} 项目编号:S059,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 …...
AMD Ryzen深度调试突破:5个实战场景掌握SMUDebugTool核心功能
AMD Ryzen深度调试突破:5个实战场景掌握SMUDebugTool核心功能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: htt…...
SAM 3手把手教学:用点、框、文字提示玩转图像分割
SAM 3手把手教学:用点、框、文字提示玩转图像分割 1. 认识SAM 3:新一代图像分割神器 1.1 什么是SAM 3? SAM 3(Segment Anything Model 3)是Facebook最新推出的图像分割模型,它能够通过简单的提示&#x…...
RexUniNLU零样本NLP系统应用场景:企业年报财务指标抽取与分析
RexUniNLU零样本NLP系统应用场景:企业年报财务指标抽取与分析 1. 引言:从海量年报中快速“读懂”关键信息 每年,上市公司都会发布厚厚的年度报告,动辄上百页。对于投资者、分析师和研究人员来说,要从这些海量文字中快…...
OBS多路推流插件:一键实现多平台同步直播的终极指南
OBS多路推流插件:一键实现多平台同步直播的终极指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否曾经为需要在多个直播平台同时推流而烦恼?手动切换平台…...
Sambert语音合成镜像实战:快速搭建智能客服语音播报系统
Sambert语音合成镜像实战:快速搭建智能客服语音播报系统 1. 业务场景与需求分析 在智能客服系统中,语音播报功能直接影响用户体验。传统解决方案通常面临三个核心痛点: 音质机械感强:拼接式语音合成缺乏自然流畅度情感表达单一…...
Qwen2.5-0.5B支持JSON输出?结构化响应部署实操手册
Qwen2.5-0.5B支持JSON输出?结构化响应部署实操手册 “5 亿参数,1 GB 显存,能跑 32 k 长文、29 种语言、JSON/代码/数学全包圆。” 看到这句话,你是不是觉得有点夸张?一个只有5亿参数的“小不点”模型,真的…...
Wan2.2-I2V-A14B开发环境配置:Windows系统下利用WSL2搭建Linux开发环境
Wan2.2-I2V-A14B开发环境配置:Windows系统下利用WSL2搭建Linux开发环境 1. 为什么选择WSL2进行开发 对于Windows系统下的开发者来说,WSL2(Windows Subsystem for Linux 2)提供了一个近乎完美的Linux开发环境解决方案。相比传统的…...
AI服务高并发低延迟落地难?揭秘3种经生产验证的AI原生后端设计模式(附Llama/Embedding/RAG实战拓扑图)
第一章:AI原生后端服务设计范式演进与核心挑战 2026奇点智能技术大会(https://ml-summit.org) 传统微服务架构在面对LLM推理调度、多模态流式响应、动态提示工程与实时上下文管理等需求时,暴露出显著的结构性失配。AI原生后端不再仅是“API封装层”&…...
CAN BLF包解析实战:从原始报文到可读数据的Python解码之旅
1. 初识CAN BLF文件:汽车电子的数据宝库 第一次拿到BLF文件时,我盯着那一堆十六进制数据直发懵。这就像拿到一本用外星文字写的日记,明明知道里面记录着重要信息,却完全看不懂内容。BLF文件其实是Vector公司CANoe工具录制的CAN总线…...
从果园到代码:手把手教你用YOLOv5+DeepSort实现猕猴桃自动计数(附避坑指南)
从果园到代码:手把手教你用YOLOv5DeepSort实现猕猴桃自动计数(附避坑指南) 盛夏的果园里,阳光透过茂密的枝叶洒在成串的猕猴桃上。果农老王正拿着记录本,一株株清点着今年的收成。"这活儿太费眼了,数着…...
