微机原理与接口技术课程设计报告_第1页
微机原理与接口技术课程设计报告_第2页
微机原理与接口技术课程设计报告_第3页
微机原理与接口技术课程设计报告_第4页
微机原理与接口技术课程设计报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理与接口技术 课程设计报告项目名称:十进制数计算器的设计与实现 专业名称 : 计算机科学与技术(交通信息工程) 学生姓名 :李俊(201324020311) 教师姓名 : 马荣贵 2016年1月1日一、 项目名称及要求31 项目名称32 项目要求3二、 项目背景及设计目的31 项目背景32 项目目的3三、 设计思路31 总体设计思路32 设计流程图4四、 项目方案及原理图51 项目方案52 并行接口8255A53 键盘输入模块64 LED数码管输出模块75 原理图设计8五、 结果与分析81 实现现象82 现象分析8六、 总结及体会9七、 附录91 参考文献92 源代码9一、 项目名称及要

2、求 1 项目名称 十进制数计算器的设计与实现 2 项目要求 运用学过的微机原理与接口技术课程以及本学期的上机实验操作经验,根据题目设计要求进行软硬件系统的设计和实现,从而加深对本课程知识点的理解。通过具体项目的实践,来提高学生的动手能力以及实时解决问题的能力,使学生综合能力得到显著提升。 本课题要求学生熟练运用并行接口8255A芯片、4*4键盘输入模块以及LED数码管输出模块的工作原理以及相应元件驱动程序的编写。要求通过4*4键盘输入,LED数码管显示来完成简单计算器的功能(加减乘除操作) 二、 项目背景及设计目的 1 项目背景 大学课程设计是为了辅助学生加深对本课程的理论知识的理解和提高。通

3、过动手完成实际的项目设计及实现,减小理论与实践的距离,让同学对实际项目实现的流程有个大体的感受。通过合作完成项目,提高同学的合作意识,以及模块化设计理念。 2 项目目的 通过十进制数计算器的设计与实现,了解proteus软件使用; 熟练掌握原理图的设计方法 知道各硬件的功能以及电路实现 三、 设计思路 1 总体设计思路 4*4键盘输入模块: 键盘“09”对应数字09 键盘“A”对应符号“+” 键盘“B”对应符号“-” 键盘“C”对应符号“*” 键盘“D”对应符号“/” 键盘“E”对应符号“CE” 键盘“F”对应符号“=” 并行接口8255A:A口用于LED数码管的段码输出 B口用于LED数码管

4、的位码输出 C口用于4*4键盘的输入LED数码管输出模块:采用动态显示的方式,将并行接口8255A中A口中的段码显示2 设计流程图四、 项目方案及原理图1 项目方案先设计原理图,然后用PCB布线仿真,最后去实验室用实验器材实现设计2 并行接口8255A并行接口8255A: 8255A是通用可编程并行接口芯片,是有40个引脚的双列直插式组件,其基本功能为:8255A接口芯片有3个8位并行输入/输出端口,可利用编程方法设置3个端口是作为输入端口还是输出端口;8255A能适应CPU与I/O接口之间的多种数据传送方式的要求,如无条件传送、查询方式传送、中断方式传送。与此相对应,8255A设置了方式0、

5、方式1以及方式2;8255A的C口比较特殊,除作为数据口之外,在工作方式1和方式2下,它的部分信号线被分配作为专用的联络应答信号。8255A引脚图: 8255A的工作原理: 方式0:基本输入输出方式;方式1:选通式输入/输出方式;方式2:双向选通输入/输出方式。8255的控制字:工作方式选择控制字,D7D0控制位的含义见下图:本实验中使8255端口C高四位(PC7-PC4)与键盘扫描行连接,低四位(PC0-PC3)与键盘扫描列连接,B口低四位(PB0-PB3)用于控制数码管位码,端口A输出段码信号用于控制数码管对键盘数值的显示。3 键盘输入模块 4*4键盘: 矩阵键盘又称为行列式键盘,它是用4

6、条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。4*4键盘的电路实现: 4 LED数码管输出模块 LED数码管:8段数码显示管用于一般的状态或数字的显示共阴极对应字符的段码表: 显示字形dpgfedcba段码0001111113fh10000011006h201011o115bh3010011114fh40110011066h5011011016dh6011111017dh70000011107h8011111117fh9011011116fh

7、.1000000080hV001111103eh5 原理图设计 五、 结果与分析1 实现现象 2 现象分析由于LED显示是动态的,就没有以图片的方式展示,不过在电子版的报告中,现象视频在附录文件中。上述现象包含加减乘除以及混合运算的演示。其中已经演示了包含高于两位十进制数、负数的运算。六、 总结及体会这次实验真是一波三折,刚开始我的选题是8259的级联,我和我的小组成员已经将实验的流程以及具体实施方案规划好了。但是由于临时的变动了选题,我们开始重新设计,利用课余时间陆陆续续的完成了整个设计流程。到课设的第一天,我们开始连线,以及将驱动程序写入,但是测试的时候出现各种问题,比如说显示不正常,屏幕

8、闪烁太频繁。我们晚上回去思考,第二天重新调试,得到了预期的结果。由于课设的时间还没有结束,我们又将其功能进行了扩展:可以实现多位计算器,可实现负数运算,可实现连续运算。不足的地方在于,没有实现对不同级别运算的先后顺序的判断。七、 附录1 参考文献微机原理与接口技术,郭兰英等编著,清华大学出版社,2006年C+语言程序设计(第四版),郑丽等编著,清华大学出版社,2010年TPC-ZK产品说明,清华大学器材部编写,清华大学出版社,2008年2 源代码/*/*实验名称:运算器*/*实验内容:实现加减乘除运算*/*作者:李俊、丰翔*/*时间:2015-11-21*/*/#include<stdi

9、o.h>#include<conio.h>#include "ApiExusb.h"#pragma comment(lib,"ApiExusb.lib")char led18=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40; /* 0F 无字符 负号 */void toshu(byte *a,int &shu1) /*将数组a中的字符转化为一个数*/if(a3=16)shu1=0;else if(a

10、2=16)shu1=a3;else if(a1=16)shu1=a3+10*a2;else if(a0=16)shu1=a3+10*a2+100*a1;else shu1=a3+10*a2+100*a1+1000*a0;void shuto(byte* a,int shu1) /*将一个数的各个位转化到数组a中*/int fuhao1;if(shu1<0)fuhao1=-1;shu1=-shu1;a0=shu1/1000%10;/* 保证溢出的时候仍能正常显示低位*/a1=shu1/100%10;a2=shu1/10%10;a3=shu1%10;if(a0=0&&a1=0

11、&&a2=0&&a3=0)a0=16; a1=16;a2=16;a3=0;else if(a0=0&&a1=0&&a2=0)a0=16;a1=16;a2=16;if(fuhao1<0)a2=17;else if(a0=0&&a1=0)a0=16;a1=16;if(fuhao1<0)a1=17;else if(a0=0)a0=16;if(fuhao1<0)a0=17;void jisuan(int &shu1,int shu2,char fuhao) /*计算,将结果存入shu1中*/if(

12、fuhao='+')shu1+=shu2;else if(fuhao='-')shu1=shu2-shu1;else if(fuhao='*')shu1*=shu2;else if(fuhao='/'&&shu1!=0)shu1=shu2/shu1;else printf("运算不合法");exit(0);void main() byte data; byte i,j,k=3,ll=0,l=0;/*k是用来控制数码管位码的*/ byte a4=16,16,16,0;/*用来存储LED对应段码的在

13、数组中的下标*/ int shu1=0,shu2=0;/* shu1是临时操作数;shu2是上一步的计算结果*/ char fuhao='+'printf("Press any key to begin!n");getch();if(!Startup()/*打开设备*/printf("ERROR: Open Device Error!n");return; printf("press any key to exitn"); PortWriteByte(0x28b,0x81);/*设置8255的A口B口均为输出、C口输入

14、 1000 10001*/PortWriteByte(0x28a,0x0f); PortReadByte(0x28a,&data);/* 预读端口值 */ i=data; while(!kbhit()/*如果不按接盘,一直循环工作*/ PortWriteByte(0x28b,0x81);/*设置8255的A口B口均为输出 C口输入 1000 10001*/ /PortWriteByte(0x289,0); PortWriteByte(0x288,leda3); PortWriteByte(0x289,0x01);/* 动态显示a中的数字 */ Sleep(50); PortWriteB

15、yte(0x288,leda2); PortWriteByte(0x289,0x02); Sleep(50); PortWriteByte(0x288,leda1); PortWriteByte(0x289,0x04); Sleep(50); PortWriteByte(0x288,leda0); PortWriteByte(0x289,0x08); Sleep(50); PortWriteByte(0x289,0); PortWriteByte(0x28a,0x0f); PortReadByte(0x28a,&data);/*读a口的数字*/ i=data; if (k>=0&

16、amp;&i!=0x0f)/*只有四个led数码管,通过查看a口来判断是否有键按下*/ i=data; Sleep(50); PortWriteByte(0x28b,0x88); PortWriteByte(0x28a,0xf0); PortReadByte(0x28a,&data); Sleep(20); i=i|data; if(ll=1&&k=3) a0=16; a1=16; a2=16; a3=0; if (i=0x77)ak=0;printf("0");Sleep(1000); /*键和对应的功能*/ else if(i=0x7b)

17、l=1;printf("1");ll=0; else if(i=0x7d)l=2;printf("2");ll=0; else if(i=0x7e)l=3;printf("3");ll=0; else if(i=0xb7)l=4;printf("4");ll=0; else if(i=0xbb)l=5;printf("5");ll=0; else if(i=0xbd)l=6;printf("6");ll=0; else if(i=0xbe)l=7;printf("7

18、");ll=0; else if(i=0xd7)l=8;printf("8");ll=0; else if(i=0xdb)l=9;printf("9");ll=0; else if(i=0xdd)printf("+");toshu(a,shu1);jisuan(shu1,shu2,fuhao);shu2=shu1;shuto(a,shu2);fuhao='+'k=4;ll=1; else if(i=0xde)printf("-");toshu(a,shu1);jisuan(shu1,shu2,fuhao);shu2=shu1;shuto(a,shu2);fuh

温馨提示

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

评论

0/150

提交评论