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

合集下载

基于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产品则向着高速度、高精度、低功耗的方向发展。

(完整)单片机课程设计——计算器设计

(完整)单片机课程设计——计算器设计

目录一、设计总绪 (1)1。

1设计思想 (1)1.2设计说明 (1)1。

3关键词:矩阵键盘,单片机,数码管显示,汇编语言 (1)1.4设计目的 (1)1。

5设计要求 (2)二、设计方案 (2)2。

1硬件电路设计方案 (2)2.1.1基本结构 (2)2.1。

2系统框架图 (3)2.1。

3工作流程图 (3)2。

1.4单片机主控制模块 (4)2。

2系统功能描述 (6)三、各模块功能介绍 (7)3.1键盘输入模块 (7)3。

1。

1键盘分布图 (7)3。

1.2工作原理 (7)3。

2运算控制模块 (8)3.3显示模块 (8)3.4振荡电路模块 (9)四、仿真电路 (11)仿真运行结果 (11)五、调试过程总结 (13)附录: (14)参考文献: (14)源程序代码 (14)一、设计总绪1。

1设计思想近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新.在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。

计算机在人们的日常生活中是比较常见的电子产品之一.可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89c51单片机、LCD显示器、控制按键为元件来设计的计算器。

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

掌握应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法此设计是基于单片机技术的简易计算器的方案,本次设计所提出的一种基于单片机技术的简易计算器的方案,采用具有数据处理能力的中央处理器CPU,随机存储器ROM,多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统-—单片机,配以汇编语言编写的执行程序,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功能集成与一个集成电路中,使用起来十分方便。

用单片机实现简易计算器的设计报告

用单片机实现简易计算器的设计报告

华北水利水电学院课程设计报告课程名称: 简易计算器姓名: 学号: 班级: 专业: 电子信息工程日期: 2010年1月21日目录1.前言 (3)2.课程设计目的和要求 (3)3.总体设计 (3)4.硬件设计 (4)5.软件设计 (5)6.操作说明 (9)7.设计感想 (9)8.参考文献 (10)一.前言单片机课程设计是单片机原理课程的实践性环节。

是在我们学习了《单片机原理》等课程的基础上进行的综合性训练,我们组这次训练的课题是基于单片机简易计算器。

此次课程设计的课题是针对我们学习《单片机原理》这门课程的基础上,并在其辅助下完成的。

此次进行的综合性训练,不仅培养了我如何合理运用课本中所学到的理论知识与实践紧密结合,独立解决实际问题的能力二.课程设计的目的和要求1.课程设计的目的首先,综合运用单片机原理与接口技术课程中所学到的理论知识来独立完成此次设计课题,培养我们查阅手册和文献资料的良好习惯,以及培养我们独立分析和解决实际问题的能力。

其次,在学习了理论知识的基础上进一步熟悉常用电子器件的类型和特征,并掌握合理选用的原则。

再次,就是学会电子电路的安装与调试技能,以及与同组的组员的团结合作的精神。

2.课程设计要求利用89c51作为主控器组成一个四则运算的计算器。

三.总体设计1.基本工作原理本设计利用AT89C51单片机来控制液晶显示器和矩阵式键盘,实现了简易的计算器功能。

通过键盘输入需要计算的计算式子,该式子会显示在液晶的第一行,当键入等于号后,计算结果会显示在液晶的第二行。

本设计中液晶选用1602字符型液晶显示器,显示参与运算的数字以及最终的运算结果,键盘采用4*4矩阵式键盘。

2.系统组成单元中央处理单元CPU选用AT89C—51对整个系统进行控制:它将数据输出到显示屏,实现键入、输出的显示;根据键盘输入调用相应键处理子程序,实现数据的计算;单片机的管脚如下所述:AT89C51的管脚分布如下:VCC:供电电压。

基于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缓冲器完成键盘识别。

(完整版)基于单片机的计算器毕业设计论文

(完整版)基于单片机的计算器毕业设计论文

摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

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

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

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

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

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

关键字:AT89S51 LCD 控制按键目录第一章绪论 (4)1.1 课题简介 (4)1.2 设计目的 (4)1.3 设计任务 (5)第二章课题背景 (6)2.1 单片机发展现状 (6)2.2 计算器系统现状 (8)2.3 MCS-51系列单片机简介 (9)2.4 矩阵按键 (14)2.5 计算器设计总体思想 (14)第三章硬件系统设计 (16)3.1 键盘接口电路 (17)3.2 LCD显示模块 (17)3.3 运算模块 (19)第四章软件设计 (20)4.1 汇编语言和C语言的特点及选择 (20)4.2 键扫程序设计 (20)4.3 算术运算程序设计 (21)4.4 显示程序设计 (22)第五章系统调试与存在的问题 (24)5.1 硬件调试 (24)5.2 软件调试 (24)总结 (26)参考文献 (27)附录一 (28)附录二 (29)附录三 (30)第一章绪论1.1 课题简介当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。

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

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

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单片机的工作原理单片机由运算器、控制器、存储器、输入输出设备构成。

单片机课程设计计算器

单片机课程设计计算器

单片机课程设计 计算器一、课程目标知识目标:1. 学生能理解单片机的基本原理和功能,掌握计算器的设计流程。

2. 学生能运用所学知识,设计并实现一个具有基本运算功能的单片机计算器。

3. 学生了解并掌握单片机编程的基本语法和逻辑结构。

技能目标:1. 学生掌握使用单片机开发工具进行程序编写、调试和下载的方法。

2. 学生具备分析问题、设计算法和解决问题的能力,能运用单片机技术解决实际计算问题。

3. 学生能够通过小组合作,进行项目设计和实践,提高团队协作能力。

情感态度价值观目标:1. 学生培养对单片机技术及电子工程的兴趣,激发创新意识和探索精神。

2. 学生通过动手实践,体验成功解决问题的喜悦,增强自信心和自主学习能力。

3. 学生在学习过程中,树立正确的价值观,认识到科技发展对社会进步的重要性。

课程性质:本课程为实践性较强的课程,要求学生在理论学习的基础上,动手实践,完成单片机计算器的设计与制作。

学生特点:学生处于高年级阶段,已具备一定的电子技术基础和编程能力,具备独立思考和解决问题的能力。

教学要求:结合学生特点,注重理论与实践相结合,引导学生通过小组合作,完成课程任务,达到课程目标。

同时,关注学生的个性差异,提供个性化的辅导和支持。

在教学过程中,注重培养学生的创新能力、实践能力和团队协作能力,为后续学习打下坚实基础。

二、教学内容根据课程目标,教学内容分为以下三个部分:1. 理论知识学习:- 单片机原理与结构:讲解单片机的组成、工作原理及性能特点,对应教材第1章。

- 编程语言基础:介绍单片机编程的基本语法、逻辑结构和编程规范,对应教材第2章。

2. 实践技能培养:- 硬件设计与连接:学习如何选用合适的元器件,设计计算器硬件电路,对应教材第3章。

- 软件编程与调试:掌握单片机程序编写、调试和下载的方法,对应教材第4章。

3. 项目实践:- 计算器设计与实现:结合所学知识,分组进行计算器项目设计,包括硬件选型、电路设计、程序编写和调试等,对应教材第5章。

[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坐标方向是不是已经和实际坐标对应起来,否则容易出现后面按键时出现按键错位。

基于单片机的计算器课程设计报告

基于单片机的计算器课程设计报告

昆明理工大学课程设计报告设计名称:单片机计算器课程设计姓名:学号:2011118521XXX专业班级:测控技术和仪器1111院(系):信息工程设计时间:2013年6月21日设计地点:昆明理工大学德信楼目录一、题目……………………………………………………………………………二、任务和要求…………………………………………………三、课程设计及整体方框图…………………………………………………a..总体设计思路简述····················································b.硬件设计简述························································c.软件设计简述························································d.程序主流程图························································四、课程设计原理分析及相关知识概述…………………………………………五、结论……………………………………………………………………………六、体会和收获……………………………………………………………………附件:1、源程序代码(根据需要选择)……………………………………………2、整体电路原理图(根据需要选择)………………………………………2、元件表(根据需要选择)…………………………………………………3、实验操作(根据需要选择)…………………………………………………一、题目使用单片机芯片AT89C51、LCD 1602 液晶显示屏,用KEIL uVision和porteus 仿真软件实现简易计算器的仿真和调试。

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的嵌入式计算器程序

《嵌入式系统》期末作业题目:基于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;}友情提示:方案范本是经验性极强的领域,本范文无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用。

基于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

单片机简易计算器课程设计

单片机简易计算器课程设计

课程设计题目名称简易计算器设计课程名称单片机原理及应用学生姓名班级学号2018年6 月20日目录一设计目的 (2)二总体设计及功能介绍 (2)三硬件仿真图 (3)四主程序流程图 (4)五程序源代码 (4)六课程设计体会 (17)一设计目的本设计是基于51系列单片机来进行的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、乘、除六位整数数范围内的基本四则运算,并在LED上显示相应的结果。

软件方面使用C语言编程,并用PROTUES仿真。

二总体设计及功能介绍根据功能和指标要求,本系统选用MCS-51系列单片机为主控机,实现对计算器的设计。

具体设计及功能如下:由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LED 显示数据和结果;另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘;执行过程:开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。

三硬件仿真图硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。

因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。

四主程序流程图程序的主要思想是:将按键抽象为字符,然后就是对字符的处理。

将操作数分别转化为字符串存储,操作符存储为字符形式。

然后调用compute()函数进行计算并返回结果。

具体程序及看注释还有流程图五程序源代码#include<reg51.h>#include<intrins.h>#include<ctype.h>/* isdigit()函数*/#include<stdlib.h>/* atoi()函数*/#define uchar unsigned char#define uint unsigned intuchar operand1[9], operand2[9]; /* 操作数*/uchar operator; /* 操作符*/void delay(uint);uchar keyscan();void disp(void);void buf(uint value);uint compute(uint va1,uint va2,uchar optor);uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; /* 字符码表*/ uchar dbuf[8] = {10,10,10,10,10,10,10,10}; /* 显示缓存*/ /* 延时函数*/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/*******************************************键盘扫描程序将按键转化为字符并作为输出'$','#'分别表示清零键和没有键按下*******************************************/uchar keyscan(){uchar skey; /* 按键值标记变量*/ /***********************扫描键盘第1行************************/P1 = 0xfe;while((P1 & 0xf0) != 0xf0) /* 有按键按下*/ {delay(3); /* 去抖动延时*/while((P1 & 0xf0) != 0xf0) /* 仍有键按下*/{switch(P1) /* 识别按键并赋值*/{case 0xee: skey ='7'; break;case 0xde: skey ='8'; break;case 0xbe: skey ='9'; break;case 0x7e: skey ='/'; break;default:skey ='#';}while((P1 & 0xf0) != 0xf0) /* 等待按键松开*/;}}/***********************扫描键盘第2行************************/P1 = 0xfd;while((P1 & 0xf0) != 0xf0){delay(3);while((P1 & 0xf0) != 0xf0){switch(P1){case 0xed: skey ='4'; break;case 0xdd: skey ='5'; break;case 0xbd: skey ='6'; break;case 0x7d: skey ='*'; break;default:skey ='#';}while((P1 & 0xf0) != 0xf0);}}/***********************扫描键盘第3行************************/P1 = 0xfb;while((P1 & 0xf0) != 0xf0){delay(3);while((P1 & 0xf0) != 0xf0){switch(P1){case 0xeb: skey ='1'; break;case 0xdb: skey ='2'; break;case 0xbb: skey ='3'; break;case 0x7b: skey ='-'; break;default: skey ='#';}while((P1 & 0xf0) != 0xf0);}}/***********************扫描键盘第4行************************/P1 = 0xf7;while((P1 & 0xf0) != 0xf0){delay(3);while((P1 & 0xf0) != 0xf0){switch(P1){case 0xe7: skey ='$'; break;case 0xd7: skey ='0'; break;case 0xb7: skey ='='; break;case 0x77: skey ='+'; break;default:skey ='#';}while((P1 & 0xf0) != 0xf0);}}return skey;}void main(){uint value1, value2, value; /* 数值1,数值2,结果*/uchar ckey, cut1 =0, cut2 =0; /* ckey键盘输入字符*/uchar operator; /* 运算符*/ uchar i, bool=0;init:/* goto语句定位标签*/buf(0); /* 初始化*/disp();value =0;cut1 = cut2 =0;bool=0;for(i =0;i <9;i++){operand1[i] ='\0';operand2[i] ='\0';} /* 初始化*/while(1){ckey = keyscan(); /* 读取键盘*/if(ckey !='#'){ /* isdigit函数,字符是阿拉伯数字返回非0值,否则返回0 */if(isdigit(ckey)){switch(bool){case0:operand1[cut1] = ckey;operand1[cut1+1] ='\0';value1 = atoi(operand1); /* atoi函数,将字符串转化为,int整数*/cut1++;buf(value1);disp();break;case1:operand2[cut2] = ckey;operand2[cut2+1] ='\0';value2 = atoi(operand2);cut2++;buf(value2);disp();break;default:break;}}else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/') {bool=1;operator= ckey;buf(0);dbuf[7] =10;disp();}else if(ckey =='='){value = compute(value1,value2,operator);buf(value);disp();while(1) /* 计算结束等待清零键按下*/{ckey = keyscan();if(ckey =='$') /* 如果有清零键按下跳转到开始*/goto init;else{buf(value);disp();}}}else if(ckey =='$'){ goto init;}}disp();}}/******************************************运算函数输入:操作数和操作符输出:计算结果*******************************************/ uint compute(uint va1,uint va2,uchar optor) {uint value;switch(optor){case'+': value = va1+va2; break;case'-': value = va1-va2; break;case'*': value = va1*va2; break;case'/': value = va1/va2; break;default:break;}return value;}/*******************************************更新显示缓存输入:无符号整数输出:将输入送入显示缓存*******************************************/ void buf(uint val){uchar i;if(val ==0){dbuf[7] =0;i =6;}elsefor(i =7; val >0; i--){dbuf[i] = val %10;val /=10;}for( ; i >0; i--)dbuf[i] =10;}/*******************************************显示函数*******************************************/void disp(void){uchar bsel, n;bsel=0x01;for(n=0;n<8;n++){P2=bsel;P0=table[dbuf[n]];bsel=_crol_(bsel,1);delay(3);P0=0xff;}}六课程设计体会接到这个课题以后,我先是学习了PROTEUS软件的使用,按照题目所要求来进行分析,设计,连接电路图,调试,最终完成计算器的仿真。

基于51单片机简易计算器课程设计报告书

基于51单片机简易计算器课程设计报告书

电气与电子信息工程学院单片机课程设计设计题目:简易电子计算器专业班级: 12级电信(1)班学号: 1姓名:峥指导教师:章磊艾青设计时间:2014/06/03~2014/06/13设计地点:K2—407课程设计任务书2013 ~2014 学年第2学期学生:峥专业班级:电子信息工程技术(专)2012(1)班指导教师:艾青、章磊工作部门:电气学院电信教研室一、课程设计题目:单片机课程设计1. 出租车计价器系统设计2. 医院住院病人呼叫器的设计3. 作息时间控制器4. 数字温度计的设计5. 火灾报警器的设计6. 电子密码锁7. 电子计算器8.学生自选二、课程设计容1. 以单片机为核心器件,构造系统;2. 熟悉、掌握各种外围接口电路芯片的工作原理和控制方法;3. 熟悉、掌握单片机汇编语言的软件设计方法;4. 熟悉、掌握印刷电路板的设计方法;5. 根据具体设计课题的技术指标和给定条件,能独立而正确地进行方案论证和电路设计,要求概念清楚、方案合理、方确、步骤完整;6. 学会查阅有关参考资料和手册,并能正确选择有关元器件和参数;7. 编写设计说明书,参考毕业设计论文格式撰写设计报告(5000字以上)。

三、进度安排2.执行要求智能电子产品设计制作共8个选题,每组不超过7人,为避免雷同,在设计中每个同学所采用的方案不能一样。

四、基本要求(1)进行方案论证并根据要求确定系统设计方案;(2)绘制系统框图和电气原理草图,程序流程图;(3)对相关电路进行电路参数计算和元器件选择;(4)进行软件汇编并调试;(5)利用Proteus和Keil uVision2对系统进行联调;(6)绘制系统原理总图,列出原器件明细表;(7)画出软件框图,列出程序清单;(8)写出使用说明书;(9)对设计进行全面总结,写出课程设计报告。

五、课程设计考核办法与成绩评定第1章方案的选择与概述1. 单片机概述当今时代,是一个新技术层出不穷的时代。

在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。

基于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等。

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 元器件表
⒉键盘接口电路
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式。

单片机计算器课程设计报告

单片机计算器课程设计报告

基于单片机的简易计算器设计基于单片机的简易计算器设计一、设计任务和性能指标1.1设计任务利用单片机及外围接口电路(键盘接口和显示接口电路)设计制作一个计算器,用四位一体数码管显示计算数值及结果。

要求用Protel 画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),绘出程序流程图,并给出程序清单(要求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的可读性)。

1.2性能指标1加法:能够计算四位以内的数的加法。

2减法:能计算四位数以内的减法。

3乘法:能够计算两位数以内的乘法。

4除法:能够计算四位数的乘法5有清零功能,能随时对运算结果和数字输入进行清零。

二、系统设计方案按照系统设计的功能的要求,初步确定设计系统由单片机主控模块、四位一体数码管显示模块、键扫描接口电路共三个主要模块组成。

主控芯片使用51系列AT89C51单片机,采用高性能的静态80C51设计,它由先进工艺制造,并带有非易失性Flash程序存储器。

它是一种高性能、低功耗的8位COMS微处理芯片,市场应用最多。

键盘电路采用4*4矩阵键盘电路。

显示模块采用四位一体共阳极数码管和SN74LS244锁存芯片构成等器件构成。

三、硬件系统设计1.单片机最小系统单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。

主控芯片选取STC89C51RC芯片,因其具有良好的性能及稳定性,价格便宜应用方便。

晶振选取11.0592MHz,晶振旁电容选取30pF。

采用按键复位电路,电阻分别选取100Ω和10K,电容选取10μF。

单片机最小系统硬件电路图如图(1)所示。

图(1)单片机最小系统2.键盘接口电路计算器所需按键有:数字键:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’0’功能键:’+’, ’-‘ , ’*’, ’/ ’ , ’ = ’, ’ C( 清零)’共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行采用端口P0.0~P0.3,四列采用端口P3.0~P3.3,通过8个端口的的高低电平完成对矩阵键盘的控制。

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

嵌入式系统应用课程设计题目基于ARM的计算器设计专业通信工程班级2012级3班学生姓名(学号)袁平20120343007学生姓名(学号)黄飞20120343030学生姓名(学号)组长袁平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->QtGui应用(如图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++学习,深刻的了解到设计程序并不是一件简单的事情。

相关文档
最新文档