您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机--简易加法计数器
1《单片机原理及应用》课程课程设计题目简易计算器的设计院(系)信息工程学院专业班级11级计算机应用技术1班学生姓名XXXXX学号XXXXXXXX设计地点计算机应用实验室指导教师XXXX起止时间:2013年6月3日至2013年6月14日2摘要随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。本题目是实现两位数的加减运算的简易计算器,实现键盘输入,由七段LED数码管输出;程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不十分完善,限制也较多。本设计重在设计构思,使得我们用专业知识、专业技能分析和解决问题,通过设计使得我们对所学知识彻底巩固。课程设计目的和意义:通过这次课程设计,进一步掌握单片机理论知识,知道AT89S52单片机的原理、编程和各种功能的应用,了解简易计算器的工作原理,初步掌握计算器的硬软件设计、编写、调试和仿真,充分提高动手能力和排除故障的能力。同时通过毕业设计加深了我们对单片机的认识和兴趣,发挥了我们的创新能力。在本次课程设计中,充分调动了组员的积极性,彼此之间通过相互合作,共同努力,一起出色地完成了任务!设计任务:能够实现0~9这10个1位数的加减运算,用10个按键模拟0~9数字键,用两个按键实现加减运算,运算结果用5个数码管显示出来。如:5+3=8。关键词:单片机;数码管;矩阵键盘3目录1.设计方案...............................................41.1设计思路..........................................41.2整体设计..........................................42.电路设计原理...........................................62.1键盘接口电路.......................................62.2数码管显示原理及译码电路...........................72.3运算模块(单片机控制).............................73.功能程序仿真调试......................................103.1编程调试环境......................................103.2测试结果截图......................................114.程序设计..............................................124.1软件程序设计......................................124.2源程序...........................................145.总结..................................................186.参考文献..............................................1941.设计方案1.1设计思路根据计算器的功能要求,选择AT89S52为主控机,通过扩展必要的外围接口电路,实现对计算器的设计。外部主要由4*4矩阵键盘和一个液晶显示屏构成,内部由一块AT89C52单片机构成。计算器电路包括四个部分:选用数码管作为显示部分,矩阵键盘作为输入部分,运算模块,单片机控制部分。图1.1模块图1.2整体设计根据简易计算器的功能和指标要求,本设计系统选用MCS-51系列单片机AT89C52为主控机。通过扩展必要的外围接口电路,实现对简易计算器的设计。计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。具体设计如下:(1)由于要设计的是简单的计算器,可以进行加减运算,为了得到较好的显示效果,采用七段数码管显示数据和结果。(2)另外键盘包括数字键(0~9)、符号键(+、-、=)、复位键,故需要14个按键即可。(3)执行过程:开机显示零,等待键入数值,当键入数字,通过数码管显示出来,当键入+、-运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值单片机运算模块显示模块输入模块5后将显示键入的数值,按等号就会在数码管上输出运算结果。4*4键盘51单片机系统数码管显示图1.2线路原理框图YN开始初始化参数初始化数码管显示有键输入?读取键码数字键输入数值数码管显示功能键输入运算符图1.3系统总流程图62.电路设计原理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公司高密度非易失性存储器技术制造,与工7业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字节在系统可编程FlashAT89S522.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等一台计算8机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机AT89S52作为计算器的主要功能部件,可以很快地实现运算功能。图2.3硬件电路原理图图2.4AT89S52单片机实物图9图2.5硬件电路原理图103.功能程序仿真调试3.1编程调试环境KeiluVision3是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。系统功能:KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,使您能在很短的时间内就能学会使用keilc51来开发您的单片机应用程序。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。113.2测试结果截图图3.1加法计算图3.2减法计算124.程序设计4.1软件程序设计(1)按键部分代码voidkey(){uchartemp;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;}13P1=0xf7;//按行进行按键扫描,扫描第四行temp=P1;switch(temp){case(0xe7):i=12;break;case(0xd7):y=0;break;}}}}(2)功能键部分代码voiddisplay(uchari,ucharj,uchark){ucharf[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;t2;t++){P2=tab1[t];P0=tab2[f[t]];delay(2);}}(3)LED数码管驱动部分代码voiddisplay1(uchari){P2=0xfe;P0=tab2[0];delay(2);P2=0xfd;P0=tab2[i];delay(2);14}4.2源程序#includereg52.h#defineucharunsignedchar//数据类型的宏定义#defineuintunsignedint//数据类型的宏定义uchara,b,d,i,w,y=1;ucharc=2;uchartab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchartab2[]=
本文标题:单片机--简易加法计数器
链接地址:https://www.777doc.com/doc-5538914 .html