收藏 分销(赏)

单片机系统设计报告(参考模板).doc

上传人:w****g 文档编号:11233172 上传时间:2025-07-09 格式:DOC 页数:21 大小:202.01KB 下载积分:10 金币
下载 相关 举报
单片机系统设计报告(参考模板).doc_第1页
第1页 / 共21页
单片机系统设计报告(参考模板).doc_第2页
第2页 / 共21页


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

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服