《单片机系统设计报告(参考模板)(共21页).doc》由会员分享,可在线阅读,更多相关《单片机系统设计报告(参考模板)(共21页).doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上重庆科技学院学生实习(实训)总结报告 院(系):_ _ 专业班级:_ _学生姓名:_ 学 号:_ _实习(实训)地点:_ _ _ 报告题目:_ 单片机系统综合训练基于单片机的简易计算器设计 报告日期: 201 年 月 日 指导教师评语: _ _ 成绩(五级记分制):_ _ 指导教师(签字):_实习(实训)总结报告的写法及基本要求一、实习(实训)报告一般由标题和正文两部分组成1.标题:标题可以采取规范化的标题格式,基本格式为,“关于的实习(实训)报告”。 2.正文:正文一般分前言,主体,结尾三部分。 (1)前言:主要描述本次实习(实训)的目的意义、大纲的要求及接受实习(
2、实训)任务等情况。 (2)主体:实习(实训)报告最主要的部分,详述实习(实训)的基本情况,包括:项目、内容、安排、组织、做法,以及分析通过实习(实训)经历了哪些环节,接受了哪些实践锻炼,搜集到哪些资料,并从中得出一些具体认识、观点和基本结论。(3)结尾:可写出自己的收获、感受、体会和建议,也可就发现的问题提出解决问题的方法、对策;或总结全文的主要观点,进一步深化主题;或提出问题,引发人们的进一步思考;或展望前景,发出鼓舞和号召等。二、对实习(实训)报告的要求 1.按照大纲要求在规定的时间完成实习(实训)报告,报告内容必须真实,不得抄袭。学生应结合自己所在工作岗位的工作实际写出本行业及本专业(或
3、课程)有关的实习(实训)报告。2.校外实习报告字数要求:不少于800字每周,累计实习3周及以上的不少于2000字。用A4纸书写或打印 (正文使用小四号宋体、行距1.5倍。其余排版要求以美观整洁为准)。校内实习(实训)报告字数要求可适当减少,具体要求由院系依据课程特点规定。3.实习(实训)报告撰写过程中需接受指导教师的指导,学生应在实习(实训)结束之前将成稿交实习(实训)指导教师。三、实习(实训)考核的主要内容1.平时表现:实习(实训)出勤和实习(实训)纪律的遵守情况;实习(实训)现场的表现和实习(实训)笔记的记录情况、笔记的完整性。2.实习(实训)报告:实习(实训)报告的完整性和准确性;实习(
4、实训)的收获和体会。3.答辩:在生产现场随机口试;实习(实训)结束时抽题口试。专心-专注-专业目录设计报告1.功能描述(课程设计内容及要求)设计一个基于单片机的简易计算器设计1)实现两位数的加减乘除运算; 2)实现矩阵键盘输入,由LED数码管输出;3)具有清零功能;4)显示时钟,可以修改时间。(扩展功能)2 方案设计2.1 系统分析根据系统功能要求,可将系统组成结构分成四大部分:矩阵键盘输入、MCU单片机控制中心、数码管计算显示、复位显示,如下图为系统的组成结构图。其中,单片机控制中心和矩阵键盘是核心。MCU根据矩阵键盘的按键输入,可得到两位数经过数学四则基本运算后的不同结果。数字显示完成矩阵
5、键盘四则运算的信息。MCU单片机控制中心计算显示复位显示矩阵键盘输入系统组成结构图2.2 器件选择2.2.1 微处理器这一次的实验,选取微处理器从多方面考:成本低、性能高、能够满足功能要求等等。它的特点十分广泛,有2个16 位定时器/ 计数器,PWM( 4 路)/ P C A(可编程计数器阵列),也可用来再实现4个定时器或4个外部中断(上升沿中断/ 下降沿中断均可支持),ISP (在系统可编程)/IAP(在应用可编程),无需专用编程器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片。这里,选取STC89C51芯片。因为其功能与普通51芯片相同,其价格非常低廉、程序空间大、资源
6、较丰富、在线下载非常方便。同时,使用该芯片,编程上亦可采用所熟悉的KEIL软件,使课程设计非常简单。2.2.2 显示器常见的显示器件LED数码管和LCD液晶器件。LED数码管能够显示数字和部分字符,价格便宜,硬件电路、软件编程均非常简单,而且使用动态扫描技术可节省大量硬件成本。LED显示器结构,基本的半导体数码管是由七个条状发光二极管芯片按图12排列而成的,其具体结构有“反射罩式”、“条形七段式”及“单片集成式多位数字式”等。数码管是用于显示0,1,2,.9数字的显示器件,具体应用时,这些数字都是以BCD编码形式表示,通过译码器加到显示管上。LCD液晶显示器件,显示字迹清晰、能够显示数字、字符
7、和汉字,但价格比LED非常高,编程复杂,软硬件调试都比较花时间。系统显示主要还是数字,根据这两种显示器件的特性,选取LED数码管器件。由于系统要求显示小时和分钟,采用四位数码管显示即可。2.2.3 按键 这里的按键在矩阵键盘和单片机中实现。单片机中只需要一个模式键,其余实现数学四则基本运算的按键在矩阵键盘中。本实验中的矩阵键盘,采用四条IO线作为行线,四条IO线作为列线组成键盘。16个按键0至9需十个按键,加减乘除四个按键,剩下是等于和清零键。3、硬件电路设计3.1 最小系统设计单片机最小系统由单片机、电源、复位电路和晶振电路组成。在最小系统的基础上扩展部分模块可以实现我们需求的全部功能,在进
8、行模块化设计的时候应该要注意各接口之间的电平兼容性。图1 3.2 显示电路设计该数码管显示电路由一个四位的七段数码管组成。数码管的原理还是比较简单的,但是值得注意的是,在设计的时候部分信号线能公用则公用,这样的连线会比较方便,也避免了跳线。3.3 按键电路设计设计成了一个矩阵键盘,由四行四列组成,该矩阵键盘的优点是节约连接芯片上的引脚。3.4 电源电路设计MCU工作电压为5V。为了使用方便,用USB接口供电是最方便的,因此,系统采用USB接口供电的方式,直接从USB接口获取5V电源。4、软件设计4.1 操作功能设计根据系统功能描述,可以将功能大致分成三类:数学基本四则运算功能、清零功能、数码显
9、示功能。系统设有四个数码管,板子设有一模式键,其余十六个键在矩阵键盘里。通过矩阵键盘的输入,在数码管显示了相应的结果。键盘输入,单片机控制,数码管显示,步骤一环扣一环,步步为营,因此在数码管连接方面克服了共阳极数码管显示不清晰的困难。菜单设计如下:菜单1:实现数学四则基本运算,最后得出结果;菜单2:当做完运算后,实现清零功能。 4.2程序编制思想数码管采用动态扫描原理。所以系统需使用单片机定时器资源。定时时间可设为5ms,即4位数码管,每5ms扫描一位数码管,20ms循环一次。另一方面,按键接普通IO口,所以按键管理程序所涉及到的识键、译键均需采用软件扫描的方法。这里选用定时扫描控制方式。所以
10、,程序编制思想为:使用定时器0(或1)完成数码管动态扫描,并对按键进行扫描。扫描到相应的按键时,如功能键,则执行相应的操作,如,切换菜单。切换菜单的方法,主要是通过程序定义一个变量,变量不同的值表示不同的菜单。通过定义两个变量,分别储存第一次输入的数和第二次输入的数,又继续通过两个变量来确定输入的第几个数或者符号,然后再定义一个变量用来储存计算的结果,最后用数码管显示出来。4.3 主程序(程序流程图主要根据学生的思路来绘制)这里只给出数码管动态扫描所涉及的流程图。主程序定时器初始化等待变量初始化 定时中断开位码送段码值位码切换退出继续扫描数码管显示等待结果计算输入第二个数识别符号输入第一个数延
11、时去抖扫描键盘行列初始化开始按键按下5 程序调试在程序编制当中易出现问题:定时器中断的用法、动态扫描的过程、按键与显示的对应,按键的消抖动等。在实行矩阵键盘的加减乘除的时候,数码管得出来正确的结果,但是数码管灯一直在闪烁,我很迷茫,于是找了老师向她请教,结果是编译的程序有问题,通过在老师的指导和同学的帮助下,最终恢复了正常。我懂得了定时器中断是单片机内部中断, 它定义单片机多少时间中断检测一次,一般用于定时检测管脚数据,检测定义的标志位。在实验中还出现了这样一个问题,矩阵键盘上的有一部分键按下之后没有响应,要么是整列要么是整行没有响应,于是我先想到了是不是程序出现了错误,是否在定义数字的时候有
12、问题,结果发些没有问题,在不经意间,我碰到了接线,发些按键恢复了正常,最终得出的是接线不够灵敏,有点松动,让我虚惊一场,不过在调试过程中,这些都是我们去值得注意的问题。6 技术小结主要技术应包括:单片机最小系统结构、数码管显示技术、按键检测技术、系统功能设计、软硬件调试等技术。 本次课程设计我知道了按键的消抖动的重要性,按键的消抖动分为了硬件消抖和软件消抖,前者在键数较少时可用此方法消除键抖动;后者在键较多时,可以用此方法去消抖。 在扫描数码管时可以分为动态扫描和静态扫描,明白了动态扫描更容易实现,更加优化。7基于单片机的简易计算器的使用说明(开发一个单片机应用系统,正如开发一个产品,产品在开
13、发完毕后,对用户来说,产品说明书是用户使用产品的主要手册,是用户对产品功能使用的主要技术支持,因此,写好产品使用说明非常重要)使用说明主要包括:功能使用(见功能描述)、人机接口、操作说明(见菜单设计)等。待计算机的程序都准备完毕之后,按下单片机的模式键,数码管灯亮。此后,该矩阵键盘的第一列依次为加减乘除,第二列按键依次是3、6、9、=,第三列按键依次为2、5、8、清零键,第四列按键则依次表示为1、4、7、0键。对其中的某一数字按下一次表示的是一位数的加减乘除,若再按下同一或不同数字则表示的是两位数的加减乘除。此矩阵键盘实现的是两位数的加减乘除和清零。8心得体会 不知不觉,三个星期的实训已经结束
14、,时光飞逝,过去一个月的点点滴滴,历历在目,想起刚上第一节课的时候,老师的认真讲解,恍若梦中。这三个星期学到了很多的内容,第一个星期,我好好的巩固了自己C语言知识,并在图书馆借到了几本c语言书来拓展我的知识面,我们需要做的是简易计算器,这个系统需要有键盘模块,显示模块等等。我迫使自己每天下午去图书馆翻阅资料。皇天不负有心人,我还是很顺利的完成了第一个星期的电路理论设计部分,在老师的指导下,把自己的电路做的更加的完美。这一个星期,虽然只是理论设计,没有动手,但是还是学到了许多在课堂上无法学到的知识。后面的时间就开始了软件设计与分析。虽然有很多不懂的地方,但在老师的帮助下,每天都有新的收获。最后完
15、成了任务。一个月一闪而过,感谢各位老师的淳淳教导,在这一个月的相处中,我从您们那里学到了很多优秀的品质,当然我自己的知识水平也得到了质的飞越!回顾这两个星期的实训,我学到了很多知识,在以后的生活工作中,谨记老师教导,积极面对未来!9参考文献(最近3年)1沈红卫. 单片机的智能系统设计与实现M. 北京电子工业出版社. 2005. 2李光飞,楼然苗,胡佳文,等著. 单片机课程设计实例指导M. 北京航空航天大学出版社. 2005.3汪德彪. MCS-51单片机原理及接口技术M. 北京电子工业出版社. 2004.4胡文金,钟秉翔. 单片机应用技术实训教程M. 重庆大学出版社. 2005.5张毅刚,彭喜
16、元,董继成. 单片机原理及应用M. 重庆大学出版社. 2003.附录1:电路原理图附录2:程序参考清单 #include#define uchar unsigned char#define uint unsigned intuchar code shuma=0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x40,0x46,0x01,0x08,0x09;uchar jian4=10,11,10,10;uchar jia4=10,12,11,10;uchar chu4=11,15,11,10;uchar cheng4=15,11,1
17、5,10;uchar deng4=15,10,10,10;uchar cun4=10,10,10,10;uchar figure=0,figure1=0,figure2=0,figure4=0,figure6=0;int figure5=0;uchar time1=0,time2=0,Bit=0,b=0,c=0,aim=0,aim1=0,aim2=0;uchar answer=0,answer1=0;uchar temp=0;int a=0;sbit P24=P24;sbit P25=P25;sbit P26=P26;sbit P27=P27;sbit P21=P21; void delay(
18、) uchar i=0,j=0; for(i=99;i0;i-) for(j=99;j0;j-); void scan() if(aim=3)aim=0; P1=0xfd; temp=P1; if(temp!=0xfd) delay(); if(temp!=0xfd) switch(P1) case 0xed: figure=3; aim+; break; case 0xdd: figure=6; aim+; break; case 0xbd: figure=9; aim+; break; case 0x7d: figure=14; break; while(temp!=0xfd) P1=0x
19、fd; temp=P1; P1=0xfe; temp=P1; if(temp!=0xfe) delay(); if(temp!=0xfe) switch(P1) case 0xee: figure=10; aim=0; aim1=1; aim2=0; break; case 0xde: figure=11; aim=0; aim1=1; aim2=0; break; case 0xbe: figure=12; aim=0; aim1=1; aim2=0; break; case 0x7e: figure=13; aim=0; aim1=1; aim2=0; break; while(temp!
20、=0xfe) P1=0xfe; temp=P1; P1=0xfb; temp=P1; if(temp!=0xfb) delay(); if(temp!=0xfb) switch(P1) case 0xeb: figure=2; aim+; break; case 0xdb: figure=5; aim+; break; case 0xbb: figure=8; aim+; break; case 0x7b: figure=15; aim=0; break; while(temp!=0xfb) P1=0xfb; temp=P1; P1=0xf7; temp=P1; if(temp!=0xf7)
21、delay(); if(temp!=0xf7) switch(P1) case 0xe7: figure=1; aim+; break; case 0xd7: figure=4; aim+; break; case 0xb7: figure=7; aim+; break; case 0x77: figure=0;aim+; break; while(temp!=0xf7) P1=0xf7; temp=P1; void display() if(figure=15) figure1=0; figure4=0; answer1=0; figure=0; aim=0; aim2=0; aim1=0;
22、 if(aim2=0) if(aim1=0) cun0=figure1/10; cun1=figure1%10; cun2=10; cun3=10; if(aim=2) figure1=10*figure1+figure; aim=0; aim2=1; if(aim=1) if(figure=0&figure=0&figure=4)Bit=0; P2|=0xf0; P0=shumacunBit; if(figure=14) answer1=1; if(figure=13) P0=shumachuBit;answer=4; if(figure=12) P0=shumachengBit;answe
23、r=3; if(figure=11) P0=shumajianBit;answer=2; if(figure=10) P0=shumajiaBit;answer=1; switch(Bit) case 0: P24=0;break; case 1: P25=0;break; case 2: P26=0;break; case 3: P27=0;break; void chuli() if(answer1=1) if(answer=1) figure5=figure4+figure1; answer=0; aim=0; aim1=2; cun0=figure5/1000; cun1=(figure5%1000)/100; cun2=(figure5%100)/10; cun3=figure5%10; if(answer=2) figure5=figure1-figure4; answer=0; aim=0; aim1=2; if(figure50) cun0=figure5/1000; cun1=(figure5%1000)/100; cun2=(figure5%100)/10; cun3=figure5%10; if(figure5=2)c=0; void time3(void) interrupt 1 TH0=0xf8; TL0=0xcd; display();
限制150内