计算器设计.doc_第1页
计算器设计.doc_第2页
计算器设计.doc_第3页
计算器设计.doc_第4页
计算器设计.doc_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河南理工大学本科课程设计报告摘要本设计是基于51系列的单片机进行的计算器模拟系统设计,可以完成计算器的键盘输入,进行加、减、乘、除8位无符号数字运算,并在LCD上相应的显示。当输入数字大于8位时伴有声音提示,运算结果大于8位数最高位LCD会显示英文E(ERROR)表示运算最终结果溢出。计算器的设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C52单片机, 输入采用44矩阵键盘。显示采用8位7段共阴极LCD动态显示,复位电路采用上电复位,时钟采用12MHz晶体振荡电路。由于采用AT89C52单片机内部有充足的程序存储单元和数据存储单元,因此不需要进行外围存储扩展。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的Vision3软件,采用C语言进行编写。设计的结果能够完成最高8位有效数字无浮点加、减、乘、除计算功能,比最高结果小于256及简单加法的要求有了很大提高。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。目录1概述31.1单片机总体功能简介31.2输出LCD显示功能综述42系统总体方案及硬件设计52.1系统设计要求52.2总体设计方案52.3系统硬件设计53 软件设计73.1矩阵键盘设计73.2LCD动态显示73.3 LCD移位显示83.4计算模块设计94 Proteus软件仿真114.1Proteus ISIS简介114.2Proteus运行流程114.3Proteus功能仿真115课程设计体会16参考文献16附1 源程序代码附17附2 系统原理图231概述单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。1.1单片机总体功能简介单片机是在工业测控需要背景下而产生的,在一个应用系统中。按照测控系统的特点和要求,单片机的应用可分为单机应用和多机应用两大类。我们这次要完成的单片机课程设计就是它的单机应用,下面在介绍一下单片机在单机应用领域内的主要内容。(1)智能产品单片机与传统机械产品相结合,使传统机械产品结构简化,控制智能化,购成新一代机电一体化产品。目前,利用单片机构成的智能产品已广泛应用于家用电器、办公设备机床、纺织机械、工业设备等行业。(2)智能仪表目前,各种传感器、变送器、控制仪表已普遍采用单片机应用系统。它集测量、处理、控制功能于一体,具有各种智能化功能,如存储、数据处理、查找、判断、联网和语音等功能。单片机构成的智能仪表,能使仪表具有数字化、智能化、多功能化、综合化、柔性化等优点,赋予测量仪表以崭新的面貌,使传统的仪器、仪表发生根本性的变革,它代表了仪器仪表的发展趋势。(3)测控技术用单片机构成的各种工业控制系统中的数据采集系统具有工作稳定可靠、抗干扰能力强的优点,如炉温恒温控制系统、电镀生产自动控制系统等。(4)智能接口在计算机系统,特别是较大型的工业测控系统中,除通用外部设备外,还由许多外部通信、采集、多路分配管理、驱动控制等接口。这些外部设备与接口如果完全由主机进行管理,势必会造成主机负担过重,运行速度降低,接口的管理水平也不可能提高。如果用单片机进行接口的控制与管理,单片机与主机可并行加工处理,可以大量降低接口的通信密度,极大的提高了接口控制管理水平。在一些通用计算机外部设备上,已实现了单片机的键盘管理、打印机控制、绘图仪控制、硬盘驱动控制等。本系统采用的就是51系列的pic18f452单片机进行的计算器设计。由于51系列的上下兼容性,51核的内部功能大体一致。右图为51系列单片机的管脚图。44矩阵编码键盘,在键盘设计总需要进行程序消抖,因为当按键按下时会有34MS的抖动时间,程序扫描速度非常快,如果没有消除抖动程序的,程序会检测到多次按键按下。利用pic18f452内部相对充裕的ROM设计特殊的键盘扫描程序,运用软硬结合的方式进行设计。1.2输出LCD显示功能综述在单片机应用系统中常用的显示器有发光二极管数码显示器LCD和液晶显示器LCD。LCD显示器具有耗电少、成本低廉、配置简单灵活,抗干扰性强等优点,但显示内容有限,且不能显示图形,因而其灵活性受到限制;LCD显示器除了具有LCD特点外还能显示图形,但其驱动比较复杂。8段LCD由7个发光二极管按“日”字形排列,阴极接在一起称为共阴极接法。本系统设计的计算器输出部分采用LCD,因为计算器是8位数据显示,所以用8位8段共阴极LCD,采用LCD动态显示,利用软件节省硬件外部资源。 2系统总体方案及硬件设计2.1系统设计要求计算器模拟系统功能要求:(1)要求模拟的计算器至少显示8位数字,开机运行时,只有数码管最低位显示为“0”,其余位全部不显示;(2)设计44键盘,分别表示09、/ 、,输入的数字从设计的键盘输入;(3)第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三次按下时,显示“D1D2D3”,8个显示完毕后,再按下按键下时,给出“嘀”提示音;(4)可以对计算结果小于256的两个无符号数进行加法运算,并显示计算结果。对于、/、和的运算为提高部分;(5)编写程序,用Proteus软件进行仿真。报告中给出操作过程及运行效果图。2.2总体设计方案由于计算器需要比较多的输入输出口,所以采用内部存储资源比较多的pic18f452单片机,8位LCD动态显示,需要14根数据线,其中6根作为线选,相当于地址线,选择其中一位显示,另外8根作为LCD显示码输入线。根据计算器的输入功能需求,采用44矩阵键盘,采用矩阵键盘也是利用软件节省硬件,利用内部ROM,进行循环查询。扬声器可以用一个准IO口。采用pic18f452作为运算和控制单元完全满足系统的需求。2.3系统硬件设计复位电路:RST引脚是复位信号输入端,高电平有效。采用上电复位,因为本系统设计的计算器键盘具有复位键,所以不需要进行手动复位,以节省硬件资源。上电复位是利用电容充电来实现的,上电瞬间RST端口电位与VCC相同,随着充电电流的减少,RST电位下降,最后被嵌位在0V。电容采用22F电容,电阻选择10K。如下图所示。时钟电路:时钟是时序的基础,51核片内由一个反相放大器构成振荡器,可以由它产生时钟,时钟可以由两种方式产生内部方式和外部方式。本系统采用内部方式,在XTAL1和XTAL2端外接石英晶体作为定时元件,内部反相放大器自激振荡,产生时钟。时钟发生器对振荡脉冲二分频。电容采用30pF电容。如下图所示。显示电路:采用8位8段共阴极LCD,P0口作为LCD显示码输出端,P2口接线选端。P0口因内部没有上拉电阻,无法提供较大电流,需连接上拉电阻。键盘电路:采用P3口与矩阵键盘连接。键盘的选用方面,在程序调试时经过橡胶键盘与按钮键盘进行比较,橡胶键盘的正确率较高,易用性较强。最终采用橡胶键盘。系统总体硬件如图1 图1 系统总体硬件3软件设计 软件在设计时,利用Linux操作系统显示与计算分开和一切从简的设计思想,可以让软件更好的执行。显示模块利用定时器0中断,每隔一定时间动态显示一次,以此将显示模块与计算模块分开。3.1矩阵键盘设计键盘有两类,一类是编码键盘,即键盘上闭合键的识别由专门硬件来完成;另一类是非编码键盘,键盘上键入即闭合键的识别由软件来实现。本系统的设计采用非编码键盘,程序采用扫描方式。在初始化时,先将0xEF,0xDF,0xBF,0x7F输给P3口,再读取P3口状态,保存至变量sender,然后将变量sender与保存在程序存储器ROM中预先计算好的16个键值依次进行比较判断,如果相等,表明可能该值被按下,再延迟10MS消除由于机械弹性造成的抖动,然后第二次循环再次判断P3口状态是否与变量sender中的值相等,如果相等,则表明的确有代表该值的键被按下。然后根据所按下的键值分步执行分支程序。3.2LCD动态显示如图2 图2 LCD动态显示对共阴极LCD显示器,所有发光二极管的阴极连在一起接地,当某个发光二极管的阳极加入高电平时,对应的二极管点亮。因此要显示某字型就应使此字形的相应端的二极管点亮,实际上就是送一个用不同电平组合代表的显示码来控制LCD的显示。字形码与LCD显示器各段的关系为表所示:表字形码与显示器各段的关系D7D6D5D4D3D2D1D0dpgfedcbadp为小数点段,字符0、1、2、3、4F(共阴极)和熄灭的关系如表: 表字符和熄灭的关系012345673FH06H5BH4FH66H6DH7DH07H89ABCDEF7FH6FH77H7CH39H5EH79H71H采用LCD动态显示方式时,在P0.0P0.7端口不断送出需要显示的段码,P2.0P2.7端口连续送出不同的位扫描信号,并使每位字符停留显示一段时间,一般位15MS,利用人眼的视觉暂留效应,从LCD上便可以看到相当稳定的数字显示。3.3 LCD移位显示计算器程序设计中,难度最大的就是实现LCD的移位显示,利用显示缓冲。当输入一个数字,利用一个循环和一个记录按键变量,将低位数字依次送到高位数字,最后把按键的显示码送到最低位,如此一来便实现了LCD的移位。当依次输入5,1,7时显示效果如图所示:图.显示数字“”图.显示数字“”图.显示数字“”3.4计算模块设计键盘模块是否CL初始化YY+ABA=10A+key保存运算符B=10B+key是否+-*/是否A是否简易计算流程如图:图简易计算流程附:A代表按下运算符号前的数(程序中为A1),B代表按下运算符号后的数(程序中为B1)。程序中另外定义一个变量ab以区分A与B。流程图中省略了一些细节,比如运算结果如果首位是0则不显示,开机显示0,每次按下键时将LCD移位显示,以及将最终运算结果的每一位上数字计算出来。4 Proteus软件仿真4.1Proteus ISIS简介Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。该软件的特点是:(1)全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。(2)具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2 C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。(3)目前支持的单片机类型有:ARM7系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。(4)支持大量的存储器和外围芯片。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大 ,可仿真ARM、51、AVR、PIC。4.2Proteus运行流程Proteus ISIS的工作界面是一种标准的Windows界面,如图所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。运行Proteus程序后,进入软件的主界面。通过左侧工具栏中的P(从库中选择元件命令)命令,在Pick Devices 左侧窗口中选择所需元件的关键字,然后放置元件并调整方向和位置以及参数设置,最后进行连线。4.3Proteus功能仿真Proteus仿真效果最后载入hex文件后可以进行模拟仿真,可以全速运行也可以单步调试运行。模拟加法:123+456=579如图所示:图.输入数字“”图.输入数字“”图.得出结果“”模拟减法:654-321=333如图所示:图.输入数字“”图.输入数字“”图.得出结果“”模拟乘法:123*4567561741如图所示:图.输入数字“”图.输入数字“”图.得出结果“”模拟除法:05如图所示:图.输入数字“”图.输入数字“”图.得出结果“”5课程设计体会一周的时间已经结束了,感觉这一周学的知识比上一学期课都多。说真的,这次制作这次课程设计一切都是从零开始,一切从零开始意味着什么呢?那就是什么都不会,要想搞出点东西就得自己一点一点的学。不管最终结果怎样,努力了就行。做好简易计算流程图后,显示做好后,开始设计44键盘的设计,寻找矩阵键盘资料。找到单片机课程里面的键盘扫描程序,觉得有点复杂,后来在网络上看到一个以空间换取时间的键盘扫描程序,设计思路是将预先计算好的数据保存在ROM中,然后把从键盘端口读取的状态与保存的数据对比,相等就表示这个按键被按下。但键盘扫描的源程序并没有延时和消除抖动环节,不能直接利用,但是他的程序设计思想很值得借鉴和学习。后来程序终于可以通过编译了,但问题又接踵而至,仿真时根本不执行,然后进入KEIL软件进行调试,调试时才发现,程序并不是按照我的思路在运行,该跳出循环的却继续循环。算是体会到调试是发现程序错误的最好方法,调试过程中也感觉到一个好的编程风格,以及好的程序注释对调试程序有很大的帮助。当最终调试完全成功时,心里的喜悦根本无法用语言来表达,毕竟是自己付出的心血换来的成果。参考文献1马忠梅,刘宾,戚军,马岩. 单片机C语言WINDOWS环境编程宝典. 北京:北京航空航天大学出版社,20032何立民编著.单片机中级教程(原理与应用).北京:北京航天大学出版社,2000.78-1003张迎新编著.单片微型计算机原理应用及接口技术.北京:国防工业出版社,1993.67-89 4李光飞,楼然苗,胡佳文等.单片机课程设计实例指导. 北京:北京航空航天大学出版社,2004附1 源程序代码#include#define uchar unsigned char uchar data DispBuf8=0,16,16,16,16,16,16,16;/display the code of DispCode uchar code DispCode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00; / the CC code & bank!uchar code DispBitCode=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/ select the LCD bituchar code GetKeyCode=0xee,0xed,0xeb,0xe7, 0xde,0xdd,0xdb,0xd7, 0xbe,0xbd,0xbb,0xb7, 0x7e,0x7d,0x7b,0x77;/ input the key and get the keycodeuchar code ActionCode= 7,4,1,10, 8,5,2,0, 9,6,3,11, 15,14,13,12;/ the value of the key uchar code InitKeyCode= 0xef,0xdf,0xbf,0x7f;/ put the InitKeyCode to Keysbit P1_0 =P10;ucharab = 0; / distinguish the A1(0) or B1(1) (the first key and second key)uchar signal = 11; / distinguish the +、 -、 *、 / (11,12,13,14)uchar i,j,key; / i,j for the circulation key is the valueuchar KeyPos = 0; / the position of the keyuchar DispBitCount = 0;/ turn on the bit of 8 LCD by the DispBitCountunsigned long A1 = 0, B1 = 0;unsigned long Y= 0;void Delay(uchar t) / the delay programmewhile(t-)for(j=140;j0;) j-; void Ring() / make the speaker ringchar d;for(d=10;d0;d-)P1_0=P1_0;Delay(1); /* Name: Display() Display the LCD by using the interrupt of T0*/void Display(void) interrupt 1 / using the ISR 1 T0TH0 = (65536-2000)/256; TL0 = (65536-2000)%256; / Display the LCD by using the interrupt of T0 P1_0 = 0;P2 = DispBitCode DispBitCount ;/ select the bit of lcdP0 = DispCode DispBuf DispBitCount ; /put out the display codeDispBitCount+;Delay(1);if(DispBitCount = 8) DispBitCount = 0;/* Name:KeyScan() put the value of the keyboard to key*/ void KeyScan(void)uchar sender = 0x00;uchar count1 = 0x00;ucharcount2 = 0x00; for(count1 = 0; count1 4; count1+)P3=InitKeyCodecount1;sender = P3; for(count2 = 0; count2 16; count2+)if(sender = GetKeyCodecount2) Delay(20);/ delay 10 ms if(sender = P3)/ clear up the shiver key = ActionCodecount2;if(key = 10) /if put the C (Reset) ,Initialize the ProgrammeA1=0; B1=0; Y=0; ab=0; KeyPos = 0;DispBitCount = 0;DispBuf0 = 0;P1_0 = 0;for(i = 1; i 8 ,display E !DispBuf7 = 14;for(i=0;i0; i-)if(DispBufi = 0)DispBufi=16;continue;else break; / Dont display the highest bit if it is 0 / End key is =if(key = 12

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论