基于89C51的计算器设计_第1页
基于89C51的计算器设计_第2页
基于89C51的计算器设计_第3页
基于89C51的计算器设计_第4页
基于89C51的计算器设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、 单片机原理与接口技术课程设计 单片机系统单片机系统 课程设计任务书课程设计任务书学生姓名学生姓名专业班级专业班级自动 F1205学号学号题题 目目基于 89C51 的计算器设计课题性质课题性质工程设计课题来源课题来源自拟指导教师指导教师 主要内容主要内容(参数)(参数)利用 89C51 单片机设计一个计算器,实现功能如下:1.4*4 按键用于 09 的数字输入、加减乘除、等于、清零功能;2.能实现简单的加减乘除运算; 3.输入数字及计算结果通过 LED 显示器显示。任务要求任务要求(进度)(进度)第 1-2 天:熟悉课程设计任务及要求,查阅技术资料,确定设计方案。第 3-4 天:按照确定的方

2、案设计单元电路。要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。第 5-6 天:软件设计,编写程序。第 7-8 天:实验室调试。第 9-10 天:撰写课程设计报告。要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。主要参考主要参考资料资料1 张迎新单片微型计算机原理、应用及接口技术(第 2 版)M北京:国防工业出版社,20042伟福 LAB6000 系列单片机仿真实验系统使用说明书3 阎石数字电路技术基础(第五版) 北京:高等教育出版社,2006审查意见审查意见系(教研室)主任签字:系(教研室)主任签字: 年年 月月 日日 单片机原理与接口

3、技术课程设计目录目录绪论.11. 硬件组成与方案设计.1 单片机原理与接口技术课程设计1.1 系统框图 .11.2 硬件设计 .21.3 功能设计 .22. 硬件电路设计.22.1 时钟电路 .22.2 复位电路 .32.3 显示电路 .42.4 键盘电路 .53. 系统软件设计.63.1 主程序 .63.2 键盘检测程序 .73.3 读键输入程序 .83.4 数码管显示程序 .104. 仿真与调试.114. 软件调试 .114.2 硬件调试 .114.3 调试结果 .11总结.13参考文献.13附录 A:整体电路图 .14附录 B:程序代码 .15 单片机原理与接口技术课程设计1绪论绪论近十

4、几年来,单片机技术凭借其速度快,体积小,价格低,控制功能强,易于掌握,功能丰富等自身优点迅速发展,在各个领域发挥了重大作用,如今已成为一门成熟的学科。利用单片机可以实现非常丰富的功能,如流水灯,闹钟,秒表,音乐盒等,能够独立完成,实现设计,可以很好的检验自己对硬件以及对软件的理解和掌握水平。本设计采用80C51芯片,实现了利用单片机进行了一个简单计算器设计。允许对输入数据进行加,减,乘,除运算及LED数码管的显示。当然也可以用如LED显示屏显示来显示出更多的字符,实现更多的功能。但设计的关键所在,必须非常熟悉单片机的原理与结构,同时还要对整个设计流程有很好的把握,实现单片机和其他模块的完整的衔

5、接。1. 硬件组成与方案设计硬件组成与方案设计1.1 系统框图系统框图硬件组成如图 1.1 所示,通过时钟电路来提供时钟脉冲,使单片机有节拍的协同各个部件的同步有序工作,键盘电路来检测各个功能键,通过数码管来显示输出结果,复位电路可以在单片机异常工作或者需要重新计算时进行复位:AT89C51键盘电路数码管显示电路时钟电路复位电路图 1.1 芯片和键盘实现功能 单片机原理与接口技术课程设计21.2 硬件设计硬件设计根据功能和指标要求,本系统选用89C52单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。按键分布如下表.所示: 表.按键分布表硬件设计如下:由于要设计的是简单的计算器,

6、可以进行四则运算,对数字的大小范围要求不高故我们采用可以进六位数字的运算,选用6个LED数码管显示数据和结果。另外键盘包括数字键(09)、符号键(+、-、)、清除键和等号键,故只需要16个按键即可。1.3 功能设计功能设计功能实现如下: 初始化:上电后,屏幕初始化。 计算。按下数字键,屏幕显示要运算的第一个数字,再按下符号键,屏幕不显示,然后再按下数字键,屏幕显示要运算的第二个数字,最后按下“”号键,屏幕上显示出计算结果。 如果要再次计算,可以按下“C”键清零,或者按下单片机的复位键,重新初始化。 2. 硬件电路设计硬件电路设计2.1 时钟电路时钟电路 时钟电路是单片机的心脏,单片机各功能部件

7、的运行都是以时钟频率为基 单片机原理与接口技术课程设计3准,有条不紊地工作。因此时钟频率直接影响单片机的速度,时钟电路的质量也影响单片机系统的稳定性。本文时钟电路采用内部时钟电路,在引脚 XTAL1 和 XTAL2 两端跨接石英晶体,通过外接晶振 C1,C2 形成内部时钟电路,C1,C2 一般取 30pF:图.时钟电路 2.2 复位电路复位电路上电复位电路是一种简单的复位电路,只要在 RST 复位引脚接一个电容到VCC,接一个电阻到地就可以了。上电复位是指在系统上电时,复位电路通过电容加到 RST 复位引脚一个短暂的高电平信号,这个复位信号随 VCC 对电容的充电过程而回落,故 RST 引脚复

8、位的高电平维持时间取决于电容的充电时间。为保证系统安全可靠的复位,RST 引脚的高电平信号必须维持足够长时间,电路图如下图图 2.2 所示: 单片机原理与接口技术课程设计4图.复位电路 2.3 显示电路显示电路如下图 2.3 所示为一位共阴极数码管的元件图:图 2.3 数码管它是一种半导体发光器件,其基本单元是发光二极管。表 2.1 为常用的字形表,为了显示数字或符号,要为 LED 显示器提供代码,即字形代码为方便查询数码管共阴极字形段码,通过查询下表可以很方便的找到所需要段码: 显示字型gfedcBa段码001111113fh1000011006h210110115bh310011114fh

9、4110011066h511011016dh611111017dh7000011107h811111117fh911011116fh表 2.1 常用字形码(低电平有效)数码管是由 8 段发光二极管显示字段的显示器件,发光二极管简称字段,要显示某字形就应使该字形的相应字段点亮,也就是向数码管送入不同的电平组合,通过不同的组合可以显示 09,AF 以及小数点“.”等字符,而本设计为 单片机原理与接口技术课程设计5正整数的运算,并不涉及到小数点的点亮。数码管的显示方法为:通过右边的公共端控制数码管的亮灭,通过左边的段选码的电平状态确定每位发光二极管亮灭。本次设计采用的是 6 位七段共阴极数码管,但是

10、不需要单独使每个数码管送出段选码,而是每 3 个数码管的段选端通过内部总线相连,再通过动态显示数码管的方式使每个数码管分时轮流选通,因此大大简化了电路,更好的利用了 I/O 资源。下图 2.4 即为所使用的 6 位数码管的元件图:图 2.4 数码管显示电路 单片机原理与接口技术课程设计62.4 键盘电路键盘电路考虑到独立式键盘每个按键都要占用一个 I/O 口,按键较多时需要占用较多的的 I/O 口线,资源利用率低,并且由于本次采用的单片机开发板本身就是行列式键盘,故最终采用的是 4 行列式键盘。行列式键盘的四个行线处于输入状态,四个列线处于输出状态,按键设置在行列线的交叉点上,行列线分别连在按

11、键开关的两端。具体键盘电路如图 2.3 所示:图 2.5 键盘电路3. 系统软件系统软件设计设计3.1 主程序主程序主程序流程图如图 3.1 所示,主程序构成循环,首先初始化参数,送LED 为高电平,初始状态下没有字形码显示。然后扫描键盘看是否有键输入,若有,读取键码。判断键码是数字键 09、清零键, “”还是四则运算符(“+”,“-”, “*”, “/” ) ,如果是数字值,则计数第几个数,第几位数,进行内部运算处理,送入数码管进行显示输出,是清零键则做对数码管进行清零,如果是四则运算,则内部进行运算处理,同时数码管不显示,若为“”号则输出运算结果,显示在数码管上。 单片机原理与接口技术课程

12、设计7开始初始化输入处理数码管输出显示结束是否为四则运算符?Y是否为等号?读键盘数码管输出结果显示YN 运算处理清零图 3.1 主程序流程图3.2 键盘检测程序键盘检测程序此子程序为本设计的核心之一,因为按键是利用机械触点来进行合,断作用的,机械触点在闭合或断开的瞬间由于弹性作用的影响,有抖动现象,从而使电压信号出现抖动,会造成按键读入的不稳定性,产生误读现象,因此为了保证键盘读入的可靠性,必须消除去除抖动影响,抖动时间与按键的机械特性相关,一般为 510ms,去除抖动的方法有硬件和软件去抖两种,本实验采用的是软件去抖::检测到有键按下时,执行一个 20ms 的延时程序,再确认该键电平是否保持

13、闭合电平状态,若仍为闭合电平状态,则确认该键处于闭合状态,从而去除抖动影响,子程序流程图如图 3.2 所示: 单片机原理与接口技术课程设计8开始初始化是否有键按下获取键号返回NY确认是否有键按下二次调用延时子程序延时20msYN图 3.2 键盘程序流程图3.3 读键输入程序读键输入程序为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码键码。为了得到被按键的键码,现使用行扫描法 单片机原理与接口技术课程设计9识别按键。列扫描信号进行读入行的信号,判断该列是否有列的输出是则进行按照行列计算键盘的值,查表取得键码并返回若否则进行再次扫描。本设计采用矩阵式键盘,行

14、线为 P3.0-P3.3,列线为 P3.4-P3.7,通过读取行线 P3.0-P3.3 的状态可以确定有无键按下,当键盘上没有键被按下时,行列线是断开的,P3.0-P3.3 输入全部为高电平,当某个键被按下时,行列线短路,P3.0-P3.3 短路,所有行线输入都是低电平,而列线某一位为低电平,其他位均为高电平。通过结合行线和列线的输入状态可以确定哪个键被按下,从而确定正确的键码值。开始初始化地址参数输出列扫描信号列扫描信号移位读入行信号该列是否有键输入?全部列扫描完?返回按照行列计算键值查表得键值等待按键释放返回NYNY图 3.3 读键输入程序流程图 单片机原理与接口技术课程设计103.4 数

15、码管显示程序数码管显示程序数码管显示分为静态显示和动态显示,考虑到静态显示需要显示较多 I/O口,占用资源多,并且考虑到本单片机实验板硬件的限制,本数码管的显示采用的动态显示方案,通过分时轮流选通数码管的公共端,使各个数码管轮流选通,再送出段码,显示特定字符。在各个数码管依次显示一遍后,通过循环使显示器分时点亮,由于视觉暂留效用与余晖效应,人眼无法识别数码管的点亮顺序,就好像所有数码管同时点亮,具体流程如下图 3.4:开始初始化显示参数读显示数据输出段码数据输出位选通延时位选通信号移位指向下一位数据数据全部显示一遍?NY图 3.4 数码管显示流程图 单片机原理与接口技术课程设计114. 仿真与

16、调试仿真与调试4. 软件调试软件调试1、打开 Keil uVision2 软件后,在 Project 菜单中选择 New Project 命令,打开一个新项目。保存此项目,输入工程文件名 calculator 后,并保存工程文件的目录。2、为项目文件选择一个目标器件,即选择 80C51 的类型。在 Data base 列表框中选择“Atmel 89C52”,确定。、选择“File”目录下的 Target1,在右键列表中选择“组 Source Group1 属性”,在输出项勾选“E 成 HEX 文件”,HEX 格式为“HEX-80”。4、上述设置好后,创建源程序文件并输入程序代码。输入好代码后点

17、击“文件/保存”,保存为 calculator.asm。5、把源文件添加到项目中,用鼠标指在目标工作区的目标:1.点击右键在弹出的菜单中选择“添加文件到组 Source Group1”,在弹出的添加文件框中,选择需要添加到项目中的文件。6、开始编译,对项目文件进行编译,对代码进行修改完善,最后编译错误,警告。7、打开 stc-isp 软件,选择单片机型号为 STC89C52RC,选择正确的串口号,加载程序文件,给单片机上电后,HEX 文件下载编程成功。4.2 硬件调试硬件调试1.依次按下矩阵键盘上定义的数字键“09”,经检测数码管都可以正确显示。2.依次进行不同算法“+”, “”, “*”,

18、“/”,经检测可以正常进行运算。3.输入某个数,按下清零键,屏幕无显示,可以实现清零功能。4.3 调试结果调试结果(1)编程软件 Keil 软件调试结果如图 4.1: 单片机原理与接口技术课程设计12图 4.1 Keil 软件调试结果(2)烧写软件 ISP-STC 调试结果如图 4.2:图 4.2 ISP-STC 调试结果(3)89C51 实验板硬件调试结果: 单片机原理与接口技术课程设计13总结总结 本次课程设计是理论和实践的结合,首先通过该学期理论课的学习,对单片机的硬件构成有了初步的理解,包括其结构与原理,指令系统,定时计数器和扩展接口的使用,通过这次课程设计,在实践中重复利用所学运用,

19、验证理论知识,从中我很多收获和体会,以及自顶向下,逐步细化的工程设计方法,通过一步步分解任务设计,达到了设计要求。途中当然遇到了很多困难,但也增强了查阅书籍,手册,图表和文献资料的能力,同时通过独立思考,深入研究有关问题,学会自己分析解决问题的方法解决了一些问题。在这次课程设计中我充分感受到理论和实践的差距,一个人光有理论知识是远远不够的,在进行实践,面对硬件完全是一无所措,对硬件的学习完全是不同于理论学习的,其中硬件调试,ISP-STC 烧写操作,都是课堂上没有讲过的,需要重新学习。设计过程中也会发现自己对理论知识的某些方面不是那么牢固,暴露了自己的很多不足,锻炼了自己的理论联系实际的能力与

20、实际动手能力,以后应该多进行一些实践来不断提升自己的能力。参考文献参考文献1张迎新.单片微型计算机原理-S、应用及接口技术M.北京:国防工业出版社.2阎石.数字电子技术基础M.北京:高等教育出版社. 单片机原理与接口技术课程设计14附录附录 A:整体电路图:整体电路图 单片机原理与接口技术课程设计15附录附录 B:程序:程序代码代码#include#define uchar unsigned charuchar a0=16,b0=16,c0=16,d0=16,e0=16,f0=16,wei,temp,key,i,j,k;uchar jia,jian,cheng,chu,dengyu,jia0,

21、jian0,cheng0,chu0,qingling;uchar s0,s1,s2,s3,s4,s5; /参加运算的各个位unsigned long qian,hou;/定义参于运算的第一个数和第二个数。sbit dula=P26;sbit wela=P27;sbit beep=P23;unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d, 0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x00;void delay(uchar i)for(j=i;j

22、0;j-)for(k=125;k0;k-);void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f) dula=0; P0=tablea; dula=1; dula=0; wela=0; P0=0 xfe; wela=1; wela=0; delay(5); P0=tableb; dula=1; dula=0; P0=0 xfd; wela=1; wela=0; 单片机原理与接口技术课程设计16 delay(5); P0=tablec; dula=1; dula=0; P0=0 xfb; wela=1; wela=0; dela

23、y(5); P0=tabled; dula=1; dula=0; P0=0 xf7; wela=1; wela=0; delay(5); P0=tablee; dula=1; dula=0; P0=0 xef; wela=1; wela=0; delay(5); P0=tablef; dula=1; dula=0; P0=0 xdf; wela=1; wela=0; delay(5);void keyscan() P3=0 xfe; 单片机原理与接口技术课程设计17 temp=P3; temp=temp&0 xf0; if(temp!=0 xf0) delay(10); if(temp

24、!=0 xf0) temp=P3; switch(temp) case 0 xee: key=0; wei+; break; case 0 xde: key=1; wei+; break; case 0 xbe: key=2; wei+; break; case 0 x7e: key=3; wei+; break; while(temp!=0 xf0) temp=P3; temp=temp&0 xf0; beep=0; beep=1; P3=0 xfd; temp=P3; temp=temp&0 xf0; if(temp!=0 xf0) 单片机原理与接口技术课程设计18 del

25、ay(10); if(temp!=0 xf0) temp=P3; switch(temp) case 0 xed: key=4; wei+; break; case 0 xdd: key=5; wei+; break; case 0 xbd: key=6; wei+; break; case 0 x7d: key=7; wei+; break; while(temp!=0 xf0) temp=P3; temp=temp&0 xf0; beep=0; beep=1; P3=0 xfb; temp=P3; temp=temp&0 xf0; if(temp!=0 xf0) delay

26、(10); if(temp!=0 xf0) 单片机原理与接口技术课程设计19 temp=P3; switch(temp) case 0 xeb: key=8; wei+; break; case 0 xdb: key=9; wei+; break; case 0 xbb: qingling=1; /key=10; /wei+; break; case 0 x7b: dengyu=1; /key=11; /wei+; break; while(temp!=0 xf0) temp=P3; temp=temp&0 xf0; beep=0; beep=1; P3=0 xf7; temp=P3;

27、 temp=temp&0 xf0; if(temp!=0 xf0) delay(10); if(temp!=0 xf0) 单片机原理与接口技术课程设计20 temp=P3; switch(temp) case 0 xe7: jia=1; /key=12; / wei+; break; case 0 xd7: jian=1; break; case 0 xb7: cheng=1; break; case 0 x77: chu=1; break; while(temp!=0 xf0) temp=P3; temp=temp&0 xf0; beep=0; beep=1; void di

28、splay0()if(key!=20)switch(wei)case 1: a0=key;b0=16;c0=16;d0=16; 单片机原理与接口技术课程设计21e0=16;f0=16;break;case 2: b0=key;c0=16;d0=16;e0=16;f0=16;break;case 3: c0=key;d0=16;e0=16;f0=16;break;case 4: d0=key;e0=16;f0=16;break;case 5: e0=key;f0=16; break;case 6: f0=key;/wei=0;break;key=20;display(a0,b0,c0,d0,e0

29、,f0);if(a0!=16) s5=a0;if(b0!=16) s4=b0;if(c0!=16) s3=c0;if(d0!=16) s2=d0;if(e0!=16) s1=e0;if(f0!=16) s0=f0;void main()uchar gongneng,yunsuan; while(1) keyscan();gongneng=jia|jian|cheng|chu|dengyu|qingling; 单片机原理与接口技术课程设计22if(gongneng=0)display0();else yunsuan=jia|jian|cheng|chu;if(yunsuan)a0=16;b0=1

30、6;c0=16;d0=16;e0=16;f0=16;/wei=0;if(jia)jia=0;jia0=1;jian0=0;cheng0=0;chu0=0;if(jian)jian=0;jia0=0;jian0=1;cheng0=0;chu0=0;if(cheng)cheng=0;jia0=0;jian0=0;cheng0=1;chu0=0;if(chu)chu=0; jia0=0;jian0=0;cheng0=0;chu0=1;switch(wei)case 6:qian=s5*100000+s4*10000+s3*1000+s2*100+s1*10+s0;break;case 5:qian=

31、s5*10000+s4*1000+s3*100+s2*10+s1;break;case 4:qian=s5*1000+s4*100+s3*10+s2;break;case 3:qian=s5*100+s4*10+s3;break;case 2:qian=s5*10+s4;break;case 1:qian=s5;break;wei=0;s0=0;s1=0;s2=0;s3=0;s4=0;s5=0;display(a0,b0,c0,d0,e0,f0);/P1=0 x55; 单片机原理与接口技术课程设计23if(dengyu) dengyu=0; /display(16,16,16,16,16,16); switch(wei)case 6:hou=s5*100000+s4*10000+s3*1000+s2*100+s1*10+s0;break;c

温馨提示

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

最新文档

评论

0/150

提交评论