欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    单片机课程设计电子计算器设计.doc

    • 资源ID:4147602       资源大小:218.50KB        全文页数:17页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机课程设计电子计算器设计.doc

    2010级单片机课程设计 单片机课程设计报告书课题名称电子计算器设计姓 名学 号院、系、部电气工程系专 业电气工程及其自动化指导教师2013年7月10日电子计算器设计一、设计目的1、了解简易计算器设计的工作原理。2、进一步熟悉LED显示电路和键盘扫描电路的工作原理和编程方法。3、掌握延时计算的基本方法。二、设计要求1、设计一个带加法和减法功能的计算器。2、从键盘读入参加运算的数据,计算出结果,并显示到数码管上。3、要求做出实物。三、硬件电路根据功能和指标要求,本系统选用89C52 单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计考虑如下:1、由于要设计的是简单的计算器,可以进行加减运算,对数字的大小范围要求不高,故我们采用可以进行四位数字的运算,选用8 个LED 数码管显示数据和结果。2、另外键盘包括数字键(09)、符号键(+、-)、清除键和等号键,故只需要16 个按键即可。系统框图如图3-1所示。 图3-1 系统框图3.1单片机最小系统介绍3.1.1 STC89C52介绍89C52共有四个八位的并行双向口,即有32根输入输出口线。各口的每一位均由锁存器、输出驱动器和输入缓冲器组成。 VCC(40引脚):电源电压VSS(20引脚):接地 图3-2STC89C52引脚图P0端口(P0.0P0.7,3932引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0P1.7,18引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动4个TTL输入。P1口特点是输出锁存器,输出时没有条件。输入缓冲,输入时有条件,即需要先将该口设为输入状态,先输出1。 P3口为准双向口。可以字节访问,也可以位访问。P3.0-RXD,串行输入口。P3.1-TXD,串行输出口。P3.2-INT0,外部中断0的请求。P3.3-INT1,外部中断1的请求。P3.4-T0,定时器/计数器0外部计数脉冲。P3.5-T1,定时器/计数器,1外部计数脉冲。P3.6-WR,外部数据存储器写选通。P3.7-RD,外部数据存储器读选通。RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。ALE(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。XTAL2(18引脚):振荡器反相放大器的输入端。STC89C52引脚图如图3-2所示。3.1.2 晶振电路晶振结合单片机内部的电路,产生单片机所必须的时钟频率,为单片机指令的执行提供了基础。晶振的提供的时钟频率越高,单片机的运行速度也就越快。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定、精确的单频振荡。晶振电路如图3-3所示。 图3-3晶振电路3.1.3复位电路单片机在启动时或者在“死机”情况下需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。我们设计的是手动的按钮复位方式,手动按钮复位需要人为在复位输入端RST上加入高电平,当按下复位按钮时,系统就恢复到最初的状态。复位电路如图3-8所示。 图3-8复位电路3.2按键电路我们引入了矩阵键盘的应用,采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图3-3所示,一般有16 个键组成,在单片机中正好可以用一个P3口实现16 个按键功能。 图3-4矩阵键盘布局图 由图3-4矩阵键盘内部电路图可以知道,当无按键闭合时,P30-P33与P34-P37 之间开路。当有键闭合时,与闭合键相连的两条I/O 口线之间短路。判断有无按键按下的方法是:第一步,置列线P30-P33为输入状态,从行线P34-P37输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P30-P33读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。 图3-5矩阵键盘内部电路图3.3 LED显示电路3.3.1 74HC573 (1) 内部结构(2) 引脚13态输出使能输入 2-9数据输入12-193态锁存输出 11锁存使能输入10接地 20电源电压(3) 内部原理 图3-6 内部原理图(4) 真值表Dn LE OE On H H L H L H L L X L L Qo X X H Z 这个就是真值表,表示这个芯片在输入和其它的情况下的输出情况。3.3.2 输出电路(1) 背景数码管也称LED数码管,晶美、光电、不同行业人士对数码管的称呼不一样,其实都是同样的产品。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮led数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。下图是共阴极数码管的内部电路和LED数码管内部引脚图片 LED数码管引脚定义 10引脚的LED数码管(2) 动态原理数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。这就是动态驱动。每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低本设计采用的是共阴极接法。LED显示电路如图3-7所示。 图3-7LED显示电路3.4系统电路原理图图3-9系统电路原理图3.5所需元件器件数量开关16电容4晶振1数码管(10K)1单片机芯片174HC573芯片2电感10K1电源(5V)2四、软件设计主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上作出回应,主程序流程图如图所示。五、 主程序/*程序名称:简易计算器简要说明:运算结果不大于8位的正整数加、减、乘、除运算各键功能:09号按键 10号按键:删除前一个按键号 11号按键:等于号按键 1215号按键:加、减、乘、除按键 P3.2:清零按键编 写:邢志杰时 间:2015年07月10日最后修改时间:2015年07月14日*/#include <AT89x52.h>#define uchar unsigned char#define uint unsigned intsbit P30=P30;/段码锁存sbit P31=P31;/位码锁存sbit P32=P32;/清零按键uchar code DISP=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0xc6,0xa1,0x86,0x8e,0x00; /共阴极数码管显示段码uchar Disp110=16,16,16,16,16,16,16,16,16,16,Disp210=16,16,16,16,16,16,16,16,16,16;/用于存放先后按下的两个数据,结果也存放于Disp1中long int vai=0,vai1=0,vai2=0;/分别存放运算结果,及先后按下的数据int i,j=1,k=1;/计数uchar temp,KeyNo=16,Num; /temp读P1口使用,KeyNo按键号16表示全灭,存放'+'、'-'、'*'、'/'void Keyscan(); / 键盘扫描得键号void Delay(uchar x); /延时子函数void Display(void); /显示函数void Trans() ; /交换两个数组内容void Count(); /计算结果函数void Rest();/清零子函数/*按键扫描子函数:*/void Keyscan()P1=0xfe;temp=P1;if(temp!=0xfe) switch(temp) case 0xee: KeyNo=0;break; case 0xde: KeyNo=1;break; case 0xbe: KeyNo=2;break; case 0x7e: KeyNo=3;break; P1=0xfd;temp=P1;if(temp!=0xfd) switch(temp) case 0xed: KeyNo=4;break; case 0xdd: KeyNo=5;break; case 0xbd: KeyNo=6;break; case 0x7d: KeyNo=7;break; P1=0xfb;temp=P1;if(temp!=0xfb) switch(temp) case 0xeb: KeyNo=8;break; case 0xdb: KeyNo=9;break; case 0xbb: KeyNo=10; /删除前一个按键(KeyNo=10;可不写) if(j!=1) j-; Disp1j=16; break; case 0x7b: KeyNo=11;Count();break; /“=”按键(KeyNo=11;可不写) P1=0xf7;temp=P1;if(temp!=0xf7) switch(temp) case 0xe7: Num=12;Trans();break; /“+”按键 case 0xd7: Num=13;Trans();break;/“-”按键 case 0xb7: Num=14;Trans();break;/“*”按键 case 0x77: Num=15;Trans();break; /"/"按键 if(KeyNo>=0&KeyNo<=9)/09表示数字键 if(j<9)/最大长度8位 Disp1j+=KeyNo;KeyNo=16;/等待按键松开 P1=0X0f;temp=P1;while(temp!=0x0f) P1=0X0f;temp=P1;Display();/显示/*延时函数:延时约x*(1+2*120+2)个机械周期,当晶振为12MHz,x=5延时约1ms*/void Delay(uchar x) uchar y; while(x-) for(y=0;y<120;y+); /*显示函数:从左到右依次显示*/void Display(void) uchar sit=0x80; /用作显示位码i=j; /要显示位数送i,j来自子函数Keyscan()中while(i-) P30=1;P31=0;P2=DISPDisp1i;P30=0;P31=1;P2=sit;sit>>=1;Delay(5); /延时1msP2=0xff; /消除鬼影,使用锁存器573的锁存功能时必须添加/*将数组Disp1的内容传送到数组Disp2中*/void Trans() for(j=1;j<9;j+) Disp2j=Disp1j; Disp1j=16; j=1; /*计算结果函数:Count()*/void Count(void) /将按键数转换成十进制数字如按下:1、2、3转成123 for(j=1;j<9;j+) if(Disp1j!=16) vai2=10*vai2+Disp1j;Disp1j=16; for(j=1;j<9;j+) if(Disp2j!=16) vai1=10*vai1+Disp2j; Disp2j=16; switch (Num) /判断 case 12:vai=vai1+vai2; break; /“+”按键 case 13:vai=vai1-vai2; break; /“-”按键 case 14:vai=vai1*vai2; break; /“*”按键 case 15:vai=vai1/vai2; break; /"/"按键 for(j=1;j<9;j+) /j统计结果位数,位数为j-1 if(vai/10!=0|vai%10!=0) Disp2j=vai%10; vai=vai/10; else break; i=j; /i-1为要显示的位数 j-; for(;j>0;j-) /调整显示顺序 Disp1k=Disp2j; k+; j=i; /显示位数送回 if(j=1)/结果为0 Disp11=0; j=2; /*复位函数Rest()*/ void Rest() for(j=0;j<9;j+) Disp1j=16; Disp2j=16; k=j=1; vai=vai1=vai2=0; /*主函数*/void main() while(1) Keyscan(); Display(); if(P32=0) /按下复位键 Rest(); 六、设计总结我这次设计的题目是电子计算器,要求实现简单的加减运算,通过该计算器的设计我深入学习了数码管和键盘控制,提高了对51系列单片机的实际应用能力。同时也掌握了应用程序控制51系列单片机进行简单的数学运算。提高了对51系列单片机的编程能力。在硬件焊接前我们先用PROTEL将接线图画出,然后按照接线图进行连接,接着调试自己的程序。最开始我们编的程序有很多错误,我们就在连接实物的基础上认真思考,整理思路,一点点的调试、改错,直至最后调试出正确的程序。但是我们的程序也有做的不够的地方,比如不能实现两位数的运算,需要我们进一步改正,争取完善自己,使自己的编程能力和动手能力进一步得到提高。系统的连线图是我们自己动手画出来的,通过画图也让我们更熟悉了PROTEL制图的方法。最后感谢马丽老师的辛苦指导使我们的课程设计得以顺利的完成。参考文献1 高峰.单片微型计算机原理与接口技术.科学出版社,20072 高峰.单片微机应用系统设计及实用技术.机械工业出版社, 2004

    注意事项

    本文(单片机课程设计电子计算器设计.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开