基于ARM的计算器设计

合集下载

基于ARM7及uClinux的电子智能计步器的设计_蒋伟

基于ARM7及uClinux的电子智能计步器的设计_蒋伟

文章编号:1009-2552(2012)11-0114-04中图分类号:TP212.9文献标识码:A基于ARM7及uClinux的电子智能计步器的设计蒋伟(无锡工艺职业技术学院,江苏无锡214206)摘要:为满足现代日益增长的健康减肥的需求,文中以ARM7为微处理器设计了一款嵌入式电子产品计步器,运用液晶图形化显示技术,大容量信息存储,测量和控制数据处理技术,网络通信技术等,加入嵌入式系统的应用,移植了uClinux实时操作系统,实现了仪表的智能化、信息化和网络化。

实践证明其满足了实用性和可靠性的要求。

关键词:uClinux;LPC2210;ADXL330;LCDDesign of electronic smart step counter based onARM7and uClinuxJIANG Wei(Wuxi Institute of Arts&Technology,Wuxi214206,Jiangsu Province,China)Abstract:In order to meet the requirement of the increasing health weight reduction.An embedded electronic smart step counter is designed with ARM7microprocessor.In this technologies of liquid crystal graphic display,large capacity storage and management of information,data processing of measurement and control,and network communication,are adopted.The uCLinux real-time operating system is transplanted,and the intelligent,informative and networked instrument is implemented.The practice shows it satisfies the require of practicality and reliability.Key words:uClinux;LPC2210;ADXL330;LCD0引言由于近代以来人们在生活中越来越依赖于现代化的自动化设备,导致人类身体活动的机会越来越少,随之而来的是肥胖、高血脂等生活病越来越多。

基于ARM的计算器设计课程设计

基于ARM的计算器设计课程设计

嵌入式系统应用课程设计题目基于ARM的计算器设计专业通信工程班级2012级3班学生姓名(学号)袁平20120343007学生姓名(学号)黄飞20120343030学生姓名(学号)组长袁平2015年06 月27日设计要求基本要求以友善之臂开发板及QT为平台,实现多功能计算器的设计能单独的进行简单的四则运算扩展部分能进行数的平方,开根号,及阶乘界面要求简洁美观,容易用户操作摘要电子计算器作为计算工具,为人们的生活带来了很多的方便与实惠。

随着科学技术的进步,尤其是电子工业技术的发展,计算器已经从先前的半导体技术实现到现在的广泛喜爱用高集成度芯片实现的多功能计算器,不管是白领办公室还是菜市场的小贩,计算器的出现让他们高效率的完成任务。

计算器扮演了一个重要的角色。

本设计是用C++编写的,基于Qt图形用户界面应用程序框架的计算器。

设计出的应用程序,实现了一定的计算功能。

关键字: Qt C++ 计算器第一章前言1.1设计背景计算器(calculator;counter)一般是指“电子计算器”,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑)。

计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。

1.2设计目的本程序是基于linux下的嵌入式开发,所用软件为QT Creator,程序虽然简单,但是通过本程序的设计,可以进一步了解嵌入式系统开发工具以及熟悉linux环境下的常用命令,为以后进入嵌入式领域打下一定的基础。

通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C++程序语言设计》和《高级程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程。

基于ARM的计算器设计开题报告

基于ARM的计算器设计开题报告

姓名学号题目基于ARM的计算器设计一.选题的目的及研究意义近几年,随着大规模集成电路的发展,各种便携式嵌入式设备具有十分广阔的市场前景。

在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上。

而触摸屏,由于其轻便、占用空间少、方便灵活等优点,特别是对于现在的图形化嵌入式界面操作来说更加方便快捷。

图形化界面是采用图形方式显示的计算机操作环境用户接口。

与早期计算机使用的命令行界面相比,图形界面对于用户来说更为简便易用。

GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用,通过窗口、菜单、按键等方式来方便地进行操作。

而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置,人机交互性能好等特点。

本课题是以基于ARM 计算器的设计为契机,来研究嵌入式系统和图形化界面设计的嵌入式应用开发过程。

二.本课题相关领域的现状及发展趋势此课题基于ARM的计算器是一个基于ARM处理器、嵌入式操作系统的图形界面嵌入式应用程序开发。

嵌入式系统最初的应用是基于单片机的,大多以可编程控制器的形式出现,具有监测、伺服、设备指示等功能,通常应用于各类工业控制和飞机、导弹等武器装备中,一般没有操作系统的支持,只能通过汇编语言对系统进行直接控制,运行结束后再清除内存。

20世纪80年代,随着微电子工艺水平的提高,IC制造商开始把嵌入式应用中所需要的微处理器、I/O接口、串行接口以及RAM、ROM等部件统统集成到一片VLSI 中,出现了大量高可靠、低功耗的嵌入式CPU(如Power PC等),各种简单的嵌入式操作系统开始出现并得到迅速发展。

此时的嵌入式操作系统虽然还比较简单,但已经初步具有了一定的兼容性和扩展性,内核精巧且效率高。

20世纪90年代,在分布控制、柔性制造、数字化通信和信息家电等巨大需求的牵引下,嵌入式系统进一步飞速发展,而面向实时信号处理算法的DSP产品则向着高速度、高精度、低功耗的方向发展。

基于单片机的简单计算器

基于单片机的简单计算器

基于单片机的简单计算器计算器是我们日常生活中常用的工具之一,用于进行各种数学运算。

在计算机科学领域,我们可以利用单片机来制作一个简单的计算器,以满足计算需求。

本文将介绍基于单片机的简单计算器的实现过程和相关原理。

一、项目概述我们将利用单片机的计算能力和显示功能来制作这个简单计算器。

用户可以通过按键来输入数字和运算符,计算器将会实时显示计算结果。

在本项目中,我们将使用8051系列单片机和LCD显示屏来实现这个计算器。

二、系统设计1.硬件设计本项目所需的硬件主要包括单片机、键盘和显示屏。

我们可以使用8051系列的单片机,例如AT89C52、键盘可以通过矩阵键盘来实现,显示屏采用16x2字符型LCD显示屏。

2.软件设计在单片机上实现计算器功能,我们需要编写相应的软件程序。

该程序主要包括以下几个部分:(1)初始化设置:设置单片机的IO口模式和状态,初始化LCD显示屏。

(2)键盘扫描:通过轮询方式检测键盘输入,获取用户按键信息。

(3)数字显示:将用户输入的数字显示在LCD屏幕上。

(4)运算处理:根据用户输入的数字和运算符进行相应的运算操作。

(5)结果显示:将运算结果显示在LCD屏幕上。

三、主要功能模块介绍1.初始化设置在初始化设置模块中,我们需要设置单片机的IO口模式和状态,将其中的一组IO口作为输入端口用于键盘扫描,另一组IO口作为输出端口用于LCD显示屏控制。

同时需要初始化LCD显示屏,使其处于工作状态。

2.键盘扫描键盘扫描模块需要使用IO口作为输入端口来检测键盘输入。

通过按下不同的按键,会在IO口上产生不同的信号。

我们可以使用轮询方式来检测IO口的状态,获取用户按键信息。

3.数字显示在数字显示模块中,我们需要将用户输入的数字显示在LCD屏幕上。

可以使用LCD显示屏的库函数来实现这个功能。

我们可以将用户输入的数字存储在内存中,并通过LCD库函数将其显示在屏幕上。

4.运算处理运算处理模块需要根据用户输入的数字和运算符进行相应的运算操作。

宁夏大学本科毕业设计基于单片机的简易计算器的设计

宁夏大学本科毕业设计基于单片机的简易计算器的设计

2017届本科毕业设计题目:基于单片机的简易计算器的设计类型:□√设计□ 论文学院:机械工程学院专业:机械工程及自动化年级:2013级学生学号:12013243606学生姓名:邱智信指导教师:梁云峰2017 年5 月14 日摘要单片机是采用超大规模集成电路技术,把一台计算机的主要部件集成在一个芯片上所构成的一种集成电路芯片,因此单片机被称为单片微型计算机。

因为单片机体积小,价格经济,可靠性高,适用领域宽广以及其本身的指令系统等优势,在各个行业,各个领域方面得到了广泛应用。

本设计就是依据单片机的原理来进行简单的计算器设计的。

本设计采用STC89C52RC单片机为核心,输入采用4*4矩阵键盘,采用LCD1602液晶显示屏显示操作过程及结果。

实现简单的四则运算。

采用C语言编程,keil uVision4和STC_ISP_V4.80软件向单片机开发板内部烧写程序,进行硬件调试。

关键字:单片机;矩阵键盘;LCD1602;计算器AbstractMicrocontroller is the use of ultra-large-scale integrated circuit technology, a computer's main components integrated in a chip formed by an integrated circuit chip, so the microcontroller is called single-chip microcomputer. Because of the small size of the microcontroller, the price economy, high reliability, wide field of application and its own command system and other advantages, in various industries, various fields have been widely used.The design is based on the principle of the microcontroller to carry out a simple calculator design. The design uses STC89C52RC microcontroller as the core, the input using 4 * 4 matrix keyboard, LCD1602 LCD display operation process and results. To achieve a simple four operations. Using C language programming, keil uVision4 and STC_ISP_V4.80 software to the microcontroller development board internal programming procedures for hardware debugging.Key words:Microcontroller; matrix keyboard; LCD1602; calculator目录第一章绪论 (1)1.1单片机的工作原理 (1)1.2本论文研究的目的和意义 (1)1.3计算器的发展简史 (2)第二章设计原理及要求 (3)2.1设计方案的确定 (3)2.2系统的设计方案 (3)2.3系统的设计要求 (3)2.3.1优化硬件电路 (4)2.3.2可靠性及抗干扰设计 (4)2.3.3灵活的功能扩展 (4)第三章硬件模块的设计 (5)3.1单片机STC89C52RC (5)3.1.1STC89C52RC单片机的特点 (5)3.1.2管脚说明 (6)3.1.3振荡器特性 (7)3.2矩阵键盘模块 (8)3.3LCD1602显示模块 (8)3.3.1显示电路 (9)3.3.2LCD1602主要技术参数 (10)3.3.3引脚功能说明 (10)3.4硬件接线图 (11)第四章软件设计及调试 (13)4.1程序设计 (13)4.1.1功能介绍 (13)4.1.2主模块功能的设计 (13)4.1.3键盘扫描模块程序的设计 (14)4.1.4运算模块程序的设计 (17)4.1.5显示模块程序的设计 (18)4.2编写程序 (19)4.2.1keil软件介绍 (19)4.2.2编写程序 (22)4.3程序调试 (35)4.3.1生成HEX文件 (35)4.3.2下载HEX至开发板进行调试 (36)第五章结论 (38)参考文献 (39)致谢 (40)第一章绪论1.1单片机的工作原理单片机由运算器、控制器、存储器、输入输出设备构成。

[arm]嵌入式系统计算器设计

[arm]嵌入式系统计算器设计

嵌入式系统设计报告题目:触摸式计算器设计姓名:姜涛学号:x05610117班级:05电子(11)班指导老师:沈军民一、课程任务本电子系统的功能是借助ARM 7教学实验箱,使用S3C44B0三星处理器能及触摸屏及LCD显示屏等硬件编写程序来实现计算器的设计。

实验要求:1、要用触摸屏来实现2、能够具有触摸按键选择功能,并且具有显示数字功能3、可以实现四则运算功能二、软件实现流程图三、主程序:#include "44b.h"#include"uhal.h"#include "option.h"#include"def.h"#include "tchScr.h"#include"myuart.h"#include "tchScr.h"#include "maro.h"#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihostingextern U32 LCDBuffer[240][320];U32 jcolor;int number =0;//记录数字int number1=0;char signal;int main(void){int i,j,k;int m,n;ARMTargetInit(); //开发版初始化LCD_Init(); //LCD初始化/* for (i=0;i<9;i++){ switch (i){ case 0: jcolor=0x00000000; //RGB均为0 黑色break;case 1: jcolor=0x000000e0; //R 红色break;case 2: jcolor=0x0000d0e0; //R and G 橙色break;case 3: jcolor=0x0000e0e0; //R and G 黄break;case 4: jcolor=0x0000e000; //G 绿色break;case 5: jcolor=0x00e0e000; //G B 青色break;case 6: jcolor=0x00e00000; //B 蓝色break;case 7: jcolor=0x00e000e0; //R and B 紫色break;case 8: jcolor=0x00e0e0e0; //RGB 白色break;}*/jsqInit();getNum(235,7,0);LCD_Refresh() ;while(1){TchScr_Test();Delay(1000);}return 0;}getNum(int x,int y,int num){int i,j;for(i=x;i<=x+8;i++)for(j=y;j<=y+14;j++){LCDBuffer[j][i]=0x00000000;switch(num){case 0:if(i==x||i==x+8) LCDBuffer[j][i]=0x0000e000;if(j==y||j==y+14) LCDBuffer[j][i]=0x0000e000;break;case 1:if(i==x+8) LCDBuffer[j][i]=0x0000e000;break;case 2:if(j==y||j==y+7||j==y+14) LCDBuffer[j][i]=0x0000e000;if((i==x&&j>=y+7)||(i==x+8&&j<=y+7))LCDBuffer[j][i]=0x0000e000;break;case 3:if(j==y||j==y+7||j==y+14) LCDBuffer[j][i]=0x0000e000;if(i==x+8) LCDBuffer[j][i]=0x0000e000;break;case 4: if(j==y+7) LCDBuffer[j][i]=0x0000e000;if(i==x&&j<=y+7) LCDBuffer[j][i]=0x0000e000;if(i==x+8) LCDBuffer[j][i]=0x0000e000;break;case 5:if(j==y||j==y+7||j==y+14) LCDBuffer[j][i]=0x0000e000;if((i==x&&j<=y+7)||(i==x+8&&j>=y+7))LCDBuffer[j][i]=0x0000e000;break;case 6:if(j==y||j==y+7||j==y+14)LCDBuffer[j][i]=0x0000e000;if(i==x||(i==x+8&&j>=y+7))LCDBuffer[j][i]=0x0000e000;break;case 7:if(i==x+8) LCDBuffer[j][i]=0x0000e000;if(j==y) LCDBuffer[j][i]=0x0000e000;break;case 8:if(j==y||j==y+7||j==y+14) LCDBuffer[j][i]=0x0000e000;if(i==x||i==x+8) LCDBuffer[j][i]=0x0000e000;break;case 9:if(j==y||j==y+7||j==y+14) LCDBuffer[j][i]=0x0000e000;if((i==x&&j<=y+7)||i==x+8)LCDBuffer[j][i]=0x0000e000;break;}}}getOp(){int i,j;for(i=235;i<=243;i++)for(j=7;j<21;j++){switch(signal){case '+':if(j==14||i==239) LCDBuffer[j][i]=0x00e00000;break;case '-':if(j==14) LCDBuffer[j][i]=0x00e00000;break;case'*':if(j+i==245||j-i==221)LCDBuffer[j][i]=0x00e00000;break;case '/':if(j-i==221)LCDBuffer[j][i]=0x00e00000;break;}}}jsqInit(){int k,i,j;for (k=0;k<260;k++)for (j=i*32;j<i*32+32;j++){LCDBuffer[2][k+10]= 0x00e00000;LCDBuffer[42][k+10]= 0x00e00000;LCDBuffer[215][105]= 0x00e00000;//'.'LCDBuffer[107][235]= 0x00e00000;//'/'LCDBuffer[117][235]= 0x00e00000;//'/'}for (k=0;k<10;k++)for (j=i*32;j<i*32+32;j++){LCDBuffer[57][k+100]= 0x00e00000;//‘2’的位置 LCDBuffer[67][k+100]= 0x00e00000;LCDBuffer[77][k+100]= 0x00e00000;LCDBuffer[57][k+165]= 0x00e00000;//‘3’的位置 LCDBuffer[67][k+165]= 0x00e00000;LCDBuffer[77][k+165]= 0x00e00000;LCDBuffer[112][k+35]= 0x00e00000;//‘4’的位置LCDBuffer[102][k+100]= 0x00e00000;//‘5’的位置 LCDBuffer[112][k+100]= 0x00e00000;LCDBuffer[122][k+100]= 0x00e00000;LCDBuffer[102][k+165]= 0x00e00000;//‘6’的位置 LCDBuffer[112][k+165]= 0x00e00000;LCDBuffer[122][k+165]= 0x00e00000;LCDBuffer[147][k+35]= 0x00e00000;//‘7’的位置LCDBuffer[147][k+100]= 0x00e00000;//‘8’的位置 LCDBuffer[157][k+100]= 0x00e00000;LCDBuffer[167][k+100]= 0x00e00000;LCDBuffer[147][k+165]= 0x00e00000;//‘9’的位置 LCDBuffer[157][k+165]= 0x00e00000;LCDBuffer[167][k+165]= 0x00e00000;LCDBuffer[192][k+35]= 0x00e00000;//‘0’的位置 LCDBuffer[212][k+35]= 0x00e00000;LCDBuffer[157][k+230]= 0x00e00000;//‘-’的位置LCDBuffer[202][k+165]= 0x00e00000;//‘+’的位置LCDBuffer[200][k+230]= 0x00e00000;//‘=’的位置 LCDBuffer[204][k+230]= 0x00e00000;LCDBuffer[112][k+230]= 0x00e00000;//'/'}for (k=0;k<60;k++)for (j=i*32;j<i*32+32;j++){LCDBuffer[47][k+10]= 0x00e00000;LCDBuffer[87][k+10]= 0x00e00000;LCDBuffer[47][k+75]= 0x00e00000;LCDBuffer[87][k+75]= 0x00e00000;LCDBuffer[47][k+140]= 0x00e00000;LCDBuffer[87][k+140]= 0x00e00000;LCDBuffer[47][k+205]= 0x00e00000;LCDBuffer[87][k+205]= 0x00e00000;LCDBuffer[92][k+10]= 0x00e00000; LCDBuffer[132][k+10]= 0x00e00000;LCDBuffer[92][k+75]= 0x00e00000; LCDBuffer[132][k+75]= 0x00e00000;LCDBuffer[92][k+140]= 0x00e00000; LCDBuffer[132][k+140]= 0x00e00000;LCDBuffer[92][k+205]= 0x00e00000; LCDBuffer[132][k+205]= 0x00e00000;LCDBuffer[137][k+10]= 0x00e00000; LCDBuffer[177][k+10]= 0x00e00000;LCDBuffer[137][k+75]= 0x00e00000; LCDBuffer[177][k+75]= 0x00e00000;LCDBuffer[137][k+140]= 0x00e00000; LCDBuffer[177][k+140]= 0x00e00000;LCDBuffer[137][k+205]= 0x00e00000; LCDBuffer[177][k+205]= 0x00e00000;LCDBuffer[182][k+10]= 0x00e00000; LCDBuffer[222][k+10]= 0x00e00000;LCDBuffer[182][k+75]= 0x00e00000; LCDBuffer[222][k+75]= 0x00e00000;LCDBuffer[182][k+140]= 0x00e00000; LCDBuffer[222][k+140]= 0x00e00000;LCDBuffer[182][k+205]= 0x00e00000; LCDBuffer[222][k+205]= 0x00e00000;}jcolor=0x00e00000;for (i=0;i<40;i++){if (i==80||i==160)jcolor<<=8;for (j=288;j<320;j++){LCDBuffer[i+2][10]=0x00e00000; LCDBuffer[i+2][270]=0x00e00000;LCDBuffer[i+47][10]=0x00e00000;LCDBuffer[i+47][70]=0x00e00000; LCDBuffer[i+47][75]=0x00e00000; LCDBuffer[i+47][135]=0x00e00000; LCDBuffer[i+47][140]=0x00e00000; LCDBuffer[i+47][200]=0x00e00000; LCDBuffer[i+47][205]=0x00e00000; LCDBuffer[i+47][265]=0x00e00000;LCDBuffer[i+92][10]=0x00e00000; LCDBuffer[i+92][70]=0x00e00000; LCDBuffer[i+92][75]=0x00e00000; LCDBuffer[i+92][135]=0x00e00000; LCDBuffer[i+92][140]=0x00e00000; LCDBuffer[i+92][200]=0x00e00000; LCDBuffer[i+92][205]=0x00e00000; LCDBuffer[i+92][265]=0x00e00000;LCDBuffer[i+137][10]=0x00e00000;LCDBuffer[i+137][70]=0x00e00000;LCDBuffer[i+137][75]=0x00e00000;LCDBuffer[i+137][135]=0x00e00000;LCDBuffer[i+137][140]=0x00e00000;LCDBuffer[i+137][200]=0x00e00000;LCDBuffer[i+137][205]=0x00e00000;LCDBuffer[i+137][265]=0x00e00000;LCDBuffer[i+182][10]=0x00e00000;LCDBuffer[i+182][70]=0x00e00000;LCDBuffer[i+182][75]=0x00e00000;LCDBuffer[i+182][135]=0x00e00000;LCDBuffer[i+182][140]=0x00e00000;LCDBuffer[i+182][200]=0x00e00000;LCDBuffer[i+182][205]=0x00e00000;LCDBuffer[i+182][265]=0x00e00000;}}jcolor=0x00e00000;for (i=0;i<10;i++){if (i==80||i==160)jcolor<<=8;for (j=288;j<320;j++){LCDBuffer[i+67][100]=0x00e00000;// ‘2’ LCDBuffer[i+57][110]=0x00e00000;LCDBuffer[i+102][35]=0x00e00000;// ‘4’LCDBuffer[i+102][100]=0x00e00000;// ‘5’LCDBuffer[i+112][110]=0x00e00000;LCDBuffer[i+112][175]=0x00e00000;// ‘6’LCDBuffer[i+147][165]=0x00e00000; // ‘9’LCDBuffer[i+197][170]=0x00e00000; // ‘+’}}jcolor=0x00e00000;for (i=0;i<20;i++){if (i==80||i==160)jcolor<<=8;for (j=288;j<320;j++){LCDBuffer[i+62][40]=0x00e00000;//‘1’LCDBuffer[i+57][175]=0x00e00000;//‘3’LCDBuffer[i+102][40]=0x00e00000;//‘4’LCDBuffer[i+102][165]=0x00e00000;//‘6’LCDBuffer[i+147][45]=0x00e00000;//‘7’LCDBuffer[i+147][100]=0x00e00000;//‘8’ LCDBuffer[i+147][110]=0x00e00000;LCDBuffer[i+147][175]=0x00e00000;//‘9’LCDBuffer[i+192][35]=0x00e00000;//‘0’ LCDBuffer[i+192][45]=0x00e00000;}}//return;// }}tchNum(int x,int y){int i;int x1,y1;x1=(x-5)/65;y1=(y-42)/45;if(number<99999999||(x1==1&&y1==3)||(x1==2&&y1==3)||x1==3){switch(x1){case 0:switch(y1){case 0:number=number*10+1;return;case 1:number=number*10+4;return;case 2:number=number*10+7;return;case 3:number=number*10;return;}case 1:switch(y1){case 0:number=number*10+2;return;case 1:number=number*10+5;return;case 2:number=number*10+8;return;case 3:signal='*';clear();getOp();number1=number;number=0;return;}case 2:switch(y1){case 0:number=number*10+3;return;case 1:number=number*10+6;return;case 2:number=number*10+9;return;case 3:signal='+';clear();getOp();number1=number;number=0;return;}case 3:switch(y1){case 0:number=0;number1=0;clear();getNum(235,7,0);return;case 1:signal='/';clear();getOp();number1=number;number=0;return;case 2:signal='-';clear();getOp(); number1=number;number=0;return;case 3:operation();return;}}}}showNum(){//tchNum();int ws=1;int n;n=number;Uart_Printf("$$$$$$$$number=%d",n);Uart_Printf("$$$$$$$$number=%d",number);if(number<0) {isFu();n=-n;}while(n!=0||n/10!=0){switch(ws){case 1:getNum(235,7,n%10);break;case 2:getNum(220,7,n%10);break;case 3:getNum(205,7,n%10);break;case 4:getNum(190,7,n%10);break;case 5:getNum(175,7,n%10);break;case 6:getNum(160,7,n%10);break;case 7:getNum(145,7,n%10);break;case 8:getNum(130,7,n%10);break;case 9:getNum(115,7,n%10);break;}ws++;n=n/10;}}clear(){int i,j;for(i=115;i<=235;i=i+15)getNum(i,7,10);for(i=100;i<=108;i++)for(j=7;j<21;j++){if(j==14) LCDBuffer[j][i]=0x00e0e0e0;break;}}operation(){switch(signal){case '+': number = number+number1;clear();break;case '-':number = number1-number;clear();break;case '*':number = number*number1;clear();break;case '/':number = number1/number;clear();break;}}isFu(){int i,j;for(i=100;i<=108;i++)for(j=7;j<21;j++){if(j==14) LCDBuffer[j][i]=0x00e0e0e0;break;}}四、实验结果显示五、实验心得1、在做计算器时,第一步关键是要将触摸屏校准,使用触摸屏实验程序,通过超级终端将坐标打印出来,从而去调整TchScr_Xmax, TchScr_Xmin, TchScr_Ymax, TchScr_Ymin四个坐标值,使得触摸屏与LCD显示屏能够正确的对应2、在坐标对应的过程中,首先要确定实际触摸屏的X、Y坐标方向,以及程序中的X、Y坐标方向是不是已经和实际坐标对应起来,否则容易出现后面按键时出现按键错位。

基于单片机的简易计算器设计原理图及程序代码

基于单片机的简易计算器设计原理图及程序代码
dsp[1]=0;
for(i=2;i<9;i++)
dsp[i]=12;
c=0;
}
while(dsp[0]==15&&c==0)
{
dsp[0]=keyscan();
if(dsp[0]==14||dsp[0]<10)
{
dsp[0]=14;
dsp[1]=0;
for(i=2;i<9;i++)
dsp[i]=12;
r[3]=(x%10000)/1000;
r[4]=(x%100000)/10000;
r[5]=(x%1000000)/100000;
r[6]=(x%10000000)/1000000;
r[7]=x/10000000;
}
}
if(k==13)
{
if(y==0)
{
BEEP=0;
r[0]=11;
r[1]=11;
if(k==10)
{
x=x+y;
if(x>99999999)
{
BEEP=0;
r[0]=11;
r[1]=11;
r[2]=10;
r[3]=12;
r[4]=12;
r[5]=12;
r[6]=12;
r[7]=12;
}
else
{
r[0]=x%10;
r[1]=(x%100)/10;
r[2]=(x%1000)/100;
P2=0xff;
}
}
ET0=1;
}
x=10000*x;
x=x+a[0]+a[1]*10+a[2]*100+a[3]*1000+a[5]*100000+a[6]*1000000+a[7]*10000000;

基于STM32的简易计算器.

基于STM32的简易计算器.

基于STM32的简易计算器一.总体方案设计1.任务要求(1)在开发板的显示屏上设计并显示一个简易的计算器界面,包括结果显示窗、0~9数字键、+、-、×、÷、X2、√、=、Del等按键;(2)可使用开发板上的键盘或触摸屏输入上述按键,并在显示窗中显示计算结果;(3)支持基本的整数加减乘除运算;2.设计方案设计的整体思路:选用意法半导体基于ARM Cortex—M3内核的STM32F103ZET6芯片来处理计算器中加减乘除运算,选用3.5寸的TFT-LCD电阻触摸屏模块来进行控制输入并同时将输入参数及运算结果显示出来,同时通过移植emWin,优化计算器界面,使计算器在视觉上效果上更为人性化。

二.系统硬件设计系统主要器件包括ALIENTEK精英STM32F103V1开发板,3.5寸TFTLCD触摸屏。

1.最小系统开发板1.1 微控制器Cortex-M3采用ARM V7构架,不仅支持Thumb-2指令集,而且拥有很多新特性。

较之ARM7 TDMI,Cortex-M3拥有更强劲的性能、更高的代码密度、位带操作、可嵌套中断、低成本、低功耗等众多优势。

STM32的优异性体现在如下几个方面:1. 超低的价格。

以8位机的价格,得到32位机,是STM32最大的优势。

2. 超多的外设。

STM32拥有包括:FSMC、TIMER、SPI、IIC、USB、CAN、IIS、SDIO、ADC、DAC、RTC、DMA等众多外设及功能,具有极高的集成度。

3. 丰富的型号。

STM32仅M3内核就拥有F100、F101、F102、F103、F105、F107、F207、F217等8个系列上百种型号,具有QFN、LQFP、BGA等封装可供选择。

同时STM32还推出了STM32L和STM32W等超低功耗和无线应用型的M3芯片。

4. 优异的实时性能。

84个中断,16级可编程优先级,并且所有的引脚都可以作为中断输入。

5. 杰出的功耗控制。

基于ARM的嵌入式计算器程序

基于ARM的嵌入式计算器程序

《嵌入式系统》期末作业题目:基于LED与键盘的计算器设计通过键盘与LED实现多位数字(至少2位)的连续四则运算,通过键盘输入数字与运算符号,按回车键之后显示LED显示运算结果。

提高部分:实现先乘除后加减运算。

系统设计:将计算器的计算流程分成三个部分,分别为数据采集与存储、计算结果以及显示结果。

数据的存储采用数组的形式存储,在数据采集的同时并调用显示,所以将LED的显示写成一个函数,这样方便被调用,简化程序。

同时,存储数据时将数值与运算符分开存储,即采用两个数组存储,这样方便计算部分程序的设计。

在计算部分,为实现先乘除后加减的运算,先遍历一遍存储运算符的数组,先计算乘除,选出乘除运算符对应下标的数据计算结果放入乘号或除号后面那个存储单元,设为digit[i+1],将digit[i]数据单元赋值为0,再通过判断digit[i]数据单元前面的运算符号这里设为symbol[i-1]来选择数据digit[i+1]与digit[i]之间的运算符symbol[i]为加还是减,如果symbol[i-1]为减,则symbol[i]为减,否则为加。

这样将数据数组和运算符数组经过计算乘除后重新赋值,在进行一次简单的加减运算便得到结果了。

最后返回计算结果并显示。

实验结果与讨论:本次试验可以说是完成的比较顺利,虽然和之前做过的简单运算有很大差别但是通过努力还是一一完成了,首先是连续运算,跟以前的实验对比这次采用的数组存储方式,可以存储更多数据,再就是运算,通过我不断改进与发现问题,最终实现了先乘除后加减的逻辑运算,结果还是很令人高兴的。

程序流程图:附录:#include"uhal.h"#include"keyboard.h" #include"zlg7289.h" #include"44b.h" U32 symbol[100],digit[100];#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihostingextern int Zlg7289SIOBand;extern int Zlg7289SIOCtrl;int prezent(U32 k){U32 t;WriteSDIO(ZLG7289_CMD_DATA0|0);//数码管以方式0译码,第一个数码管亮WriteSDIO(k%10);//显示个位Delay(1);//延时if(k>99){//键值大于99显示百位WriteSDIO(ZLG7289_CMD_DATA0|1); //发送十位数据WriteSDIO((unsignedchar)((k%100)/10));Delay(1);WriteSDIO(ZLG7289_CMD_DATA0|2); //发送百位数据WriteSDIO((unsigned char)(k/100));Delay(1);WriteSDIO(ZLG7289_CMD_HIDE);//使一、二、三两位数码管显示WriteSDIO(7);}if(k>9){//键值大于9显示十位WriteSDIO(ZLG7289_CMD_DATA0|1); //发送十位数据WriteSDIO((unsigned char)(k/10));Delay(1);WriteSDIO(ZLG7289_CMD_HIDE);//使一、二两位数码管显示WriteSDIO(3);}else{//键值小于10不显示十位WriteSDIO(ZLG7289_CMD_HIDE);//使个位数码管显示WriteSDIO(1);}}int caculate(U32 p){U32 i=0,result=0;for(i=0;i<p;i++){if(symbol[i]==20){digit[i+1]=digit[i]*digit[i+1];digit[i]=0;if(i>=1&&symbol[i-1]==21&&digit[i]== 0){symbol[i]=21;}elsesymbol[i]=14;}else if(symbol[i]==12){digit[i+1]=digit[i]/digit[i+1];digit[i]=0;if(i>=1&&symbol[i-1]==21&&digit[i]==0){symbol[i]=21;}elsesymbol[i]=14;}}for(i=0;i<p;i++){if(symbol[i]==14)digit[i+1]=digit[i]+digit[i+1];else if(symbol[i]==21)digit[i+1]=digit[i]-digit[i+1];}result=digit[i];return result;}int main(void){U32 key,key1=0,i=0,j=0,t=0,flag=0,k;ARMTargetInit(); //开发版初始化Uart_Printf("\nArm Target Init OK.");Zlg7289_Reset();//zlg7289复位while(1){key=GetKey();//得到按键值Delay(200);ZLG7289_ENABLE();//使zlg7289占有同步串口Delay(5);//延时if(key<10){k=1;flag++;}else{digit[j]=key1;j++;k=key;flag=0;}if(k==1){if(flag==1){key1=key;}else if(flag==2){key1=key1*10+key;flag=0;}prezent(key1);}if(k==100) //num键当成置零键{key1=0;for(i=0;i<100;i++)symbol[i]=0;for(j=0;j<=100;j++)digit[j]=0;i=0;j=0;t=0;flag=0;prezent(key1);}if(k==14||k==21||k==20||k==12) //加、减、乘、除{symbol[t]=key;t++;}if(k==15) //回车{key=caculate(t);prezent(key);key1=0;for(i=0;i<100;i++)symbol[i]=0;for(j=0;j<=100;j++)digit[j]=0;i=0;j=0;t=0;flag=0;}ZLG7289_DISABLE();//zlg7289放弃同步串口控制权}return 0;}友情提示:方案范本是经验性极强的领域,本范文无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用。

基于单片机的简易计算器设计与仿真

基于单片机的简易计算器设计与仿真

专业课程设计————基于单片机的简易计算器设计与仿真学院:电气工程学院班级:10自动化1班学号:P*********姓名:陈辉、马维谦指导老师:吴*基于单片机的简易计算器设计与仿真摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。

计算机在人们的日常生活中是比较常见的电子产品之一。

可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89C52单片机、LCD显示器、控制按键为元件来设计的计算器。

利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。

掌握Microsoft Visual C++ 6.0应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法。

关键字:AT89S51 LCD 控制按键目录第一章绪论.................................................................................. 41.1 课题简介 .......................................................................... 41.2 设计目的 .......................................................................... 41.3 设计任务 .......................................................................... 42.1 单片机发展现状 .............................................................. 52.2 计算器系统现状 .............................................................. 62.3 MCS-51系列单片机简介 ...................................................... 72.4 矩阵按键 ...................................................................... 112.5 计算器设计总体思想 .................................................. 11第三章硬件系统设计 ............................................................. 123.1 键盘接口电路 .............................................................. 123.2 LCD显示模块 ............................................................... 133.3 运算模块 ...................................................................... 144.1 汇编语言和C语言的特点及选择 ................................... 144.2 键扫程序设计 ................................................................... 144.3 算术运算程序设计 ...................................................... 154.4 显示程序设计 .............................................................. 16第五章系统调试与存在的问题 ............................................. 175.1 硬件调试............................................................................ 175.2 软件调试............................................................................ 17参考文献.................................................................................... 19第一章绪论1.1 课题简介当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。

基于单片机的计算器

基于单片机的计算器

基于单片机的计算器在软硬件技术的快速发展下,计算器作为一个计算工具,从最初的大型机发展到更加高效、便携的电子计算器,再到现在智能手机上内置的计算器应用。

然而,对于一些特定的行业和应用,传统的计算器还是很有价值的。

在这种情况下,基于单片机的计算器就成为了一种理想的选择。

基于单片机的计算器具有体积小、功耗低、价格相对较低等优点。

使用单片机作为控制中心,可以通过外围设备(如键盘、显示器等)实现输入输出功能。

为了实现计算功能,我们需要在单片机上运行特定的程序。

下面,我将详细介绍基于单片机的计算器的设计和实现。

首先,我们需要选择一个合适的单片机。

根据计算器的计算能力和显示要求,我们可以选择一款运算速度较快的单片机,如STM32F103C8T6、这款单片机具有64KB的闪存和20KB的SRAM,可以满足计算需求。

接下来,我们需要设计输入设备。

通常情况下,计算器的输入设备采用键盘。

我们可以使用矩阵键盘作为输入设备,它可以有效地减少IO口的使用数量。

通过扫描键盘矩阵的方式,可以检测到按下的键,并将其对应的数值存储到单片机内存中。

然后,我们需要设计显示设备。

计算器的显示设备通常采用液晶显示器。

液晶显示器的优点是能够以低功耗方式显示大量信息。

我们可以通过串行通信方式将单片机与液晶显示器连接起来,并通过特定的驱动程序将计算结果等信息显示在液晶屏上。

在输入设备和显示设备的基础上,我们需要设计计算功能模块。

计算器的计算功能主要通过算法实现。

我们可以在单片机上编写特定的程序,将输入的数值进行相应的计算,并将结果显示在液晶屏上。

常见的计算包括加减乘除、求平方、开方等。

此外,为了提高计算器的易用性,我们还可以添加一些功能。

例如,可以设置一个清屏按钮,用于清空液晶屏上的显示内容;可以添加一个退格按钮,用于删除输入的最后一个字符;可以添加一个存储器按钮,用于暂时存储计算结果等。

最后,我们需要将硬件和软件进行调试和优化。

通过实际测试,我们可以发现并修复硬件和软件上的问题,以确保计算器的稳定性和可靠性。

基于单片机的计算器设计报告(含c程序,proteus图等)

基于单片机的计算器设计报告(含c程序,proteus图等)

基于51单片机的计算机原理图和程序、设计要求:Proteus电路原理图:程序代码:/********************************************************** *电子器件名:计算器*设计要求1:可以通过键盘输入,并能显示输入相对应的数字.*设计要求2:能够进行加,减,乘,除准确的基本运算.*设计要求3:能够进行3位或3位的以上的乘,除运算.*设计要求4:自由发挥其他功能.*设计要求5:要求有单片机硬件系统框图,电路原理图,软件流程图。

管脚接法:P1接矩阵键盘,P2接数码管段选,P3接数码管位选;***********************************************************/#include<reg51.h>#define longint long int#define DU P2#define WE P3#define TIME 600long int temp,temp1;unsigned int tempH,tempL;int a[8]={0,0,0,0,0,0,0,0};/*数码管编码表*/longint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f,0x00};/*delay延时函数*/void delay(longint delaytime){while(delaytime--);}/*数码管显示函数*/void display(){if(temp<100000000){tempH=temp/10000;tempL=temp%10000;a[0]=tempH/1000%10;a[1]=tempH/100%10;a[2]=tempH%100/10;a[3]=tempH%10;a[4]=tempL/1000%10;a[5]=tempL/100%10;a[6]=tempL%100/10;a[7]=tempL%10;if(a[0]==0){a[0]=10;if(a[1]==0){a[1]=10;if(a[2]==0){a[2]=10;if(a[3]==0){a[3]=10;if(a[4]==0){a[4]=10;if(a[5]==0){a[5]=10;if(a[6]==0){a[6]=10;if(a[7]==0){a[7]=10;if(a[8]==0){a[8]=10;}}}}}}}}}WE=0Xfe;delay(5);DU=table[a[0]];delay(100);WE=0Xfd;delay(5);DU=table[a[1]];delay(100);WE=0Xfb;delay(5);DU=table[a[2]];delay(100);WE=0Xf7;delay(5);DU=table[a[3]];delay(100);WE=0Xef;delay(5);DU=table[a[4]];delay(100);WE=0Xdf;delay(5);DU=table[a[5]];delay(100);WE=0Xbf;delay(5);DU=table[a[6]];delay(100);WE=0X7f;delay(5);DU=table[a[7]];delay(100); }else{WE=0xfe;delay(5);DU=0x79;delay(TIME);WE=0xfd;delay(5);DU=0x50;delay(TIME);WE=0xfb;delay(5);DU=0x50;delay(TIME);WE=0xf7;delay(5);DU=0x5c;delay(TIME);WE=0xef;delay(5);DU=0x50;delay(TIME);}}/*键盘扫描函数*/unsigned char keyscan(){unsigned char key;while(1){display();P1=0xfe;if((P1&0xf0)!=0xf0){delay(5);if((P1&0xf0)!=0xf0){key=P1;delay(5000);while((P1&0xf0)!=0xf0){display();}switch(key){case 0xee: return 7;break;case 0xde:return 8;break;case 0xbe:return 9;break;case 0x7e: return 10;break;}}}P1=0xfd;if((P1&0xf0)!=0xf0){delay(5);if((P1&0xf0)!=0xf0){key=P1;while((P1&0xf0)!=0xf0){display();}switch(key){case 0xed: return 4;break;case 0xdd:return 5;break;case 0xbd:return 6;break;case 0x7d: return 11;break;}}}P1=0xfb;if((P1&0xf0)!=0xf0){delay(5);if((P1&0xf0)!=0xf0){key=P1;while((P1&0xf0)!=0xf0){display();}switch(key){case 0xeb: return 1;break;case 0xdb:return 2;break;case 0xbb:return 3;break;case 0x7b: return 12;break;}}}P1=0xf7;if((P1&0xf0)!=0xf0){delay(5);if((P1&0xf0)!=0xf0){key=P1;while((P1&0xf0)!=0xf0){display();}switch(key){case 0xe7: return 13;break;case 0xd7:return 0;break;case 0xb7:return 14;break;case 0x77: return 15;break;}}}}}/*主函数程序段*/main(){longint a,c;unsigned int b,d,flag=0;while(1){while(1) //输入第一个数字;{b=keyscan();if(b==13){temp=0;a=0;b=0;c=0;d=0;flag=0;b=keyscan();}if(b<10){a=a*10+b;temp=a;}else{break;}}while(1) //输入第二个数字;{d=keyscan();if(d<10){c=c*10+d;temp=c;}else{break;}}if(d==14) //加减乘除运算符和等于运算;{if(flag==0){switch(b){case 10:flag++;temp=a/c;a=0;c=0;temp1=temp;break;case 11:flag++; temp=a*c;a=0;c=0;temp1=temp;break;case 12: flag++;temp=a-c;a=0;c=0;temp1=temp;break;case 15:flag++; temp=a+c;a=0;c=0;temp1=temp;break;}}else if(flag==1){ switch(b){case 10:temp=temp1/c;a=0;c=0;temp1=temp;break;case 11:temp=temp1*c;a=0;c=0;temp1=temp;break;case 12:temp=temp1-c;a=0;c=0;temp1=temp;break;case 15:temp=temp1+c;a=0;c=0;temp1=temp;break;}}}/* e=keyscan();if(e==13){temp=0;a=0;b=0;c=0;d=0;flag=0;}*/} }。

基于ARM的计算器设计

基于ARM的计算器设计

小数点
正负号
退格 右移一位
输入操作数
添加小数点 添加/去掉 负号
程序处理流程
开始 输入操作数1 点击操作按钮 加减乘除 输入操作数2 判断 退格 清零 平方/开方/分数
等于 输出结果
编译,模拟运行
• 在主机侧编译,模拟环境中运行
– 将Makefile中的编译器设为g++
交叉编译,移植
• 移植之前将Makefile中的编译器改为arm-linux-g++,重新 编译 • 本次设计采用U盘来移植
数字0-9,组成所需操作数 加减乘除,平方,开方, 分数,正负,小数点, 退格,清零,等于
操作键
修改mycalc.cpp
• 用脚本文件生成的mycalc.cpp文件只得到主窗体的组件信 息,没有具体的功能实现,在此需要实现预先定义好的的 函数体,实现各个按钮的槽函数。 • 计算器功能设计:
数字键 加减乘除 平方,开方,分数 计算当前值
• 界面不够美观
– 可以增加背景图片,按钮颜色
·
谢谢聆听
开发板 环境搭建
开发环境搭建
搭建 Linux 平台 Fedora10
安装交叉 编译工具 开发板环境
编译 Qtopia
计算器GUI设计
Qt Designer 设计主窗体界面 保存为ui文件
添加源文件 mycalc.h,mycalc.cpp moc_mycalc.cpp
添加main.cpp
用progen软件 生成工程文件 mycalc.pro
交叉编译、移植
编译、模拟运行
制作桌面启动器 mycalc.desktop 与图标mycalc.png
用tmake软件 生成Makefile

基于ARM的计算器设计

基于ARM的计算器设计

基于ARM的计算器设计计算器是一种非常常见且实用的电子设备,用于进行数学计算。

基于ARM(Advanced RISC Machines)的计算器设计可以使其在计算速度、功耗和功能多样性方面得到显著的改进。

本文将介绍基于ARM的计算器设计的主要原理、功能和特点。

ARM是一种32位精简指令集计算机(RISC)架构,被广泛应用于移动设备和嵌入式系统。

与传统的复杂指令集计算机(CISC)相比,ARM架构的计算器具有更高的计算效率和较低的功耗。

基于ARM的计算器设计的一个重要特点是可定制性强。

ARM架构的计算器可以根据用户需求进行软硬件定制,使其具备更多的功能和扩展性。

例如,可以添加支持复数运算、矩阵运算、统计分析等功能模块,使计算器在不同领域有更广泛的应用。

另一个重要特点是计算速度快。

ARM架构的处理器采用超标量流水线设计,具备较高的指令执行速度和并行处理能力。

这意味着计算器可以在短时间内完成复杂的数学计算,提高用户的计算效率。

基于ARM的计算器设计还可以实现更友好的用户界面和操作体验。

ARM架构的处理器具有较强的图形处理能力,可以支持高分辨率显示和流畅的图形界面操作。

这使得计算器可以具备更直观、易用的用户界面,提供更多的计算辅助功能,如历史记录、单位转换等。

基于ARM的计算器设计还可以实现更低的功耗。

ARM架构的处理器采用了低功耗设计和功耗管理技术,可以根据计算负载的需求实时调整功耗。

这使得计算器可以在具备更高计算性能的同时,减少电池消耗,并延长使用时间。

在基于ARM的计算器设计中,硬件部分主要包括处理器、存储器、输入输出接口和显示屏。

处理器可以选择ARM Cortex-A系列或Cortex-M系列。

存储器包括闪存、RAM和ROM等。

输入输出接口可以包括按键、触摸屏、USB接口等。

显示屏可以选择TFT LCD或OLED等。

软件部分主要包括操作系统、应用程序和驱动程序。

操作系统可以选择Android、Linux等。

单片机的计算器设计方案

单片机的计算器设计方案

单片机的计算器设计方案一、引言随着科技的不断发展,计算器作为计算辅助工具的地位日益重要。

随着单片机技术的成熟,单片机计算器不仅具备了计算功能,还能集成其他更多实用的功能,提供更多便利。

本文将介绍一种基于单片机的计算器的完整设计方案。

二、设计任务本设计的计算器主要功能包括四则运算、取余运算、开平方运算、倒数运算、阶乘运算、三角函数运算等基本运算功能;显示屏能够显示输入和输出信息;按键能够实现输入数字和操作符;并能够处理输入的异常情况。

三、硬件设计1.单片机选择选择一款适合计算器设计的单片机,考虑到计算器需要进行复杂运算,处理器性能需要足够高。

同时,还要考虑到单片机的操作电源、存储空间、IO端口等参数是否满足设计要求。

2.显示屏设计选用适合计算器显示的液晶显示屏,考虑到计算器显示屏需要显示大量数字和操作符,最好选取较大尺寸的屏幕。

在设计阶段需要确定显示屏的驱动方式,通常使用并行方式或串行方式。

3.按键设计计算器需要输入数字和操作符,因此需要设计合适的按键。

可以选择机械按键或触摸屏按键。

机械按键相对简单,但操作感较差,触摸屏按键操作体验更好,但需要相应的触摸屏控制电路。

4.电源供电计算器需要稳定的电源供电,通常使用电池供电。

在设计阶段需要考虑到电源电压、电流和电池容量等参数。

五、软件设计1.输入处理使用单片机来处理输入的数字和操作符,可以通过按键来实现。

设计按键的检测和触发按键后的相关处理功能。

2.运算处理设计单片机的算法,实现四则运算、取余运算、开平方运算、倒数运算、阶乘运算、三角函数运算等基本运算功能。

3.显示处理将输入的数字和计算结果显示在屏幕上。

可以使用单片机的IO口和显示屏驱动接口来控制屏幕的显示。

4.异常处理处理输入数字和操作符的异常情况,例如除数为零、输入错误格式等。

需要对异常情况进行处理,避免引发系统错误。

六、设计流程1.硬件设计:选择合适的单片机、显示屏、按键和电源供电方案,确定硬件接口和参数。

基于STM32的简易计算器设计毕业答辩PPT

基于STM32的简易计算器设计毕业答辩PPT
GPIOD->CRL &= 0XFF00FF00; GPIOD->CRL |= 0X00BB00BB;
//PORTD 复用推挽输出 PIN15 14 10 9 8 5 4 1 0
GPIOE->CRH &= 0X00000000; GPIOE->CRH |= 0XBBBBBBBB;
GPIOE->CRL &= 0X0FFFFFFF; GPIOE->CRL |= 0XB0000000; //PORTG 复用推挽输出
平方向的刷新模式
1.配置PORT口

首先使能对应端口和FSMC的时钟 , 然后配置对应的IO口。

static void Lcd_Set_Port(void)

{
■ ■ ■
■ ■ ■
■ ■ ■ ■ ■
■ ■ ■ ■ ■
■ ■ ■


}
/ * IO口 配 置 * /
RCC->AHBENR |= 1<<8;
■ T_CS:触摸屏片选端。 ■ T_MOSI:触摸屏串行数据输入端。 ■ T_MISO:触摸屏串行数据输出端。 ■ T_PEN:触摸屏中断输出端。
TFT LCD模块设计 触摸屏模块设计
算法设计
TFT LCD模块
■ 主要分为 ■ 1.配置PORT口 ■ 2.配置FSMC ■ 3.配置LCD9486参数 ■ 4.设置屏幕显示模式 ,设置垂直方向和水
异步模式

FSMC_Bank1->BTCR[6] |= 1<<12;
//存储器写使能

FSMC_Bank1->BTCR[6] |= 1<<14;

基于STM32的简易计算器

基于STM32的简易计算器

基于STM32的简易计算器基于STM32的简易计算器一(总体方案设计1.任务要求(1)在开发板的显示屏上设计并显示一个简易的计算器界面,包括结果显2示窗、0,9数字键、,、,、×、?、X、?、,、Del等按键;(2)可使用开发板上的键盘或触摸屏输入上述按键,并在显示窗中显示计算结果;(3)支持基本的整数加减乘除运算;2.设计方案设计的整体思路:选用意法半导体基于ARM Cortex—M3内核的STM32F103ZET6芯片来处理计算器中加减乘除运算,选用3.5寸的TFT-LCD电阻触摸屏模块来进行控制输入并同时将输入参数及运算结果显示出来,同时通过移植emWin,优化计算器界面,使计算器在视觉上效果上更为人性化。

二(系统硬件设计系统主要器件包括ALIENTEK精英STM32F103V1开发板,3.5寸TFTLCD触摸屏。

1.最小系统开发板1.1 微控制器Cortex-M3采用ARM V7构架,不仅支持Thumb-2指令集,而且拥有很多新特性。

较之ARM7 TDMI,Cortex-M3拥有更强劲的性能、更高的代码密度、位带操作、可嵌套中断、低成本、低功耗等众多优势。

STM32的优异性体现在如下几个方面:1. 超低的价格。

以8位机的价格,得到32位机,是STM32最大的优势。

2. 超多的外设。

STM32拥有包括:FSMC、TIMER、SPI、IIC、USB、CAN、IIS、SDIO、ADC、DAC、RTC、DMA等众多外设及功能,具有极高的集成度。

3. 丰富的型号。

STM32仅M3内核就拥有F100、F101、F102、F103、F105、F107、F207、F217等8个系列上百种型号,具有QFN、LQFP、BGA等封装可供选择。

同时STM32还推出了STM32L和STM32W等超低功耗和无线应用型的M3芯片。

4. 优异的实时性能。

84个中断,16级可编程优先级,并且所有的引脚都可以作为中断输入。

arm触摸屏简易计算器

arm触摸屏简易计算器

嵌入式系统课程设计报告设计题目:触摸屏简易计算器班级:姓名:学号:指导教师:调试地点:调试时间:成绩:一、设计任务及要求设计任务:设计一个能在触摸屏上进行操作的计算器。

设计要求:(1)支持整数以及小数基本加减乘除运算;(2)支持触摸屏输入;(3)程序任务开始后,等待触摸屏的输入。

输入键有0~9数字键、+-*/运算符、clear清屏键、“=”等号键、‘.’小数点键,输入后能在LCD上显示运算,计算得出结果,能将内容和结果显示在LCD上。

每当有字符输入时, LCD屏幕上显示相应字符。

当输入“clear”清屏键时,LCD上显示初始状态。

当输入'='号后,得出计算结果,结果显示于表达式的下一行。

二、总体设计思路及功能描述(一)硬件设计本次设计方案就是利用ARM的多功能性的特点来设计的,具体思路为利用S3C2410和触摸屏的驱动对产生的信号进行触摸屏显示,设计框图如下图。

总体框图本次课题是由嵌入式系统S3C2410作为核心控制器,具有在线编程功能、低功耗;通过程序在屏幕绘制按键,然后对按键进行处理,并将处理记过在LCD触摸屏。

LCD触摸屏工作原理S3C2410 中具有内置的LCD 控制器,它能将显示缓存(在SDRAM存储器中)中的LCD 图像数据传输到外部的LCD驱动电路上的逻辑功能。

它支持单色、4级、16级灰度LCD显示,以及8位彩色、12位彩色LCD显示。

在显示灰度时,它采用时间抖动算法(time-based dithering algorithm)和帧率控制 (Frame Rate Control)方法,在显示彩色时,它采用RGB的格式,即RED、GREEN、BLUE,三色混合调色。

通过软件编程,可以实现332的RGB 调色的格式,565全彩输出,5551全彩输出等。

对于不同尺寸的LCD显示器,它们会有不同的垂直和水平象素点、不同的数据宽度、不同的接口时间及刷新率,通过对LCD 控制器中的相应寄存器写入不同的值,来配置不同的LCD 显示板。

ARM课程设计报告-简易计算器设计

ARM课程设计报告-简易计算器设计

一、原理与总体方案
⒈总体方案
主程序在初始化后调用键盘程序再判断返回的值。

若为数字0 -9,则根据按键的次数进行保存和显示处理。

若为功能键则先判断上次的功能键,根据代号执行不同功能并将按键次数清零。

程序中键盘部分使用行列式扫描原理若无键按下则调用动态显示程序并继续检测键盘情况,若有键按下则得其键值并通过查表转换为数字0—9和功能键与清零键的代号最后将计算结果拆分成个、十、百位再返回主程序继续检测键盘并显示,若为清零键则返回主程序的最开始。

电路设计与原理通过LPC2128芯片进行相应的设置来控制LCD 显示器。

而通过对键盘上的值进行扫描把相应的键值让ARM 芯片接收。

2.系统流程图:
开始
端口初始化
引脚功能初始化
向量中断初始化
LCD 初始化 时钟初始化 中断定时初始
显示时间
调用显示模式设

N
按键扫描
Y
计算键值,调用参数设定子程序
二、硬件设计
⒈元器件如表2.1:
器件数量
Lpc2138 1
LCD1602 1
KEYPAD 1
电缆线 1
USB电源线 1
电源若干
导线若干
表2.1 元器件表
⒉键盘接口电路
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式。

基于ARM的计算器系统设计 嵌入式系统开发课程设计 精品

基于ARM的计算器系统设计  嵌入式系统开发课程设计 精品

目录1目的及意义 ------------------------------------------------- - 2 - 2 系统的基本原理及设计思想 ---------------------------- - 2 -2.1 基本原理--------------------------------------------- - 2 -2.2 设计思想--------------------------------------------- - 4 -3 核心程序设计 ---------------------------------------------- - 6 -3.1 程序流程图------------------------------------------ - 6 -3.2 源代码------------------------------------------------ - 7 -4 结果及分析 ----------------------------------------------- - 14 -5 总结 -------------------------------------------------------- - 15 - 参考文献------------------------------------------------- - 15 -1目的及意义●学习键盘接口的原理●掌握通过输入输出端口扩展键盘的方法●编写矩阵键盘的扫描程序,并将按键键值在数码管中显示,实现简单计算器的功能2 实验要求基于JXARM9-2410实验箱实现计算机器,要求可实现带括号以及优先级的计算器。

可运算加减乘除等基本运算。

3 系统的基本原理及设计思想3.1 基本原理●键盘原理JXARM9-2410教学实验系统的键盘电路由一块74HC273锁存器和74LVCH244缓冲器完成键盘识别。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式系统应用课程设计题目基于ARM的计算器设计专业通信工程班级2012级3班学生姓名(学号)袁平***********学生姓名(学号)黄飞***********学生姓名(学号)组长袁平2015年06 月27日设计要求基本要求以友善之臂开发板及QT为平台,实现多功能计算器的设计能单独的进行简单的四则运算扩展部分能进行数的平方,开根号,及阶乘界面要求简洁美观,容易用户操作摘要电子计算器作为计算工具,为人们的生活带来了很多的方便与实惠。

随着科学技术的进步,尤其是电子工业技术的发展,计算器已经从先前的半导体技术实现到现在的广泛喜爱用高集成度芯片实现的多功能计算器,不管是白领办公室还是菜市场的小贩,计算器的出现让他们高效率的完成任务。

计算器扮演了一个重要的角色。

本设计是用C++编写的,基于Qt图形用户界面应用程序框架的计算器。

设计出的应用程序,实现了一定的计算功能。

关键字: Qt C++ 计算器第一章前言1.1设计背景计算器(calculator;counter)一般是指“电子计算器”,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑)。

计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。

1.2设计目的本程序是基于linux下的嵌入式开发,所用软件为QT Creator,程序虽然简单,但是通过本程序的设计,可以进一步了解嵌入式系统开发工具以及熟悉linux环境下的常用命令,为以后进入嵌入式领域打下一定的基础。

通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C++程序语言设计》和《高级程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程。

第二章流程图2.1功能描述本次设计的计算器在功能上大致与Windows系统自带的计算器程序相似,对于所设计的科学计算器,其功能大致为可以进行加(+)、减(-)、乘(*)、除(/)、简单算术计算及平方和开方。

由于接触QT时间还不太久,所以目前只能简单地实现这些功能,相信随着以后逐步的了解,本程序将实现更多的功能。

第三章开发工具简介3.1 QT简介由于本次设计的小程序是用QT Creator所设计的,所以我觉得有必要先介绍下QT开发工具的背景。

Qt是一个1991年由奇趣科技开发的跨平台C++图形界面应用程序开发框架。

它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。

Qt是面向对象语言,易于扩展,并且允许组件编程。

QT所具有的优势是:优良的跨平台特性,Qt支持下列操作系统: Microsoft Windows 95/98,Microsoft Windows NT,Linux,Solaris,SunOS,HP-UX,Digital UNIX (OSF/1,Tru64),Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX 等等。

面向对象:Qt 的良好封装机制使得Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。

Qt 提供了一种称为signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。

丰富的API:Qt 包括多达250 个以上的C++ 类,还提供基于模板的collections,serialization,file,I/O device,directory management,date/time 类。

甚至还包括正则表达式的处理功能。

支持2D/3D 图形渲染,支持OpenGL大量的开发文档。

第四章详细设计过程4.1工程的创建打开QtCreator,如图1所示。

图1选择File->New File or Project,然后在弹出的对话框中选择Applications->Qt Gui应用(如图2所示),然后进入下一步。

图2定义新工程的工程名JSQ.pro并选择保存路径(如图3所示),然后进入下一步,在出现图4的界面中基类选择QDialog,最后完成新工程的创建。

图3图44.2图形界面的设计分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键,主要进行数字的录入,这类按键包括按键0~9;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示,这类按键包括“+”,“-”,“*”,“/”,“=”等等;三是清屏操作键,用于显示框显示信息的清除。

进入刚才创建的空工程,双击左侧的JSQ.pro,在主编辑框中目前显示JSQ.pro的内容为空(如图5)。

图5点击dialog.ui进入其界面(如图6)。

选择3个控件分别是PushButton,LCDNumber和BoxLayou。

界面设计(如图7)。

图6图7按钮设置:选中要设置的按钮右键单击,选择“改变文本”,然后输入字符即可。

其次,同样选中按钮右键单击,选中“改变对象名称”出现如下界面:输入对象名称即可。

图8图94.3程序代码的实现计算器程序主要分以下两部分工作:一是实现计算器的图形界面;二是实现按键事件和该事件对应的功能绑定,即信号和对应处理槽函数的绑定。

分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键,主要进行数字的录入,这类按键包括按键0~9;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示;三是清屏操作键,用于显示框显示信息的清除。

信号和对应处理槽函数的绑定。

以数字1为例:选中按钮1右键单击,选择“转到槽..”,在出现的界面单击“确定”即可计算器程序源代码的分析说明1)对calculator.h源代码的简要说明#ifndef DIALOG_H#define DIALOG_H#include<QDialog>namespace Ui{class Dialog;}class Dialog:public QDialog{Q_OBJECTpublic:explicit Dialog(QWidget*parent=0);~Dialog();private:Ui::Dialog*ui;private slots:void button1();void button2();void button3();void button4();void button5();void button6();void button7();void button8();void button9();void button0();void buttonPoint();void buttonAdd();void buttonSub();void buttonMul();void buttonDivision();void buttonSquare();void buttonReciprocal();void buttonEvolution();void buttonFactorial();void buttonEqual();void buttonEmpty();void buttonDel();};#endif// DIALOG_H2)对calculator.cpp源代码的简要说明#include"dialog.h"#include"ui_dialog.h"#include<math.h>Dialog::Dialog(QWidget*parent):QDialog(parent),ui(new Ui::Dialog){ui->setupUi(this);ui->lcdNumber->setNumDigits(10);setWindowTitle("Calculator");connect(ui->pushButton_1,SIGNAL(clicked()),this,SLOT(button1()));connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(button2()));connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(button3()));connect(ui->pushButton_4,SIGNAL(clicked()),this,SLOT(button4()));connect(ui->pushButton_5,SIGNAL(clicked()),this,SLOT(button5()));connect(ui->pushButton_6,SIGNAL(clicked()),this,SLOT(button6()));connect(ui->pushButton_7,SIGNAL(clicked()),this,SLOT(button7()));connect(ui->pushButton_8,SIGNAL(clicked()),this,SLOT(button8()));connect(ui->pushButton_9,SIGNAL(clicked()),this,SLOT(button9()));connect(ui->pushButton_0,SIGNAL(clicked()),this,SLOT(button0()));connect(ui->pushButton_point,SIGNAL(clicked()),this,SLOT(buttonPoint( )));connect(ui->pushButton_add,SIGNAL(clicked()),this,SLOT(buttonAdd()));connect(ui->pushButton_sub,SIGNAL(clicked()),this,SLOT(buttonSub()));connect(ui->pushButton_mul,SIGNAL(clicked()),this,SLOT(buttonMul()));connect(ui->pushButton_division,SIGNAL(clicked()),this,SLOT(buttonDiv ision()));connect(ui->pushButton_equal,SIGNAL(clicked()),this,SLOT(buttonEqual( )));connect(ui->pushButton_empty,SIGNAL(clicked()),this,SLOT(buttonEmpty( )));connect(ui->pushButton_del,SIGNAL(clicked()),this,SLOT(buttonDel()));connect(ui->pushButton_square,SIGNAL(clicked()),this,SLOT(buttonSquar e()));connect(ui->pushButton_reciprocal,SIGNAL(clicked()),this,SLOT(buttonR eciprocal()));connect(ui->pushButton_evolution,SIGNAL(clicked()),this,SLOT(buttonEv olution()));connect(ui->pushButton_factorial,SIGNAL(clicked()),this,SLOT(buttonFa ctorial()));}Dialog::~Dialog(){delete ui;//QString sum,sum1;int aa;void Dialog::button1(){sum=sum.append('1');ui->lcdNumber->display(sum); }void Dialog::button2(){sum=sum.append('2');ui->lcdNumber->display(sum); }void Dialog::button3(){sum=sum.append('3');ui->lcdNumber->display(sum); }void Dialog::button4(){sum=sum.append('4');ui->lcdNumber->display(sum); }void Dialog::button5(){sum=sum.append('5');ui->lcdNumber->display(sum); }void Dialog::button6(){sum=sum.append('6');ui->lcdNumber->display(sum); }void Dialog::button7(){sum=sum.append('7');ui->lcdNumber->display(sum); }void Dialog::button8(){sum=sum.append('8');ui->lcdNumber->display(sum);void Dialog::button9(){sum=sum.append('9');ui->lcdNumber->display(sum); }void Dialog::button0(){sum=sum.append('0');ui->lcdNumber->display(sum); }void Dialog::buttonPoint(){sum=sum.append('.');ui->lcdNumber->display(sum); }void Dialog::buttonEmpty(){sum=' ';ui->lcdNumber->display(0);}void Dialog::buttonDel(){sum=sum.left(sum.size()-1);ui->lcdNumber->display(sum); }//void Dialog::buttonAdd(){sum1=sum;sum=' ';aa=0;QString str=sum1;str=str.append('+');ui->label->setText(str);}void Dialog::buttonSub(){sum1=sum;sum=' ';aa=1;QString str=sum1;str=str.append('-');ui->label->setText(str);}void Dialog::buttonMul(){sum1=sum;sum=' ';aa=2;QString str=sum1;str=str.append('*');ui->label->setText(str);}void Dialog::buttonDivision() {sum1=sum;sum=' ';aa=3;QString str=sum1;str=str.append('/');ui->label->setText(str);}void Dialog::buttonSquare(){QString str;str=sum;double a=str.toDouble();// str = str.append;// ui->label->setText(str);ui->lcdNumber->display(a*a);sum=sum.setNum(a*a);}void Dialog::buttonReciprocal() {QString str;str=sum;double a=str.toDouble();// str = str.append;// ui->label->setText(str);ui->lcdNumber->display(1/a);sum=sum.setNum(1/a);}void Dialog::buttonEvolution() {QString str;str=sum;double a=str.toDouble();// str = str.append;// ui->label->setText(str);a=sqrt(a);ui->lcdNumber->display(a);sum=sum.setNum(a);}void Dialog::buttonFactorial(){QString str;str=sum;int a=str.toInt();int b=a;for(int i=1;i<b;i++){a=a*i;}// str = str.append;// ui->label->setText(str);ui->lcdNumber->display(a);sum=sum.setNum(a);}void Dialog::buttonEqual(){QString first,second,str;first=sum;second=sum1;double a=first.toDouble();double b=second.toDouble();switch(aa){case0:b=b+a;ui->lcdNumber->display(b);break;case1:b=b-a;ui->lcdNumber->display(b);break;case2:b=b*a;ui->lcdNumber->display(b);break;case3:b=b/a;ui->lcdNumber->display(b);break;default:break;}sum=sum.setNum(b);str=' ';ui->label->setText(str);}第五章程序测试第六章课程总结这次的简易计算机的编写,能实现基本的加减乘除算法及平方和开方,也能实现小数的加减乘除,通过此次的QT学习以及上学期的C++学习,深刻的了解到设计程序并不是一件简单的事情。

相关文档
最新文档