单片机简易计算器课程设计
- 格式:doc
- 大小:117.50 KB
- 文档页数:19
51单片机计算器课程设计一、课程目标知识目标:1. 让学生掌握51单片机的基本原理及其在计算器中的应用。
2. 使学生理解并掌握计算器程序设计的步骤和要点,包括键盘输入、显示输出、数据处理等。
3. 帮助学生了解并掌握基本的数字逻辑运算,如加、减、乘、除等。
技能目标:1. 培养学生运用51单片机进行计算器硬件设计和程序编写的能力。
2. 培养学生运用Keil等开发工具进行51单片机程序开发的能力。
3. 培养学生通过查阅资料、团队协作解决实际问题的能力。
情感态度价值观目标:1. 激发学生对电子技术和编程的兴趣,培养其主动学习的态度。
2. 培养学生的创新意识和动手能力,使其具备解决问题的信心。
3. 培养学生良好的团队协作精神和沟通能力,提高其综合素质。
课程性质:本课程为实践性较强的课程,注重培养学生的动手能力和实际问题解决能力。
学生特点:学生具备一定的电子技术基础和编程能力,对51单片机有一定了解。
教学要求:结合学生特点,注重理论与实践相结合,以项目为导向,引导学生主动探索、实践和解决问题。
通过课程学习,使学生达到预定的知识目标和技能目标,并培养其情感态度价值观。
在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 51单片机原理回顾:涉及51单片机的内部结构、工作原理、寄存器等基础知识。
相关教材章节:第一章《51单片机概述》2. 计算器功能设计:介绍计算器的基本功能,如数字输入、运算符选择、结果显示等。
相关教材章节:第二章《51单片机I/O口应用》3. 硬件电路设计:讲解计算器硬件电路的搭建,包括键盘电路、显示电路等。
相关教材章节:第三章《51单片机硬件设计基础》4. 程序设计:分析计算器程序设计的流程,包括程序框架、各功能模块的实现等。
相关教材章节:第四章《51单片机C语言编程》5. 软件开发工具使用:介绍Keil开发环境的使用方法,编译、下载程序到51单片机。
51简易计算器课程设计一、课程目标知识目标:1. 学生能理解并掌握51简易计算器的基本原理和功能。
2. 学生能够运用所学的编程知识,编写出具备加、减、乘、除基本运算功能的51简易计算器程序。
3. 学生能够理解并运用51单片机的内外部中断,实现计算器按键识别与功能调用。
技能目标:1. 学生能够熟练使用51单片机的开发环境和编程工具。
2. 学生通过实践操作,掌握51单片机的I/O口编程,提高动手实践能力。
3. 学生能够通过团队协作,解决编程过程中遇到的问题,提升问题解决能力。
情感态度价值观目标:1. 学生培养对单片机编程的兴趣,增强学习计算机科学的热情。
2. 学生在课程实践中,养成动手操作、观察问题、思考问题的良好习惯。
3. 学生通过团队协作,培养沟通与协作意识,增强团队荣誉感。
本课程针对五年级学生设计,课程性质为实践性较强的信息技术课程。
结合学生特点,课程目标注重培养学生的学习兴趣和动手能力,同时考虑教学要求,将目标分解为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容1. 51单片机基本原理与结构:介绍51单片机的组成、工作原理及特点,让学生对51单片机有整体的认识。
- 教材章节:第一章 51单片机概述2. 51单片机开发环境与编程工具:学习如何搭建51单片机开发环境,掌握编程工具的使用。
- 教材章节:第二章 51单片机开发环境与编程工具3. I/O口编程:学习51单片机I/O口的基本操作,实现计算器按键输入与LED显示。
- 教材章节:第三章 I/O口编程与应用4. 基本运算程序编写:学习编写加、减、乘、除基本运算的程序,掌握运算逻辑。
- 教材章节:第四章 算术运算程序设计5. 中断编程与应用:学习51单片机中断原理,运用外部中断实现按键识别与功能调用。
- 教材章节:第五章 中断系统及其应用6. 简易计算器程序设计与实现:将所学知识综合运用,设计并实现具备基本运算功能的简易计算器。
- 教材章节:第六章 综合应用实例教学内容根据课程目标进行科学性和系统性组织,制定详细的教学大纲,确保教学内容的安排和进度。
51单⽚机简易计算器设计-51单⽚机简易计算器课程设计⽬录⼀、设计任务和要求 (2)1、设计要求 (2)2、设计⽅案的确定 (2)⼆、硬件设计 (2)1、单⽚机最⼩系统 (2)2、键盘电路的设计 (3)3、显⽰电路的设计 (3)4、系统硬件电路图 (4)三、软件设计 (5)1 系统设计 (5)2 显⽰电路的设计 (6)3、程序清单 (8)四、调试与仿真 (14)五、试验箱实物图 (14)六、⼼得体会 (15)⼀、设计任务和要求1、设计要求利⽤单⽚机设计并制作简易计算器。
具体要求如下:1、4*4按键⽤于0~9的数字输⼊、加减乘除、等于、清零功能;2、能实现简单的加减乘除运算;3、输⼊数字及计算结果通过LED或LCD显⽰器显⽰。
2、设计⽅案的确定按照设计要求,本课题需要使⽤数码管显⽰和扩展4*4键盘,由于AT89C51芯⽚的I⼝不够多,⽽且为了硬件电路设计的简单化,故选择串⾏动态显⽰和⽤P1⼝扩展4*4键盘,扩展的4*4键盘定义⼗个数字键,六个功能键,使⽤串⾏动态显⽰显⽰运算结果。
主程序进⾏初始化,采⽤⾏列扫描进⾏查表得出键值,每次按键后调⽤显⽰⼦程序。
⼆、硬件设计简易数字计算器系统硬件设计主要包括:键盘电路,显⽰电路以及其他辅助电路。
下⾯分别进⾏设计。
1.单⽚机最⼩系统单⽚机最⼩系统就是⽀持主芯⽚正常⼯作的最⼩部分,包括主控芯⽚、复位电路和晶振电路。
(1)、复位电路复位电路本设计采⽤上电与⼿动复位电路,电阻分别选取100和10K,电容选取10uF,系统⼀上电,芯⽚就复位,或者中途按按键也可以进⾏复位。
(2)、晶振电路图三晶振电路晶振电路是单⽚机的⼼脏,它⽤于产⽣单⽚机⼯作所需要的时钟信号。
单⽚机的晶振选取11.0592MHz,晶振旁电容选取30pF。
2.键盘电路的设计键盘可分为两类:编码键盘和⾮编码键盘。
编码键盘是较多按键(20个以上)和专⽤驱动芯⽚的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,⽆需系统软件⼲预。
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(; // 按键处理}```五、总结通过以上的设计思路和示例代码,我们可以轻松地实现一个简易的计算器。
单片机课程设计 计算器一、课程目标知识目标:1. 学生能理解单片机的基本原理和功能,掌握计算器的设计流程。
2. 学生能运用所学知识,设计并实现一个具有基本运算功能的单片机计算器。
3. 学生了解并掌握单片机编程的基本语法和逻辑结构。
技能目标:1. 学生掌握使用单片机开发工具进行程序编写、调试和下载的方法。
2. 学生具备分析问题、设计算法和解决问题的能力,能运用单片机技术解决实际计算问题。
3. 学生能够通过小组合作,进行项目设计和实践,提高团队协作能力。
情感态度价值观目标:1. 学生培养对单片机技术及电子工程的兴趣,激发创新意识和探索精神。
2. 学生通过动手实践,体验成功解决问题的喜悦,增强自信心和自主学习能力。
3. 学生在学习过程中,树立正确的价值观,认识到科技发展对社会进步的重要性。
课程性质:本课程为实践性较强的课程,要求学生在理论学习的基础上,动手实践,完成单片机计算器的设计与制作。
学生特点:学生处于高年级阶段,已具备一定的电子技术基础和编程能力,具备独立思考和解决问题的能力。
教学要求:结合学生特点,注重理论与实践相结合,引导学生通过小组合作,完成课程任务,达到课程目标。
同时,关注学生的个性差异,提供个性化的辅导和支持。
在教学过程中,注重培养学生的创新能力、实践能力和团队协作能力,为后续学习打下坚实基础。
二、教学内容根据课程目标,教学内容分为以下三个部分:1. 理论知识学习:- 单片机原理与结构:讲解单片机的组成、工作原理及性能特点,对应教材第1章。
- 编程语言基础:介绍单片机编程的基本语法、逻辑结构和编程规范,对应教材第2章。
2. 实践技能培养:- 硬件设计与连接:学习如何选用合适的元器件,设计计算器硬件电路,对应教材第3章。
- 软件编程与调试:掌握单片机程序编写、调试和下载的方法,对应教材第4章。
3. 项目实践:- 计算器设计与实现:结合所学知识,分组进行计算器项目设计,包括硬件选型、电路设计、程序编写和调试等,对应教材第5章。
基于51单片机简易计算器课程设计报告
基于51单片机简易计算器课程设计报告
1. 研究背景
•计算器是人们日常生活和工作中常用的工具之一。
•通过设计简易计算器,可以加深学生对51单片机的理解和应用。
2. 目标和需求
•设计一个基于51单片机的简易计算器,能够进行基本的四则运算和开方运算。
•要求计算器能够显示输入和计算结果。
•要求计算器具备简单的界面和操作。
3. 设计方案
•使用51单片机作为计算器的控制核心。
•通过键盘输入数字和运算符,并显示在液晶屏上。
•根据输入的运算符,进行相应的计算,并将结果显示在液晶屏上。
4. 硬件设计
•使用51单片机作为主控芯片。
•连接液晶屏模块,用于显示输入和计算结果。
•连接键盘模块,用于输入数字和运算符。
5. 软件设计
•使用C语言进行编程。
•设计主程序,包括初始化、输入处理和计算输出等功能。
•设计函数,实现基本的四则运算和开方运算。
6. 实验结果
•成功设计并实现了基于51单片机的简易计算器。
•可以正常进行基本的四则运算和开方运算。
•输入和计算结果能够准确显示在液晶屏上。
7. 总结与展望
•通过设计这个简易计算器,学生对51单片机的理解和应用能力有了提高。
•下一步可以考虑增加更多的功能,如科学计算和数据存储等。
以上是本次基于51单片机简易计算器课程设计的报告。
通过这个实验,学生对51单片机的应用能力得到了提升,进一步增强了对计算器的理解。
在未来的课程设计中,可以进一步拓展功能,提升计算器的实用性和功能性。
目录1.总体方案选择 (2)1.1 实验要求: (2)1.2方案设计 (2)2.硬件原理电路图的设计及分析 (3)2.1主控模块 (3)2.1.1 STC89C52单片机主要特性 (3)2.1.2 STC89C52单片机管脚图 (4)2.1.3 STC89C52单片机的中断系统 (5)2.1.4 STC89C52单片机的定时/计数器 (5)2.2矩阵键盘模块设计: (5)2.2.1矩阵键盘原理介绍 (5)2.2.2矩阵键盘电路设计 (6)2.3 LCD液晶显示器简介 (7)2.3.1液晶模块简介 (7)2.3.2液晶显示部分与89S52的接口 (8)3系统软件设计 (10)3.1系统软件流程图 (10)3.2系统整体原理图 (11)4.系统调试 (12)4.1硬件调试 (12)4.2软件调试 (12)4.3调试结果 (13)5.心得体会131.总体方案选择1) 1.1 实验要求:2)通过小键盘实现数据的输入, 并在LED数码管上显示3)实现+、-、*、/4)在LED数码管上显示结果并有清零, 退出功能1.2方案设计本系统以STC89C52单片机为控制核心, 对系统进行初始化, 主要完成对键盘的响应、液晶显示灯功能的控制, 起到总控和协调各模块之间工作的作用。
单片机通过检测键盘读取使用者按下对用功能的按键, 然后通过单片机内部运放把运算的结果显示在液晶屏幕上。
图1-1系统结构框图本系统结构如图1-1所示, 本设计可分为以下模块: 单片机主控模块、键盘模块、功率放大模块、闹铃模块、按键设置模块。
下面对各个模块的设计方案逐一进行论证分析。
2.硬件原理电路图的设计及分析2.1主控模块STC89C52有40个引脚, 4个8位并行I/O口, 1个全双工异步串行口, 同时内含5个中断源, 2个优先级, 2个16位定时/计数器。
STC89C52的存储器系统由4K的程序存储器(掩膜ROM), 和128B的数据存储器(RAM)组成。
单片机课程设计课题名称:单片机简易计算器课程设计姓名:XXXX 学号:XXXXXX 年级专业班级:XXXXXXX学院:XXXX设计时间:XXXXXXX设计地点:XXXXXX指导老师:**目录一、单片机课程设计实习目的 (2)1、增进对单片机的感性认识,加深对单片机理论方面的理解; (2)2、掌握单片机的内部功能模块的应用,如定时器/计数器、中断、存贮器、I/O口等; (2)3、了解和掌握单片机应用系统的软硬件设计过程及实现方法。
(2)二、实习课题任务 (2)1、课题:简易计算器的设计 (2)2、设计基本要求: (2)利用单片机试验箱的键盘模块以及显示模块实现百位以内加减乘除。
(2)任选一种显示方式:即中文液晶显示屏、LED数码管可任选一种。
(2)3、功能实现: (2)4、设计任务 (2)5、设计思路 (2)三、系统分析 (4)四、硬件系统设计 (5)1、键盘接口电路 (5)2、数码管显示电路 (6)五、软件系统设计 (6)六、调试结果 (7)1)10以内计算器 (7)2)100以内计算器 (7)七、结论 (8)八、体会与收获 (8)九、附件(程序): (9)1、程序一:只能进行两位数与两位数格式的四则运算 (9)2、程序二:能进行百位以内的四则运算,但一位与两位数运算结果调试不对 (18)一、单片机课程设计实习目的1、增进对单片机的感性认识,加深对单片机理论方面的理解;2、掌握单片机的内部功能模块的应用,如定时器/计数器、中断、存贮器、I/O 口等;3、了解和掌握单片机应用系统的软硬件设计过程及实现方法。
二、实习课题任务1、课题:简易计算器的设计2、设计基本要求:利用单片机试验箱的键盘模块以及显示模块实现百位以内加减乘除。
任选一种显示方式:即中文液晶显示屏、LED数码管可任选一种。
3、功能实现:计算器将完成的功能有两位数以内加、减、乘、除功能,并通过LED数码管显示输入值及结果。
4、设计任务1.扩展4*4键盘,其中10个数字,5个功能键,1个清零2.使用五位数码管接口电路3.完成十进制的四则运算(加、减、乘、除);4.实现低于三位小于255数字的连续运算;5.使用keil C软件编写程序;6.最后用ptoteus仿真;7.具有较强的抗干扰能力;8.体积小、功耗低,便于嵌入其他系统。
目录摘要 (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.其他功能(即除法可以显示并精确到小数点后七位)二、拟达到的设计要求或主要技术指标掌握单片机程序设计和微机接口应用的基本方法,并能综合运用所学软、硬件知识分析实际问题,提高解决课程设计实际问题的能力,为单片机应用和开发打下良好的基础。
单片机简易计算器设计(二)引言:单片机简易计算器是一种以单片机为核心实现基本算术运算的小型电子设备。
本文继续探讨单片机简易计算器的设计方案,并详细介绍了其具体实现步骤和功能。
正文:第一大点:电路设计1. 选择适当的单片机型号2. 设计电源电路,确保稳定供电3. 搭建输入输出电路,包括按键和显示模块的连接4. 设计外部调试接口,方便程序的调试和更新5. 进行电路的模拟仿真和实际测试,确保电路的正常工作第二大点:程序编写1. 定义输入输出的数据结构2. 编写初始化程序,配置端口和寄存器3. 编写按键扫描程序,实现按键的读取和编码4. 编写基本算术运算程序,包括加法、减法、乘法和除法5. 编写显示程序,将结果显示在数码管或液晶屏上第三大点:算法优化1. 选择合适的算法,使计算速度尽可能快2. 使用位运算代替乘除法运算,提高运算效率3. 使用查表法来加速计算过程4. 增加缓存机制,优化存储空间的使用5. 对程序进行反复优化和测试,确保算法的准确性和高效性第四大点:错误处理与异常处理1. 设计输入错误的检测机制,防止用户输入无效的数据2. 处理溢出和除零等运算错误,避免程序崩溃3. 设计异常处理程序,对错误输入进行友好提示4. 进行充分的测试和调试,确保程序的稳定性5. 添加日志功能,记录错误信息和运行状态,便于排查问题第五大点:功能扩展1. 添加科学计算功能,如平方根、三角函数等2. 实现单位换算功能,方便不同单位之间的转换3. 增加储存器功能,可以保存计算结果或中间数据4. 设计菜单界面,使用户可以自由选择不同的功能5. 进行实际应用测试,检验扩展功能的可靠性和实用性总结:本文对单片机简易计算器的设计进行了全面的阐述。
通过合理的电路设计、程序编写和算法优化,以及错误和异常处理,使得计算器具备稳定高效的运算能力。
同时还介绍了功能扩展方面的设计思路,为后续的开发和升级提供了参考。
课程设计题目名称简易计算器设计课程名称单片机原理及应用学生姓名班级学号2018年6 月20日目录一设计目的 (2)二总体设计及功能介绍 (2)三硬件仿真图 (3)四主程序流程图 (3)五程序源代码 (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软件的使用,按照题目所要求来进行分析,设计,连接电路图,调试,最终完成计算器的仿真。