单片机技术课程设计报告- 简易计算器

合集下载

单片机的简易计算器

单片机的简易计算器

单片机的简易计算器单片机简易计算器的设计与实现一、引言计算器是一种用于计算数学运算的工具,现在已经成为人们日常生活中必不可少的设备之一、在这个数字化的时代,我们经常需要进行简单的数学运算,如加、减、乘、除等。

为了满足人们的需求,我们可以使用单片机来设计和实现一个简易的计算器。

二、设计目标我们的设计目标是实现一个能够进行基本的加减乘除四则运算的简易计算器。

具体来说,我们希望计算器能够实现以下功能:1.输入两个数字进行计算,并显示结果。

2.支持加法、减法、乘法和除法运算。

3.具备简单的误操作处理能力,如输入错误提示等。

三、设计思路我们将使用8051系列单片机来设计和实现计算器。

具体的设计思路如下:1.使用矩阵键盘作为输入设备,通过扫描矩阵键盘来获取输入的数字和运算符。

2.通过数码管来显示计算结果。

3.使用中断处理器来处理键盘输入和计算结果的显示。

4.根据输入的运算符进行相应的运算,然后将结果显示在数码管上。

四、硬件设计1.选择合适的单片机,如STC89C52,AT89S52等,它们都是基于8051核心的单片机。

2.连接矩阵键盘到单片机的IO口,通过矩阵键盘的扫描来获取输入的数字和运算符。

3.连接数码管到单片机的IO口,用于显示计算结果。

五、软件设计1.在主程序中初始化单片机的IO端口和中断向量。

2.编写中断服务程序,用于处理键盘输入和计算结果的显示。

3.设计一个状态机来处理键盘输入和计算结果的显示。

4.根据状态机的状态来进行相应的运算和显示。

六、实现步骤1.编写主程序,包括对IO口和中断向量的初始化。

2.编写中断服务程序,用于处理键盘输入和计算结果的显示。

3.设计一个状态机,并实现状态机的状态转换和运算结果的计算。

4.测试并调试系统,确保计算结果的准确性。

七、总结通过使用单片机,我们成功地设计并实现了一个简易的计算器。

这个计算器不仅能够进行基本的加减乘除四则运算,还具备了简单的误操作处理能力。

在实际使用中,我们可以通过添加更多的功能和改进设计来进一步完善这个简易计算器。

单片机的简易计算器毕业设计

单片机的简易计算器毕业设计

单片机的简易计算器毕业设计简易计算器是一种基本、常见的电子设备,它能够对数字进行简单的加减乘除运算。

单片机作为一种小型、低功耗的微型计算机,非常适合用于设计和实现计算器的功能。

在本文中,我们将以单片机为基础,设计和实现一个简易计算器。

一、设计思路1.硬件设计:-使用单片机作为主控制器。

-接入键盘矩阵和显示器。

-使用LED灯作为指示灯,用于显示运算符和结果。

2.软件设计:-通过键盘输入数字和运算符。

-将输入的数字和运算符转换成相应的控制信号。

-进行运算,并将结果显示在屏幕上。

3.功能实现:-实现加法、减法、乘法和除法运算。

-提供清零、退格和等号等功能。

-支持小数和负数的输入和运算。

-提供错误提示功能,例如除数不能为零等。

二、具体实现1.硬件实现:-将键盘矩阵的行和列与单片机的IO口相连,通过扫描来检测按键的输入。

-将显示器与单片机的IO口相连,通过控制引脚来发送和接收数据。

-将LED灯与单片机的IO口相连,设置相应的引脚状态来显示不同的指示信号。

2.软件实现:-使用C语言编写程序,通过中断和轮询的方式,实现键盘输入的检测和数据的读取。

-将读取到的数据进行解析,并根据不同的按键进行相应的操作。

-根据输入的数字和运算符,进行相应的运算并输出结果。

3.功能实现:-加法、减法、乘法和除法运算可以通过相应的算法实现,例如加法可以通过循环和位运算来实现。

-清零功能可以将运算结果和输入的数字都清零,退格功能可以删除输入的最后一个数字或运算符。

-支持小数运算可以在运算过程中进行进位和进位操作,支持负数运算可以通过判断运算符来进行相应的处理。

-错误提示功能可以通过对输入的数据进行检查和判断来实现,例如判断除数是否为零。

三、总结通过上述的设计和实现,我们可以成功地设计和制作一个单片机的简易计算器。

通过这个计算器,用户可以进行简单的加减乘除运算,同时还具备清零、退格、小数和负数等功能。

这个计算器可以应用在日常生活中的计算场景,方便用户进行各种简单的运算操作。

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

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

目录摘要 (1)关键字 (1)Abstract (1)Keywords (1)1 任务设计 (2)1.1 选题背景 (2)1.2 计算器介绍 (2)1.2.1 基本结构 (2)1.2.2 计算器的特点 (2)1.3 简易计算器的设计目标及任务 (2)2 系统设计 (3)2.1 系统整体设计 (3)2.2 系统硬件设计 (3)2.2.1 单片机最小系统 (3)2.2.2 液晶显示接口电路 (5)2.2.3 矩阵键盘电路 (5)2.2.4 总体电路连接图 (6)2.3 系统软件设计 (7)2.3.1键盘输入模块 (7)2.3.2控制模块 (7)2.3.4显示模块 (9)3 系统调试 (9)3.1 Proteus与Keil联合仿真调试 (9)3.2 软件仿真结果与硬件调试结果 (10)3.3 系统调试与存在的问题 (11)3.3.1 硬件调试问题 (11)3.3.2 软件调试问题 (11)4 总结 (12)参考文献 (13)附录 (14)曲阜师范大学单片机原理与应用课程设计报告题目简易计算器的设计姓名曹中李婷婷李文婧院系物理工程学院专业物联网工程指导教师黄勇坚职称副教授2015年9月日课程设计题目简易计算器的设计院(系)物理工程学院专业物联网工程指导教师黄勇坚职称副教授设计组成员姓名年级学号承担任务曹中2013 2013416989 编写程序,焊接电路李婷婷2013 2013417002 焊接电路,撰写论文李文婧2013 2013417003 编写程序,撰写论文一、课程设计内容及任务1.系统通过4×4的矩阵键盘输入数字及运算符。

2.可以进行6位十进制数以内的加法运算,如果计算结果超过6位十进制数,则屏幕显示E3.可以进行加法以外的计算(乘、除、减)。

4.其他功能(即除法可以显示并精确到小数点后七位)二、拟达到的设计要求或主要技术指标掌握单片机程序设计和微机接口应用的基本方法,并能综合运用所学软、硬件知识分析实际问题,提高解决课程设计实际问题的能力,为单片机应用和开发打下良好的基础。

51单片机简易计算器设计

51单片机简易计算器设计

51单片机简易计算器设计一、设计思路计算器的基本功能包括加法、减法、乘法和除法。

我们可以使用按键作为输入方式,将输入的数字和操作符暂时保存在内存中,然后根据操作符进行相应的运算。

最后再将运算结果显示在数码管上。

具体设计思路如下:1.确定计算器所需的硬件组件:数码管、按键、51单片机和相关电路。

2.定义按键与数字和操作符的对应关系。

3.编写51单片机的程序,实现按键输入、运算和结果显示的功能。

二、硬件设计1.数码管:使用常见的7段数码管作为显示器,通过引脚连接到51单片机的IO口。

2.按键:使用4个按键分别表示数字输入键、加法键、减法键和等于键。

三、软件设计1.初始化:将数码管引脚设为输出模式,将按键引脚设为输入模式。

2.按键处理:采用中断方式检测按键输入,通过编程判断所按的键。

3.数字输入:将按键所对应的数字保存在变量中,最多支持四位数的输入。

4.操作符输入:将按下的操作符保存在变量中。

5.运算:根据保存的操作符进行相应的运算,并将结果保存在变量中。

6.结果显示:将结果显示在数码管上。

四、代码实现下面是一个示例代码的框架,供参考:```c#include <reg52.h>sbit SDA = P0^0; // I2C总线数据线sbit SCL = P0^1; // I2C总线时钟线//定义按键的IO口sbit BUTTON0 = P1^0; // 数字输入键sbit BUTTON1 = P1^1; // 加法键sbit BUTTON2 = P1^2; // 减法键sbit BUTTON3 = P1^3; //等于键unsigned char num1 = 0; // 第一个操作数unsigned char num2 = 0; // 第二个操作数unsigned char op = 0; // 操作符unsigned char result = 0; // 运算结果//判断按键所对应的数字或操作符void buttonif (BUTTON0 == 0) // 数字输入键//将按键所对应的数字保存在变量中//显示数字}else if (BUTTON1 == 0) // 加法键//保存操作符为加号}else if (BUTTON2 == 0) // 减法键//保存操作符为减号}else if (BUTTON3 == 0) //等于键//根据保存的操作符进行相应的运算//将结果保存在变量中//显示结果}void mainwhile (1)button(; // 按键处理}```五、总结通过以上的设计思路和示例代码,我们可以轻松地实现一个简易的计算器。

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

单片机课程设计简易计算器设计
软件设计:编写程序代码,实现计算器的功能
调试与测试:对硬件和软件进行调试,确保计算器能够正常工作
制作报告:编写设计报告,包括需求分析、硬件设计、软件设计、调 试与测试等内容
Part Three
硬件设计
电路原理图设计
单片机:作为核心控制单元,负责接收输入信号、处理数据、输出结果 输入设备:键盘或触摸屏,用于输入数字和运算符号 显示设备:LED或LCD,用于显示计算结果 电源:提供稳定的电源电压,保证系统正常工作 连接线:将各个部件连接起来,实现信号传输和电源供应 保护电路:防止过压、过流、过热等异常情况对系统造成损害
成本:价格、开发成本、维护成本等
开发环境:开发工具、编程语言、开发 文档等
应用领域:计算器、智能家居、工业控 制等
兼容性:与其他硬件、软件的兼容性
技术支持:厂商技术支持、社区资源等
设计流程概述
需求分析:确定计算器的功能需求,如加减乘除、平方根等
硬件设计:选择合适的单片机型号,设计电路原理图,选择元器件
稳定性测试: 对集成后的系 统进行稳定性 测试,确保系 统在各种环境 下能够稳定运

安全性测试: 对集成后的系 统进行安全性 测试,确保系 统能够抵御各
种安全威胁
测试环境搭建
硬件环境:单片机、显示器、键盘、电源等 软件环境:单片机开发环境、测试软件等 测试工具:万用表、示波器、逻辑分析仪等 测试步骤:编写测试程序、执行测试程序、记录测试结果、分析测试结果等
功能测试与调试
测试方法:黑 盒测试、白盒 测试、灰盒测
试等
测试内容:输 入输出、功能 实现、性能指
标等
调试工具:调 试器、仿真器、 逻辑分析仪等
调试技巧:断 点设置、单步 执行、变量监

单片机课程设计报告——简易电子计算器

单片机课程设计报告——简易电子计算器
2
1、设计要求
通过软件编程,利用 AT89S51 单片机实现设计简易的计算器功能,即可实现 简单加减乘除。实现计算器的键盘输入,进行加、减、乘、除基本四则运算,并 在显示设备上显示相应的结果。要求撰写课程设计报告,并在设计报告中列写系 统方案,画出系统框图;然后分析工作原理、画出硬件电路原理图;同时画出程 序框图,给出程序清单;之后,写出系统调试分析结果。并在最后写出对于本次 课程设计的心得体会。
二、课程设计成果要求(包括课程设计说明书、图纸、图表、软硬件等要求) 1,课程设计报告; 2,系统方案,画出系统框图; 3,分析工作原理、画出硬件电路原理图; 4,画出程序框图,给出程序清单; 5,写出系统调试分析结果 三、课程设计工作进度计划 星期一:设计硬件电路,焊接电路板; 星期二:编写程序,调试并编译生成.hex 文件; 星期三:烧录程序,结合硬件调试程序; 星期四:演示结果,撰写课程设计报告; 星期五:修改报告,打印并答辩。 四、主要参考资料 1.《单片机原理及应用》张毅刚主编,高教出版社,2012.11 2. C51 单片机有关教材和文献资料
指导教师(签名): 2013 年 12 月 20 日
系主任(签名): 2013 年 12 月 20 日
1
目录
1、设计要求.................................................................................................................. 1 2、简易计算器系统设计.............................................................................................. 1 3、简易计算器系统硬件设计...................................................................................... 1

单片机课程设计计算器

单片机课程设计计算器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{a=a*10+a2[i];
}
if(a2[i]!=14&&a2[i]>9)
//
{m=1; w=a2[i];
四则运算的判断
}
if(a2[i]<10&&m==1) //
第二个数
{b=b*10+a2[i];
}
if(a2[i]==13||o==1)
//
清零
{o=0;
lcd_w_cmd(0x01);
lcd_w_cmd(0x80);
4 软件调试........................................................8 个人小结...........................................................8 参考文 献........................................................... 9 附 录............................................................... 9
lcd_w_dat(a1[ge]);}
if(wan==0&&qian!=0)
//
千位显示
{lcd_w_dat(a1[qian]);
lcd_w_dat(a1[bai]);
lcd_w_dat(a1[shi]);
lcd_w_dat(a1[ge]);}
if(wan==0&&qian==0&&bai!=0) //
delay1();
E=1;
delay1();
P1=dat;

单片机课程设计-计算器

单片机课程设计-计算器

未来发展方向
智能化:引入人工 智能技术,实现语 音识别、图像识别 等功能
便携化:设计更小、 更轻、更薄的计算 器,方便携带和使 用
网络化:实现计算 器与互联网的连接 ,实现远程控制和 数据传输
环保化:采用环保 材料和节能设计, 降低能耗和污染
感谢您的观看
汇报人:
计算器模式:支持科学计算器模式和普 通计算器模式
错误提示:当
体积小:单片机计算器体积小,便于携带和使用 功耗低:单片机计算器功耗低,可以长时间使用 功能强大:单片机计算器功能强大,可以进行各种复杂的计算 可编程:单片机计算器可编程,可以根据需要进行功能扩展和修改
显示模块
液晶显示屏:用 于显示计算结果 和操作提示
驱动电路:控制 液晶显示屏的显 示效果
接口电路:连接 液晶显示屏与单 片机
背光控制:调节 液晶显示屏的亮 度和对比度
输入模块
键盘输入:通过键盘输入数字 和运算符号
液晶显示:显示输入结果和操 作提示
电源模块:提供稳定的电源供 应
复位模块:用于系统复位和初 始化
弦等
算法设计:采 用模块化设计, 每个功能模块 对应一个算法
算法实现:使 用C语言编写算 法,实现计算
器功能
测试与调试:编 写测试程序,对 算法进行测试和 调试,确保算法 正确性和稳定性
中断服务程序
功能:处理突发事件,如按键、定时器等 结构:包括中断请求、中断响应、中断处理、中断返回等步骤 特点:速度快、实时性强、效率高 应用:广泛应用于各种单片机系统中,如计算器、遥控器等
存储模块
存储容量:根据计算器功能 需求选择合适的存储容量
存储芯片:用于存储计算器 程序和数据
存储方式:采用静态存储或 动态存储方式

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

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

目录摘要 (1)关键字 (1)Abstract (1)Keywords (1)1 任务设计 (2)1.1 选题背景 (2)1.2 计算器介绍 (2)1.2.1 基本结构 (2)1.2.2 计算器的特点 (2)1.3 简易计算器的设计目标及任务 (2)2 系统设计 (3)2.1 系统整体设计 (3)2.2 系统硬件设计 (3)2.2.1 单片机最小系统 (3)2.2.2 液晶显示接口电路 (5)2.2.3 矩阵键盘电路 (5)2.2.4 总体电路连接图 (6)2.3 系统软件设计 (7)2.3.1键盘输入模块 (7)2.3.2控制模块 (7)2.3.4显示模块 (9)3 系统调试 (9)3.1 Proteus与Keil联合仿真调试 (9)3.2 软件仿真结果与硬件调试结果 (10)3.3 系统调试与存在的问题 (11)3.3.1 硬件调试问题 (11)3.3.2 软件调试问题 (11)4 总结 (12)参考文献 (13)附录 (14)曲阜师范大学单片机原理与应用课程设计报告题目简易计算器的设计姓名曹中李婷婷李文婧院系物理工程学院专业物联网工程指导教师黄勇坚职称副教授2015年9月日课程设计题目简易计算器的设计院(系)物理工程学院专业物联网工程指导教师黄勇坚职称副教授设计组成员姓名年级学号承担任务曹中2013 2013416989 编写程序,焊接电路李婷婷2013 2013417002 焊接电路,撰写论文李文婧2013 2013417003 编写程序,撰写论文一、课程设计内容及任务1.系统通过4×4的矩阵键盘输入数字及运算符。

2.可以进行6位十进制数以内的加法运算,如果计算结果超过6位十进制数,则屏幕显示E3.可以进行加法以外的计算(乘、除、减)。

4.其他功能(即除法可以显示并精确到小数点后七位)二、拟达到的设计要求或主要技术指标掌握单片机程序设计和微机接口应用的基本方法,并能综合运用所学软、硬件知识分析实际问题,提高解决课程设计实际问题的能力,为单片机应用和开发打下良好的基础。

(完整)基于51单片机的简易计算器设计

(完整)基于51单片机的简易计算器设计

(完整)基于51单片机的简易计算器设计基于51单片机的简易计算器设计计算器作为一种常见的电子设备,既能满足日常生活的计算需求,又能帮助人们提高工作效率。

本文将介绍基于51单片机的简易计算器的设计。

该计算器具备加减乘除的基本计算功能,并支持用户输入和结果显示。

下面将从材料准备、电路连接和程序设计三个方面详细介绍该计算器的设计。

一、材料准备在设计计算器之前,我们需要准备以下材料:1. 51单片机开发板:用于控制计算器的整个运行过程;2. 液晶显示屏:用于显示用户输入的数字和计算结果;3. 数字按键:用于用户输入数字和运算符;4. 连接线:用于连接51单片机开发板、液晶显示屏和数字按键。

二、电路连接1. 连接液晶显示屏和51单片机开发板:将液晶显示屏的VCC、GND、SCL和SDA引脚分别与开发板上对应的引脚连接。

2. 连接数字按键和51单片机开发板:将数字按键的引脚依次与开发板上的IO口引脚连接,其中有一根引脚需要连接到开发板的中断口。

三、程序设计1. 初始化设置:在程序开始时,进行液晶显示屏和数字按键的引脚初始化设置,以及相应的中断设置。

2. 输入处理:通过数字按键输入,获取用户输入的数字和运算符,并将其保存到相应的变量中。

3. 运算处理:根据用户输入的运算符,对相应的数字进行加、减、乘、除的运算,并将结果保存到一个变量中。

4. 结果显示:将运算结果显示在液晶显示屏上,以便用户查看计算结果。

5. 重置处理:在每次运算结束后,对相关变量进行重置,以便下一次计算。

通过以上程序设计,我们可以完成基于51单片机的简易计算器的设计。

在实际使用过程中,用户只需要通过数字按键输入相应的数字和运算符,计算器就可以自动进行运算,并将结果显示在液晶显示屏上,方便用户进行查看。

总结本文介绍了基于51单片机的简易计算器的设计。

通过合理的材料准备、电路连接和程序设计,我们可以实现一个具备加减乘除功能的计算器。

该计算器不仅能满足人们日常的计算需求,还能帮助提高工作效率。

单片机课程设计报告(简易计算机)

单片机课程设计报告(简易计算机)

专业综合课程设计任务书班级:学号:姓名:成绩:电子与信息工程学院计算机科学系图1.2 图1.3图1.42.3键盘电路这部分有16个button构成4*4矩阵,通过p1口进行行扫描方式实现按键的读取。

硬件电路图如图1.4。

2.4总体硬件图如图1.5图1.53 软件详细设计3.1键盘扫描子程序要进行数据的计算就必须进行数据的输入,也就是确定按键输入的数值是什么,这就需要对键盘进行行扫描,从而确定究竟是那个键按下。

对于键盘的扫描,既可以使用行扫描也可以使用列扫描,这里采用行扫描的方法完成对键盘的扫描行扫描就是逐行扫描键盘,看那一行有键按下,再通过返回的见马来确定究竟是哪个按键按下。

对第一行扫描就置p1.0为底电平,其余p1口为高电平,如果有按键按下,则p1口的值就会变为别的值,再由新值来确定是那个键按下。

程序流程图如图1.6图1.6dd:mov r0,#0f7h mov r1,#0cc:mov a,r0 mov p1,amov a,p1 mov r2,asetb c mov r3,#4bb:rlc a jnc aaee:inc r1 djnz r3,bbmov a,r0 setb crrc a mov r0,ajc cc ljmp ddKAOO:LJMP KAO BBB2:LJMP BB2aa:lcall mm mov a,p1xrl a,r2 nz eeff:mov a,p1 xrl a,r2jz ff MOV A,51HCJNE A,#1,BBB2RET3.4主程序及其他部分程序下图为主程序流程图:主要有:初始化子程序,清屏子程序,固定字符显示,单元定义,端口定义,字模部分。

主程序:RG 0LJMP STARTSTART:MOV SP,#60HLCALL INT ;调用初始化子程序START1:LCALL CLEAR ;调用清屏子程序初始化子程序:INT: MOV COM,#0C0H ;设置显示起始行为第一行LCALL PRM0LCALL PRR0MOV COM,#3FH ;开显示设置LCALL PRM0LCALL PRR0RET清屏子程序:CLEAR:MOV R4,#00H。

基于51单片机的简易计算器设计

基于51单片机的简易计算器设计

基于51单片机的简易计算器设计设计一个基于51单片机的简易计算器,主要功能包括加减乘除四则运算和百分数计算。

下面是设计的详细步骤:1.硬件设计:-使用51单片机作为主控芯片。

-连接16x2的LCD显示屏,用于显示输入和计算结果。

-连接16个按键开关,用于输入运算符和数字。

-连接4个LED灯,用于指示四则运算的选择。

2.软件设计:-初始化LCD显示屏,并显示欢迎信息。

-监听按键输入,在接收到输入后,根据输入的按键值判断操作类型。

-如果按键值对应数字键,保存输入的数字,并在LCD上显示当前输入的数字。

-如果按键值对应四则运算符(+、-、*、/),保存当前输入的数字,并保存运算符。

-如果按键值对应等号(=),根据保存的数字和运算符进行相应的运算,计算结果保存并显示在LCD上。

-如果按键值对应清零(C),将所有保存的数据清空,并显示初始状态。

-如果按键值对应百分号(%),将当前数字除以100并显示在LCD上。

3.主要函数说明:- void init_lcd(:初始化LCD显示屏。

- void display_lcd(char* str):将指定字符串显示在LCD上。

- void clear_lcd(:清空LCD显示屏。

- char get_key(:获取按键输入的值。

- void calculate(:根据保存的数字和运算符进行计算。

- void add_digit(char digit):将输入的数字添加到当前数字中。

- void set_operator(char op):保存运算符。

- void clear_data(:清空所有保存的数据。

4.主要流程:-初始化LCD显示屏并显示欢迎信息。

-在循环中监听按键输入,并根据输入的按键值进行相应的操作。

-根据不同的按键值,调用不同的函数进行处理。

-最后计算结果显示在LCD上。

以上是基于51单片机的简易计算器设计的详细步骤和主要函数说明。

你可以根据这个设计框架进行具体的代码实现。

单片机课程设计报告-简易计算器

单片机课程设计报告-简易计算器

目录一、概述 (2)二、实验内容 (2)三、硬件设计 (3)1 设计总体框图 (3)2 实际电路 (3)(1)复位电路 (4)(2)时钟电路 (5)(3)EA/VPP(31脚)的功能和接法 (6)(4)键盘输入电路 (6)(5)数码管显示电路 (7)四、软件设计 (8)1 程序内容 (8)2 C语言程序 (9)五、Protues仿真 (9)六、设计总结 (10)七、附录 (11)1 C语言程序: (11)2焊接电路板实物图 (18)3 芯片引脚图 (19)一、概述单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。

单片机课程设计内容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。

单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机内部资源及外部IO口的功能扩展,使制作的单片机系统具有一定的功能。

二、实验内容自制一个单片机最小系统,包括串口下载、复位电路,采用外部小键盘输入数据,能够实现加法、乘法及一个科学计算,计算结果显示在四位一体的数码管上。

三、硬件设计1 设计总体框图2实际电路在单片机系统中,复位电路是非常关键的,当程序跑飞(运行不正常)或死机(停止运行)时,就需要进行复位。

MCS-5l 系列单片机的复位引脚RST(第9 管脚)出现2个机器周期以上的高电平时,单片机就执行复位操作。

如果RST 持续为高电平,单片机就处于循环复位状态。

复位操作通常有两种基本形式:上电自动复位和开关复位。

上电瞬间,电容两端电压不能突变,此时电容的负极和RESET 相连,电压全部加在了电阻上,RESET 的输入为高,芯片被复位。

随之+5V 电源给电容充电,电阻上的电压逐渐减小,最后约等于0,芯片正常工作。

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

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

课设报告题目:简易计算器班级:姓名:学号:指导老师:日期: 2013 年 10月 11 日目录一.前言 (1)二.课程设计的目的和要求 (1)2.1课程设计的目的 (1)2.2课程设计要求 (1)三.总体设计 (2)基本工作原理 (2)系统组成单元 (2)四.硬件设计键盘输入部分 (4)简易计算器的电路原理图 (4)系统选用的主要元器件 (5)4.2.1 AT89C51简介 (5)4.2.2 LCD显示器(1602) (5) (6)五.软件设计 (6)六.心得体会 (6)七.源程序 (7)一.前言单片机课程设计是单片机原理课程的实践性环节。

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

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

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

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

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

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

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

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

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

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

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

题目:简易计算器班级:姓名:学号:指导老师:日期: 2013 年 10月 11 日课设报告目录一.前言 (1)二.课程设计的目的和要求 (1)2.1课程设计的目的 (1)2.2课程设计要求 (1)三.总体设计 (2)3.1基本工作原理 (2)3.2系统组成单元 (2)四.硬件设计键盘输入部分 (4)4.1简易计算器的电路原理图 (4)4.2系统选用的主要元器件 (5)4.2.1 AT89C51简介 (5)4.2.2 LCD显示器(1602) (5)4.2.3其他 (6)五.软件设计 (6)六.心得体会 (6)七.源程序 (7)一.前言单片机课程设计是单片机原理课程的实践性环节。

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

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

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

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

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

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

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

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

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

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

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

RST:复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

/PSEN:外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN 3信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

电源电路部分在各种电子设备中,直流稳压电源是必不可少的组成部分,它是电子设备唯一能量来源,它的设计思路是根据我们以前学过的模电电子技术,要想得到我们所要的+6V输出电压,就需将交流220V的电压经过变压器、整流电路、滤波电路和稳压电路四个部分。

LCD输出显示部分1602采用标准的16脚接口,其管脚功能介绍如下:1:VSS为电源地2:VDD接5V电源正极3:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。

4:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

5:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

6:E(或EN)端为使能(enable)端。

7~14:D0~D7为8位双向数据端。

15~16:空脚或背灯电源。

15脚背光正极,16脚背光负极。

四.硬件设计键盘输入部分矩阵式键盘由行线和列线组成,按键位于行和列的交叉点上,很明显,在所需按键数量较多时能节省很多的I/O口。

4.1简易计算器的电路原理图4.2系统选用的主要元器件4.2.1 AT89C51简介AT89C51是一种带4K 字节FLASH 存储器(FPEROM—FlashProgrammable and Erasable ReadOnly Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K 字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C51 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

4.2.2 LCD显示器(1602)工业字符型液晶,能够同时显示16x02即32个字符。

(16列2行)1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

4.2.3其他按钮开关(SW-PB),排阻(9管脚,1k),电阻、电容、晶振、发光二极管等若干。

五.软件设计该计算器系统的软件设计分为以下几个模块:(1)主程序模块,(2)键盘扫描及识别子程序,(3)显示子程序,(4)计算程序。

六.得体会此次课程设计我和同学通过团队合作完成,从中知道以及团队合作的重要性。

本次课程设计用到了单片机的多块模块,团队分工完成彼此的模块,从而提高团队合作的效率。

实验的完成让我更加了解单片机的编程和单片机的各个模块的工作方式。

七.源程序如下:#include<reg51.h>#include<intrins.h>#define int8 unsigned char#define int16 unsigned intsbit EN=P2^3; //定义引脚sbit RS=P2^4;sbit RW=P2^0;sbit busy=P0^7;char code num[]={7,8,9,'*',4,5,6,'/',1,2,3,'-','c',0,'=','+'};char code num1[]={'0','1','2','3','4','5','6','7','8','9'};static char ckey; //当前按键字符long a,b;//前后两数char flag;//是否有符号键按下char f;//判断按下的是什么符号键(+,-,*,/)long result;//运算结果static int16 c=0;//字符显示位置void delay_ms(int8 z); // 延迟函数void wait_busy();//忙等待void write_cmd(int8 cmd);//写指令void write_data(int8 dat);//写数据void Initialize_LCD(); //1602 初始化void LCD_ShowString(int8 r, int8 c,int8 *str); //在指定位置显示字符串void keyboard();//键盘按键扫描void digit_a(); //加减乘除处理void digit_b();//a和b运算的结果在1602上显示void digit_c();//把输入的数存入到a和b//------------------------------------------------------------------------------------------------------//名称:lcd1602液晶屏控制与显示程序//------------------------------------------------------------------------------------------------------//-------------------------------------------------------------------------------------------------------------//延时//-------------------------------------------------------------------------------------------------------------void delay_ms(int8 z) // 延迟函数{int8 y;for(z;z>0;z--)for(y=0;y<110;y++);}//-------------------------------------------------------------------------------------------------------//忙等待//-------------------------------------------------------------------------------------------------------void wait_busy(){do{P0=0XFF;RS=0;RW=1;EN=0;delay_ms(1);EN=1;}while(busy==1);}//---------------------------------------------------------------------------------------------------------//写指令//---------------------------------------------------------------------------------------------------------void write_cmd(int8 cmd){P0=cmd;RS=0;RW=0;EN=0;wait_busy();EN=1;}//-----------------------------------------------------------------------------------------------------------//写数据//-----------------------------------------------------------------------------------------------------------void write_data(int8 dat){P0=dat;RS=1;RW=0;EN=0;wait_busy();EN=1;}-------------------------------//1602 初始化//------------------------------------------------------------------------------------------------------------void Initialize_LCD(){write_cmd(0x38);write_cmd(0x0c);write_cmd(0x06);write_cmd(0x80);write_cmd(0x01);a=0;b=0;flag=0;result=0;c=0;ckey=0;}//-----------------------------------------------------------------------------------------------------------//在指定位置显示字符串//----------------------------------------------------------------------------------------------------------void LCD_ShowString(int8 r, int8 c,int8 *str){int8 i=0;code int8 DDRAM[]={0X80,0XC0};write_cmd(DDRAM[r] | c);for(i=0;str[i] && i<16;i++)write_data(str[i]);for(;i<16;i++)write_data(' ');}//------------------------------------------------------------------------------//键盘按键扫描-void keyboard(){int16 h_code,l_code,key_code;P3=0xf0;h_code=P3;h_code=h_code&0xf0;delay_ms(200);P3=0x0f;l_code=P3;l_code=l_code&0x0f;delay_ms(200);key_code=h_code|l_code;if(key_code!=0xFF){switch(key_code){case 0xee: LCD_ShowString(0,c++,"7");ckey=num[0];digit_c(); break; //输入字符7case 0xde: LCD_ShowString(0,c++,"8");ckey=num[1];digit_c(); break; //输入字符8case 0xbe: LCD_ShowString(0,c++,"9");ckey=num[2];digit_c(); break; //输入字符9case 0x7e: LCD_ShowString(0,c++,"*");flag=1;f=0; break; //输入字符*case 0xed: LCD_ShowString(0,c++,"4");ckey=num[4];digit_c();break; //输入字符4case 0xdd: LCD_ShowString(0,c++,"5");ckey=num[5];digit_c(); break; //输入字符5 ;case 0xbd: LCD_ShowString(0,c++,"6");ckey=num[6];digit_c();break; //输入字符6case 0x7d: LCD_ShowString(0,c++,"/");flag=1;f=1; break; //输入字符 case 0xeb: LCD_ShowString(0,c++,"1");ckey=num[8];digit_c(); break; //输入字符1case 0xdb: LCD_ShowString(0,c++,"2");ckey=num[9]; digit_c(); break; //输入字符2case 0xbb: LCD_ShowString(0,c++,"3");ckey=num[10];digit_c(); break; //输入字符3case 0x7b: LCD_ShowString(0,c++,"-");flag=1;f=2; break; //输入字符-case 0xe7: flag=0;f=4;digit_a();break; //输入字符ccase 0xd7: LCD_ShowString(0,c++,"0");ckey=num[13];digit_c();break; //输入字符0case 0xb7: digit_a();break; //输入字符=case 0x77: LCD_ShowString(0,c++,"+");flag=1;f=3; break; //输入字符+default : break;}if(c>15){c=0;}}}//-------------------------------------------------------------------------------// 数据处理//-------------------------------------------------------------------------------void digit_a() //加减乘除处理{switch(f){case 0:result=a*b;digit_b();break;case 1: result=a/b;d igit_b();break;case 2: result=a-b;digit_b();break;case 3: result=a+b;digit_b();break;case 4: Initialize_LCD();break;default:break;}}void digit_b() //a和b运算的结果在1602上显示{int8 i=0,j=0,k;long r;r=result;while(0!=result){result/=10;i++;}if(result==0){write_cmd(0x80+0x4f);write_data(num1[0]);}for(;j<i;j++){k=r/10;r%=10;write_cmd(0x80+0x4f-j);write_data(num1[r]);r=k;}write_cmd(0x80+0x4f-i-1);write_data('=');}void digit_c()//把输入的数存入到a和b{if(flag==0){a=ckey+a*10;}else{b=ckey+b*10;}}//---------------------------------------------------------------------------- // 主函数//-------------------------------------------------------------------------------void main(){Initialize_LCD();while(1){keyboard();}}。

相关文档
最新文档