单片机 简易加法计数器
51单片机简易计算器

P3=0xf7;
0x7b:
temp=P3; temp=temp&0xf0; if(temp!=0xf0) {
delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) {
temp=P3; switch(temp) {
case 0xe7:
case 0xd7:
//5
case 0xbd:num1=10*num1+3;num=num1;break;
//6
case 0x7d:// -
num2=num1;num1=0;
flag=2;break;
} while(temp!=0xf0) { temp=P3; temp=temp&0xf0; }
}
}
P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb:
break;
num1=10*num1+4; num=num1;
case 0xdb: break;
num1=10*num1+5; num=num1;
case 0xbb: break;
num1=10*num1+6; num=num1;
case // *
num2=num1; num1=0;
flag=3; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } }
基于51单片机的简易计算器

基于51单片机的简易计算器51单片机是一种广泛应用于嵌入式系统中的常用微控制器。
我们可以利用51单片机的强大功能和丰富的外设资源,设计一个简易计算器。
这个计算器可以进行基本的加减乘除运算,并且具备显示结果的功能。
首先,我们需要准备一块51单片机开发板,一块1602液晶显示屏模块,以及一些按键开关和电阻。
我们可以将运算器主要分为以下几个模块:数码管显示模块、键盘输入模块、运算模块和存储模块。
数码管显示模块:我们使用1602液晶显示屏模块来显示计算器的结果。
我们可以通过51单片机的IO口,将计算结果发送给液晶显示屏模块,实现结果的显示。
键盘输入模块:我们可以使用几个按键开关来实现数字和运算符的输入。
通过对按键的检测,我们可以将用户输入的数字和运算符转化为字符形式,并保存到内存中。
运算模块:我们需要根据用户输入的数字和运算符,进行相应的运算。
我们可以使用栈来实现这个功能。
栈是一种常用的数据结构,具有"先进后出"的特点。
我们可以将用户输入的数字和运算符按照一定的规则入栈,然后按照相应的顺序进行出栈和运算。
最后将结果保存到内存中。
存储模块:我们可以使用内部RAM来保存运算结果。
51单片机的内部RAM具有一定的存储能力,可以满足我们的基本需求。
在编写程序时,我们可以使用汇编语言或者C语言。
通过合理的编程,我们可以实现计算器的各项功能。
总结一下,基于51单片机的简易计算器主要包括数码管显示模块、键盘输入模块、运算模块和存储模块。
我们可以通过合理的编程,将这些模块相互配合,实现一个功能完善的计算器。
这个计算器不仅可以进行基本的加减乘除运算,还可以显示结果,方便用户进行计算。
单片机的简易计算器

单片机的简易计算器单片机简易计算器的设计与实现一、引言计算器是一种用于计算数学运算的工具,现在已经成为人们日常生活中必不可少的设备之一、在这个数字化的时代,我们经常需要进行简单的数学运算,如加、减、乘、除等。
为了满足人们的需求,我们可以使用单片机来设计和实现一个简易的计算器。
二、设计目标我们的设计目标是实现一个能够进行基本的加减乘除四则运算的简易计算器。
具体来说,我们希望计算器能够实现以下功能: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.测试并调试系统,确保计算结果的准确性。
七、总结通过使用单片机,我们成功地设计并实现了一个简易的计算器。
这个计算器不仅能够进行基本的加减乘除四则运算,还具备了简单的误操作处理能力。
在实际使用中,我们可以通过添加更多的功能和改进设计来进一步完善这个简易计算器。
单片机简易计算器的设计

单片机简易计算器的设计设计一个单片机简易计算器,我们首先需要明确计算器的功能和要求。
在这个设计中,我们将实现基本的四则运算功能和一些其他的功能,如开方、求倒数等。
我们将采用Keil C51来编写程序,并在STC89C52单片机上进行实现。
首先,我们需要定义一些输入和输出的接口。
我们将使用4个按键作为操作输入,它们分别是加、减、乘和除。
此外,我们还需要一个用于计算结果的显示屏,并使用一个7段数码管来显示输出结果。
在连接电路图中,我们需要将4个按键分别连接到P0口的4个IO引脚上,并将7段数码管的引脚连接到P2口。
此外,我们还需要将一个用于切换输入的按键连接到P1口。
接下来,我们将定义一些全局变量和函数来实现我们的计算器功能。
首先,我们需要定义一些常量,如加、减、乘和除的符号。
然后,我们需要定义一些变量来存储输入的数字和操作符号,以及存储计算结果的变量。
接下来,我们需要定义一些函数来实现不同的计算功能。
我们将实现加、减、乘和除的函数,并在这些函数中将数字和操作符号作为参数进行传递。
然后,我们需要定义一个主函数来对按键进行读取和执行不同的操作。
我们将使用一个无限循环来不断读取按键输入,根据不同的按键进行不同的操作。
在主函数中,我们还需要使用一个延时函数来防止按键的抖动效应。
最后,我们需要将计算结果显示在数码管上。
我们将编写一个函数来将计算结果转换为7段数码管上的数字,并将其显示出来。
在这个函数中,我们将使用一个循环来依次点亮不同的数码管段。
整个程序的流程如下:1.初始化所有的IO口2.定义常量和全局变量3.定义计算函数4.定义显示函数5.定义主函数-读取按键输入-根据不同的按键执行不同的操作-调用计算函数进行计算-调用显示函数显示结果在这个设计中,我们使用了一个简单的计算例子,这只是一个基础框架。
如果要实现更多功能,如开方、求倒数等,只需要在函数中进行相应的修改即可。
此外,我们还可以添加一些其他的功能,如存储和读取计算结果等。
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(; // 按键处理}```五、总结通过以上的设计思路和示例代码,我们可以轻松地实现一个简易的计算器。
基于单片机的简易计算器

基于单片机的简易计算器基于单片机的简易计算器是一种将计算功能集成到微型芯片中的设备。
单片机是一种具有集成电路功能的集成电路,它包含了中央处理器、内存以及输入输出接口等。
单片机的体积小,成本低,功能强大,适用于各种消费电子产品以及嵌入式设备。
简易计算器是一种通过按键输入数字和运算符,然后在显示屏上显示计算结果的设备。
它通常具有加法、减法、乘法和除法等基本运算功能。
在这篇文章中,我们将介绍基于单片机的简易计算器的设计和实现。
首先,我们需要选择合适的单片机。
在设计计算器时,我们需要考虑到单片机的存储容量、算术运算能力以及输入输出接口等。
一个常见的选择是使用8051系列单片机,它具有足够的存储容量和算术运算能力,同时也有丰富的外设接口,便于与按键和显示屏等设备进行连接。
其次,我们需要设计按键输入和显示屏输出的电路。
在按键输入方面,我们可以使用矩阵按键的方式进行设计,这样可以节省输入引脚的数量。
在显示屏输出方面,我们可以选择使用LCD显示屏,它可以提供清晰的显示效果,并且可以显示多行文字和数字。
接下来,我们需要考虑计算器的逻辑和算法。
计算器的逻辑通常是按照先输入数字,再输入运算符,最后输出结果的顺序进行设计。
在输入运算符之后,计算器将根据当前的数字和运算符进行相应的运算,并将结果输出到显示屏上。
这一过程可以使用状态机进行控制,以实现按键输入和结果计算的顺序控制。
最后,我们需要进行软件编程和硬件调试。
软件编程方面,我们需要编写适当的程序代码,实现按键输入、结果计算和结果显示等功能。
硬件调试方面,我们需要将设计好的电路连接到单片机上,并进行相应的测试和调试,以确保计算器的各项功能正常工作。
在设计和实现基于单片机的简易计算器时,需要注意以下几点。
首先,要考虑到计算器的功能需求和性能要求,以选择合适的单片机和外设接口。
其次,要进行合理的硬件设计和软件编程,以保证计算器的稳定性和可靠性。
最后,要进行充分的测试和调试,以确保计算器的各项功能正常工作。
单片机设计简易计算器

单片机设计简易计算器单片机是指将整个计算机系统集成在一块芯片上的微处理器。
设计一个简易计算器,可以使用单片机实现各种基本运算,如加、减、乘、除以及开方等。
首先,我们需要选择单片机的类型和开发环境。
常用的单片机有51系列、AVR系列、ARM系列等。
根据具体需求,选择一种合适的单片机进行设计。
接下来,需要设计计算器的硬件电路。
计算器的核心部分是输入和输出部分,因此需要设计一个合适的显示屏和按键阵列。
一种常用的显示屏是数码管,可以显示数字和一些特殊字符。
按键阵列可以使用矩阵型按键。
在硬件设计完成后,需要进行软件编程。
首先要开发一个简单的操作系统,以便管理单片机的资源和任务。
然后,根据计算器的功能需求,在操作系统上开发相应的计算器应用程序。
计算器的软件程序主要包括以下几个模块:1.输入模块:通过按键阵列读取用户输入的数字和操作符,并且根据用户的输入进行相应的处理。
2.运算模块:根据用户输入的操作符进行相应的运算,包括加、减、乘、除以及开方等。
3.输出模块:将运算结果通过数码管显示出来。
以下是一个简单计算器的软件程序设计示例:```c#include <reg51.h>sbit row1 = P1^0;sbit row2 = P1^1;sbit row3 = P1^2;sbit col1 = P1^3;sbit col2 = P1^4;sbit col3 = P1^5;sbit col4 = P1^6;void delay(unsigned int ms)unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 112; j++);unsigned char keyscarow1 = 0; // 设置第一行为低电平row2 = 1;row3 = 1;if (col1 == 0) { delay(10); while(col1 == 0); return '1'; } if (col2 == 0) { delay(10); while(col2 == 0); return '2'; } if (col3 == 0) { delay(10); while(col3 == 0); return '3'; }if (col4 == 0) { delay(10); while(col4 == 0); return '+'; } row1 = 1;row2 = 0; // 设置第二行为低电平row3 = 1;if (col1 == 0) { delay(10); while(col1 == 0); return '4'; } if (col2 == 0) { delay(10); while(col2 == 0); return '5'; } if (col3 == 0) { delay(10); while(col3 == 0); return '6'; } if (col4 == 0) { delay(10); while(col4 == 0); return '-'; } row1 = 1;row2 = 1;row3 = 0; // 设置第三行为低电平if (col1 == 0) { delay(10); while(col1 == 0); return '7'; } if (col2 == 0) { delay(10); while(col2 == 0); return '8'; } if (col3 == 0) { delay(10); while(col3 == 0); return '9'; } if (col4 == 0) { delay(10); while(col4 == 0); return '*'; } return 0;void display(unsigned char number)P2 = number;void maiunsigned char num1 = 0, num2 = 0, result = 0; unsigned char operator = 0;while (1)num1 = keyscan(;if (num1 == '+')operator = '+';} else if (num1 == '-')operator = '-';} else if (num1 == '*')operator = '*';} else if (num1 != 0)while (1)num2 = keyscan(;if (num2 != 0)break;}}if (operator == '+')result = num1 + num2;} else if (operator == '-')result = num1 - num2;} else if (operator == '*')result = num1 * num2;}display(result);}}```以上程序是一个简单的计算器程序示例。
单片机实践简易计算器实验报告

单片机实践简易计算器实验报告本次实验的目的是通过单片机实现一个简易计算器,实现加减乘除四则运算。
在实验过程中,我们使用了STC89C52单片机,通过编写程序实现计算器的功能。
实验步骤:1. 确定硬件电路连接我们需要确定硬件电路连接。
本次实验使用的是STC89C52单片机,需要将其与LCD1602液晶屏、4x4矩阵键盘、蜂鸣器等硬件连接。
具体连接方式如下:STC89C52单片机:P0口:连接LCD1602液晶屏的数据线D0-D7P1口:连接LCD1602液晶屏的控制线RS、RW、EP2口:连接4x4矩阵键盘的行线R1-R4P3口:连接4x4矩阵键盘的列线C1-C4P4口:连接蜂鸣器2. 编写程序接下来,我们需要编写程序实现计算器的功能。
程序主要分为以下几个部分:(1)LCD1602液晶屏初始化(2)4x4矩阵键盘扫描(3)计算器功能实现(4)LCD1602液晶屏显示结果3. 调试程序编写完程序后,我们需要进行调试。
在调试过程中,我们需要注意以下几点:(1)检查硬件连接是否正确(2)检查程序是否有语法错误(3)检查程序是否能够正常运行4. 实验结果经过调试,我们成功实现了一个简易计算器。
在使用过程中,用户可以通过4x4矩阵键盘输入数字和运算符,计算器会自动进行计算,并在LCD1602液晶屏上显示结果。
同时,计算器还具有清零、退格等功能,方便用户进行操作。
总结:通过本次实验,我们学习了单片机的基本原理和编程方法,掌握了如何使用单片机实现一个简易计算器。
同时,我们还学习了如何进行硬件电路连接和程序调试,提高了我们的实践能力和动手能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《单片机原理及应用》课程课程设计题目简易计算器的设计院(系)信息工程学院专业班级 11级计算机应用技术1班学生姓名 XXXXX学号 XXXXXXXX设计地点计算机应用实验室指导教师 XXXX起止时间:2013年6月3日至2013 年6 月14 日摘要随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
本题目是实现两位数的加减运算的简易计算器,实现键盘输入,由七段LED 数码管输出;程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不十分完善,限制也较多。
本设计重在设计构思,使得我们用专业知识、专业技能分析和解决问题,通过设计使得我们对所学知识彻底巩固。
课程设计目的和意义:通过这次课程设计,进一步掌握单片机理论知识,知道AT89S52单片机的原理、编程和各种功能的应用,了解简易计算器的工作原理,初步掌握计算器的硬软件设计、编写、调试和仿真,充分提高动手能力和排除故障的能力。
同时通过毕业设计加深了我们对单片机的认识和兴趣,发挥了我们的创新能力。
在本次课程设计中,充分调动了组员的积极性,彼此之间通过相互合作,共同努力,一起出色地完成了任务!设计任务:能够实现0~9这10个1位数的加减运算,用10个按键模拟0~9数字键,用两个按键实现加减运算,运算结果用5个数码管显示出来。
如:5+3=8。
关键词 : 单片机;数码管;矩阵键盘目录1.设计方案 (4)1.1设计思路 (4)1.2整体设计 (4)2.电路设计原理 (6)2.1键盘接口电路 (6)2.2数码管显示原理及译码电路 (7)2.3运算模块(单片机控制) (7)3.功能程序仿真调试 (10)3.1编程调试环境 (10)3.2测试结果截图 (11)4.程序设计 (12)4.1软件程序设计 (12)4.2源程序 (14)5.总结 (18)6.参考文献 (19)1.设计方案1.1设计思路根据计算器的功能要求,选择AT89S52为主控机,通过扩展必要的外围接口电路,实现对计算器的设计。
外部主要由4*4矩阵键盘和一个液晶显示屏构成,内部由一块AT89C52单片机构成。
计算器电路包括四个部分:选用数码管作为显示部分,矩阵键盘作为输入部分,运算模块,单片机控制部分。
图1.1 模块图1.2整体设计根据简易计算器的功能和指标要求,本设计系统选用MCS-51系列单片机AT89C52为主控机。
通过扩展必要的外围接口电路,实现对简易计算器的设计。
计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。
具体设计如下:(1)由于要设计的是简单的计算器,可以进行加减运算,为了得到较好的显示效果,采用七段数码管显示数据和结果。
(2)另外键盘包括数字键(0~9)、符号键(+、-、=)、复位键,故需要14个按键即可。
(3)执行过程:开机显示零,等待键入数值,当键入数字,通过数码管显示出来,当键入+、-运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。
图1.2 线路原理框图图1.3系统总流程图2.电路设计原理2.1键盘接口电路计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。
矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4×4个。
这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。
矩阵键盘的工作原理:电路中采用4*4键盘作为输入电路模块的话,电路连线会比较简单,而且这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。
但是在硬件电路设计的过程中,实验室没有提供矩阵键盘,所以我们将4*4的矩阵键盘换成了16个独立按键。
采用独立按键的方式的话,会占用大量的I/O 口资源,但是在这种情况下,编程会很简单。
矩阵键盘内部电路图如图所示:图2.1 矩阵键盘内部电路图停止At89s52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作,直到下一个中断或硬件复位为止。
8 位微控制器 8K 字节在系统可编程 Flash AT89S522.2数码管显示原理及译码电路本系统输出结果选用8个数码管显示。
数码管有共阴共阳之分,本系统采用8段共阳型LED,其原理图如下图所示:符号和引脚共阳极图2.2LED数码管结构共阳数码管就是把每个LED灯的阳极接在共同接点com,而每个LED灯的阴极分别为a,b,c,d,e,f,g,dp;通过控制LED灯的亮灭来显示数字。
数码管跟据接收到的字形码显示数字。
2.3运算模块(单片机控制)单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。
如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。
单片机是靠程序运行的,并且可以修改。
通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机AT89S52作为计算器的主要功能部件,可以很快地实现运算功能。
图2.3 硬件电路原理图图2.4 AT89S52单片机实物图图2.5 硬件电路原理图3.功能程序仿真调试3.1编程调试环境Keil uVision3是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。
KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。
C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。
C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。
系统功能:Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,使您能在很短的时间内就能学会使用keil c51来开发您的单片机应用程序。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
3.2测试结果截图图3.1 加法计算图3.2 减法计算4.程序设计4.1软件程序设计(1)按键部分代码void key(){uchar temp;P1=0xf0;temp=P1;if(temp!=0xf0){delay(13); //消除按键抖动if(temp!=0xf0){P1=0xfe; //按行进行按键扫描,先扫描第一行temp=P1;switch(temp){case(0xee):{i=0;c=0;};break;case(0xde):{i=1;c=0;};break;case(0xbe):{i=2;c=0;};break;case(0x7e):{i=3;c=0;};break;}P1=0xfd; //按行进行按键扫描,扫描第二行 temp=P1;switch(temp){case(0xed):{i=4;c=0;};break;case(0xdd):{i=5;c=0;};break;case(0xbd):{i=6;c=0;};break;case(0x7d):{i=7;c=0;};break;}P1=0xfb; //按行进行按键扫描,扫描第三行 temp=P1;switch(temp){case(0xeb):i=8;break;case(0xdb):i=9;break;case(0xbb):i=10;break;case(0x7b):i=11;break;}P1=0xf7; //按行进行按键扫描,扫描第四行 temp=P1;switch(temp){case(0xe7):i=12;break;case(0xd7):y=0;break;}}}}(2)功能键部分代码void display(uchar i,uchar j,uchar k){uchar f[2],t,e,q;if(k==10){e=i+j;f[0]=e/10;q=i+j;f[1]=q%10;}if(k==11){e=i-j;f[0]=e/10;q=i-j;f[1]=q%10;}for(t=0;t<2;t++){P2=tab1[t];P0=tab2[f[t]];delay(2);}}(3)LED数码管驱动部分代码void display1(uchar i){P2=0xfe;P0=tab2[0];delay(2);P2=0xfd;P0=tab2[i];delay(2);}4.2源程序#include<reg52.h>#define uchar unsigned char //数据类型的宏定义#define uint unsigned int //数据类型的宏定义uchar a,b,d,i,w,y=1;uchar c=2;uchar tab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchartab2[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x 8E,0xBF};void delay(uchar z){uchar x;for(;z>0;z--)for(x=200;x>0;x--);}void key(){uchar temp;P1=0xf0;temp=P1;if(temp!=0xf0){delay(13); //消除按键抖动if(temp!=0xf0){P1=0xfe; //按行进行按键扫描,先扫描第一行temp=P1;switch(temp){case(0xee):{i=0;c=0;};break;case(0xde):{i=1;c=0;};break;case(0xbe):{i=2;c=0;};break;case(0x7e):{i=3;c=0;};break;}P1=0xfd; //按行进行按键扫描,扫描第二行temp=P1;switch(temp){case(0xed):{i=4;c=0;};break;case(0xdd):{i=5;c=0;};break;case(0xbd):{i=6;c=0;};break;case(0x7d):{i=7;c=0;};break;}P1=0xfb; //按行进行按键扫描,扫描第三行temp=P1;switch(temp){case(0xeb):i=8;break;case(0xdb):i=9;break;case(0xbb):i=10;break;case(0x7b):i=11;break;}P1=0xf7; //按行进行按键扫描,扫描第四行temp=P1;switch(temp){case(0xe7):i=12;break;case(0xd7):y=0;break;}}}}void display(uchar i,uchar j,uchar k){uchar f[2],t,e,q;if(k==10){ e=i+j;f[0]=e/10;q=i+j;f[1]=q%10;}if(k==11){e=i-j;f[0]=e/10;q=i-j;f[1]=q%10;}for(t=0;t<2;t++){P2=tab1[t];P0=tab2[f[t]];delay(2);}}void display1(uchar i) {P2=0xfe;P0=tab2[0];delay(2);P2=0xfd;P0=tab2[i];delay(2);}void main(void){while(1){key();if(c==0&&w==1){c=2;b=i;}if(i==10||i==11){w=1;d=i;}if(c==0){a=i;c=2;}if(i==12)display(a,b,d);if(i!=10&&i!=11&&i!=12) display1(i);if(y==0){y=1;a=0;c=2;w=0;b=0; d=0; i=0; }}}5.总结课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。