版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2/2基于单片机的计算器设计与实现摘要单片机体积小,成本低,被广泛应用于智能化管理等多数领域。随着单片机越来越低功耗CMOS化和微型单片化,基于单片机的计算器设计与实现也变得具有现实价值。本文应用单片机设计实现了简单的计算器。本设计基于STM32单片机以及C语言设计完成了计算器简单的加减乘除以及连续运算数据的基本功能;设计由硬件部分和软件部分组成。实物测试表明计算器功能正常,实现了基本要求。关键词:单片机计算器四则运算目录目录 3第一章绪论 41.1电子计算器的发展 41.2课题研究的背景和意义 4第二章 计算器的总体设计 5第三章 计算器硬件设计 63.1STM32F103C8T6单片机核心板模块 63.24×4键盘输入模块 73.3LCD1602显示输出模块 8第四章基于单片机的计算器软件实现 104.1keil软件介绍 104.2主程序设计 104.3键盘输入模块 124.4LCD显示模块 13第五章实物测试与总结 145.1实物制作过程 145.2实物调试 155.2.1测试显示 155.3总结 17参考文献 18第一章绪论1.1电子计算器的发展17世纪初的时候,机械计算器出现了。到了20世纪,集成电路技术有了飞速的进步,这时计算器技术的前进方向出现了两条道路:一条大路是通往计算机技术的方向,它以实现复杂的功能为目标,运行速度也追求极致;另外一条大路则是向着体积便捷,功能上面有着简单基本运算的方向开拓,这就是计算器技术[[]宋文强.12位RISC计算器设计[D].电子科技大学,2011.]。从不同的视角观看,我们也可以把计算机理解为功能多,体积大,结构复杂的计算器。当前集成电路的飞速进步,使得更加复杂的功能型[]宋文强.12位RISC计算器设计[D].电子科技大学,2011.20世纪中期计算器发展迅猛,大批量的从事计算器技术研究的公司出现了。1960年,桌面型电子计算器问世,它的设计中采用了晶体管这种当时刚出现的新技术。之后不少公司推出了新型桌面型计算器,它的使用的材料全部是晶体管,这种新型桌面型计算器与之前计算器相比较来说技术上面有很大的进步,但是我们可以了解到它价格的昂贵这个缺点十分的突出,与之前相比高出很多,体积也十分的大。上个世纪60年代,由于集成电路技术的出现,很多最前沿技术在计算器上的应用,使其价格贵、体积大的缺点缩小了。而集成电路这种技术的出现,集中更多的计算器功能在同一芯片上成为可能,所以人们把专注点转移至这种技术上。在1969年,一款大规模集成电路芯片MK-6010出现了,是由Mostek公司研发推出的,这款芯片的现世,使得单芯片计算器的研发价值被世人所看见,开启了新的历史篇章。单芯片的设计可以让总体的结构体积变小,计算器必要的晶体管全部使用集成电路技术,功耗变小,合成成本变小,使得计算器得到更广泛的发展。后来越来越多的公司从计算器中看到了商机,开始从事计算器的生产制造,在这段时间,TI(TexasInstrtunents)和INTEL两家公司对计算器技术发展起到了极大的推动作用。目前来说,国内对计算器芯片的开发设计并没有进入世界的前沿,市场上面的计算器一般只用来进行简单的运算,而国外的计算器功能已经十分的丰富,不仅可以进行一些复杂的运算,还可以进行编程、运行程序等。不得不说微处理技术的发展使计算机的功能越来越多元化,我们有理由相信未来计算器和计算机的功能差距将越来越小。1.2课题研究的背景和意义在国外,计算器在集成电路出现后,技术上出现了历史性的突破。经过几年的飞速成长,计算器实现的功能越来越多,己经不再是简单意义上面的辅助运算工具的定位了。现在功能比较强大的计算器还可以实现高级数学运算,矩阵运算,文件管理等复杂的非传统的功能。从不同角度来看,计算器的功能正在向着计算机发展。而国内的计算现在还不能达到与国际相当的水平,目前来说,并未掌握核心芯片关键技术,近几年越来越多的工程师把眼光聚集到核心技术上。通过对单片机的学习使用,对于单片机的开发有了一定的了解认知。对于单片机功能的掌握使用方面,我们可以利用单片机,把自动化技术运用到计算器的开发当中,这样就可以实现微型控制。同时我们可以把中央处理器、计时器、定时器和串口等多项功能集成在一起,这样可以减小体积,节省成本。当前单片机在当前各个行业当中被广泛使用,作为工科生也应积极钻研,了解单片机开发的现实价值。相关的科技创新人员也应该积极结合单片机独特的价值,深入开发出高效率的、控制能力优秀的、属于我们国家自主产权的高品质单片机核心控制芯片,努力提高我国工业化发展脚步,加快我国的自动化发展水平。通过学习,我们努力掌握单片机核心技术,为祖国的科技强国添砖加瓦。第二章 计算器的总体设计本设计总体实现目标为通过按键进行输入,实现简单数字的加减乘除运算,并显示出来。因此本文计算器总体设计应该包括硬件设计和软件设计。硬件部分实现外部的手动输入以及显示,软件部分进行算法的控制。硬件设计包括STM32核心单片机控制系统,4×4键盘和LCD显示屏构成,具体硬件模块设计详见第三章。软件设计是根据对应的硬件部分设计程序,包括主程序设计,键盘输入模块,LCD显示输出模块,具体软件模块设计详见第四章。本次计算器设计采用STM32F103C8T6核心模块作为设计的控制模块,控制电路具体包括电源电路、复位电路、晶振电路等[[]王岩,辛妍贝.基于单片机的多功能计算器的设计与实现电气工程自动化[J].电气传动自动化,2019,41(03):64-66.][[]王岩,辛妍贝.基于单片机的多功能计算器的设计与实现电气工程自动化[J].电气传动自动化,2019,41(03):64-66.[]吴昊.基于STM32的东海岛站主变冷却控制器的设计[D].吉林大学,2020.电源电路包括两部分的组成,一方面是供电电路,可以方便USB接入电源,输出5V的电压,另一部分是降压电路,可以把USB给出的5V电压调整为3.3V的电压。电路中使用了两种不同的电容,一种起着输入滤波电容的作用,使电压呈现直流的状态,一种起着输出滤波的作用,让输出的电压更加的稳定。图2-1电源电路复位电路主要的作用就是让系统在通电的瞬间,可以从初始的状态进行运转。STM32通常有好几种方式,比如电源复位,系统复位和后备域复位等等。本设计复位电路采用的是手动复位和上电自动复位相结合的方式,当接通电源开关时,系统自动进入复位的状态,在系统进行操作出现故障的时候或者执行期间想要复位,可以按下复位按钮,使电路复位,达到目的。图2-2复位电路晶振电路是为了给电路提供稳定的时钟信号。多数的单片机有内部时钟,但是内部时钟信号容易受外部的干扰,所以加入外部的晶振电路可以使系统能够拥有稳定的时钟信号。STM32的时钟信号有两种方式产生,一个是利用内部的方法,可以利用芯片本身自己的振荡电路,得到我们所需要的时钟信号,另外一种方式,就是之前所说的采用外部的方式。单片机需要时钟来驱动,如果没有时钟单片机不能稳定正常的工作,所以芯片外部接上晶振电路是很有必要的。如果单片机没有时钟来完成时钟驱动,那么它是没有办法正常无法工作的。图2-3晶振电路第三章 计算器硬件设计3.1STM32F103C8T6单片机核心板模块STM32系列处理器是ST公司生产的微控制器。选择这款单片机的原因是在于设计所追求是最大化的实现设计的功能以及相应拥有更加丰富的外部接口,这样在完成本次设计之后的学习中可以最大程度的利用所用芯片。同时有本次设计并没有追求最低功耗的缘故。本次设计使用的芯片是拥有最新稳定款的内核,在完成之前课上学习的C51系列单片机课程后,入手更加的容易,同时学习的内容也更加的深入,当前该样式单片机在应用方面有很多的借鉴例子,有十分突出的研究现实价值[[]王博轩.基于STM32的燃油取暖器控制电路研制[D].黑龙江大学,2020.[]王博轩.基于STM32的燃油取暖器控制电路研制[D].黑龙江大学,2020.下图所示STM32F103C8T6单片机核心板接口电路图:图3-1所用单片机核心板接口原理图3.24×4键盘输入模块在单片机的开发过程中,通常有外部按键的设计。本次计算器的设计实现没有采用现存的触摸屏输入设计,而是采用了较为经典传统的按键输入。本次计算器设计按键使用较多,为了减少对单片机接口的占用,提高单片机接口的利用率,我们将按键排列成矩阵的形式,也就是行列式键盘的形式。只需要占用8个IO口,可以设计16个按键的功能。矩阵键盘模块特点:体积小;节省空间;使用方便;单片机外扩键盘的上佳选择[[][]刘巧平,李平,周斌.基于STC89C51单片机的实用计算器设计[J].信息技术,2016(11):121-123+126.本设计的接口原理图如下图所示。图3-2接口电路原理图3.3LCD1602显示输出模块本设计采用的是字符型显示。显示器件输出信息的仪器是LCD1602。LCD1602有很多的优点,在体积功耗等方面深受广大电子爱好者的喜爱并被广泛应用。LCD1602可以同时显示2行16个字符[[][]郭占苗,吴沛.基于STC89C52单片机多功能计算器设计与仿真[J].微型电脑应用,2018,34(09):112-115.LCD1602采用的是标准的16脚,接口引脚如下图所示:图3-3-1接口说明图具体电路原理图如下图所示。图3-3-2电路原理图第四章基于单片机的计算器软件实现4.1keil软件介绍Keil是一款非常友好和强大的C语言软件开发系统,它提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合在一起。最新版的Keil5于2013年发布,经过对上一版本的优化,现在它的操作界面清晰直观,使用起来十分的轻松便捷,而且其功能很多,除具备keil等功能外,还新增了包管理器功能,支持LWIP。值得一提的是,Keil5的SWD下载速度是keil4的5倍,给使用者带来了良好的感受和全新的体验。4.2主程序设计首先需要进行初始化的显示,LCD第一行显示0,第二行不显示。然后解析输入的数据,将数据分解为运算数和运算符,如果是数字0-9,将字符串转换为整数。如果是加减乘除运算符,保存运算符。计算结果中,如果计算错误(除数为0)则返回error。计算优先级中先计算算式中的乘法和除法,再计算加减运算。输出时LCD第一行显示输入的计算式,第二行显示等于符号以及计算结果[[][]李广兴.基于STC12C5A60S2单片机的带时间和温度显示的多功能计算器设计[J].通讯世界,2015(20):235-237.完整程序详见附录1主程序设计。主程序中核心运算的逻辑,如下展示。intmain(void){ u8i,j; delay_init(); //延时函数初始化 NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600);//串口初始化 KEY_Init();//按键端口初始化 Lcd_Init(); //1602初始化 delay_ms(20); InitDisplay();//初始化显示内容 while(1) { KeyScan();//扫描按键 if(pos_dis<16){//如果1602第一行还没有输满 for(i=0;i<14;i++){//遍历除等于和清零之外的每一个按键 if(KeyIsPress(code_key[i])){//如果按键按下了 if(flag_input_new){//清除显示内容,重新输入 flag_input_new=0; InitDisplay();//初始化显示内容 pos_dis=0;//显示计数清零 } //如果上一次输入的是运算符或0,则替换为这一次输入的字符 if((dis_temp1[14]=='+'||dis_temp1[14]=='-'||dis_temp1[14]=='*'||dis_temp1[14]=='/')&&dis_temp1[15]=='0'&&i<10){ dis_temp1[15]=GetKeyChar(code_key[i]);//保存输入的字符 continue;//继续下一次for循环 }//**Allnotescanbedeletedandmodified**// if(pos_dis!=0){//如果已经输入了一个数据 if((dis_temp1[15]!='+'&&dis_temp1[15]!='-'&&dis_temp1[15]!='*'&&dis_temp1[15]!='/')||i<10){//如果上一次输入的不是运算符,或者本次输入的是数字0-9 for(j=0;j<15;j++){//将显示数据向左移动1位 dis_temp1[j]=dis_temp1[j+1]; } pos_dis++;//显示计数+1 } dis_temp1[15]=GetKeyChar(code_key[i]);//保存本次输入的字符 } elseif(i>0){//如果第一次输入的数据是数字0,则忽略输入 if(i>9){//如果第一次输入的是运算符,则默认将第一个运算数设置为0 dis_temp1[14]=GetKeyChar(code_key[0]);//将第一个运算数设置为0 } dis_temp1[15]=GetKeyChar(code_key[i]); //保存本次输入的字符 pos_dis++;//显示计数+1 } } } } if(KeyIsPress(KEY_ENTER)){//如果按下了等于=按键 flag_input_new=1;//限次按下按键则重新输入 pos_dis=0;//显示计数清零 ParseInput();//解析输入的字符串 if(Calculate()){//如果计算正确 sprintf(dis_temp2,"=%lld",result); } else{//算式不合法 sprintf(dis_temp2,"%s","Error"); } while(dis_temp2[15]==''||dis_temp2[15]==0){//如果第二行后面后空格 for(j=15;j>1;j--){//将第二行的显示数据向右移动,使第二行靠右显示 dis_temp2[j]=dis_temp2[j-1]; } dis_temp2[1]=''; } } Lcd_Puts(0,0,(unsignedchar*)dis_temp1); // 1602显示第一行 Lcd_Puts(0,1,(unsignedchar*)dis_temp2); // 1602显示第二行 }}4.3键盘输入模块一般来说,如果按键数量比较多的时候,我们常常会采用矩阵式键盘。这种键盘是由行以及列组成的,按键通常位于行线与列线交合的地方。可以很清晰的看出,在按键数量较多的设计中,行列式键盘会比一个一个独立的键盘节省口线。首先判断键盘有没有按键被按下,然后需要进行去除键的抖动的操作设计,当判断出可能有其他的键被按下时,软件需要延时一段时间再去判断键盘的按键状态,如果检测到依旧有按键是闭合的状态,那么我们就可以认为是键盘上有按键被按下了,不然我们就认为是按键抖动的状态。之后可以依照规则求出按下键的键号,求出之后判断闭合的按键有没有松开,当键松开时则将键号送入A中保存。单片机控制器将会根据按下键的键号以及按键的一次闭合作为一次键功能进行处理。完整程序详见附录2键盘输入模块设计。4.4LCD显示模块第一步开始初始化,第二步通过控制器调用主程序,利用单片机内部控制系统从输入接口得到数据,然后进行显示数据处理。显示模块程序由包括初始化程序和定时器中断程序。在显示数据RAM写入相应的ASCII码,显示模块程序可以把输入的计算式有效的显示出来。完整程序详见附录3键盘输入模块设计。第五章实物测试与总结5.1实物制作过程(1)购买器件:在确定实物计算器的功能之后,根据功能,确定实物所需要的模块,之后决定在网上进行购买。对比STM32几款芯片,最终确定了F103系列的芯片作为控制模块。由于功能中需要输入及输出模块,所以选用了传统的矩阵按键以及LCD1602显示屏。其余排针等器件是之前参加活动所剩下的,不需要再次购买,节省了成本。(2)确定接线方式:根据单片机的性能以及各引脚的作用,确定引脚的接线。输入模块采用了矩阵按键的形式,所以对应只需要8个单片机的I/O口,选用了单片机的PA0-PA7端口。输出模块LCD1602显示屏有16个引脚,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿化建设招标答疑
- 施工总承包协议
- 合同转让协议的范本解析
- 软件云平台开发与部署合同
- 彩钢屋面合同范例
- 树脂合成中的智能化控制技术考核试卷
- 毛坯房屋租赁合同模板
- 承揽矿石合同模板
- 材料走账协议合同模板
- 房屋中介委托合同范例
- 10以内加减法(直接打印,20篇)
- 第一性原理PPT精品文档
- 合作建房协议书【范本】(通用版)(精编版)
- 输液反应诊断及处理
- 2017苏教版四年级科学上册知识点归纳
- 基于PLC控制西门子S7200旋转式滤水器控制系统设计
- 有关护理纠纷的案例
- 房测之友BMF用户说明书
- 沪教牛津版四年级上册英语全册教案(含单元知识点总结)
- 循环系统pbl案例(教师版)
- 2020妊娠期甲亢、甲减如何管理专家解读最新指南
评论
0/150
提交评论