单片机课程设计报告Word格式文档下载.docx
《单片机课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
6.1硬件调试13
6.2软件调试13
总结14
参考文献15
附录------------------------------------------------------------------------------------16
第一章绪论
1.1课题简介
当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。
计算器作为一种快速通用的计算工具方便了用户的使用。
计算器可谓是我们最亲密的电子伙伴之一。
本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发对计算器设计做了详细的分析和研究。
单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
在工业生产中。
单片微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
本系统就是充分利用了8051芯片的I/O引脚。
系统以采用MCS-51系列单片机Intel8051为中心器件来设计计算器控制器,实现了能根据实际输入值显示并存储的功能,计算程序则是参照教材。
至于位数和功能,如果有需要可以通过设计扩充原系统来实现。
1.2设计目的
通过本次课题设计,应用《单片机原理及应用》等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。
通过本次设计的训练,可以使我在基本思路和基本方法上对基于MCS-51单片机的嵌入式系统设计有一个比较感性的认识,并具备一定程度的设计能力。
1.3设计任务
在本次课程设计中,主要完成如下方面的设计任务:
1、简要阐述单片机技术发展的国内外现状及LED动态显示和矩阵键盘基本原理;
2、掌握MCS-51系列某种产品(例如8051)的最小电路及外围扩展电路的设计方法;
3、了解单片机数据转换功能及工作过程;
4、完成主要功能模块的硬件电路设计及必要的参数确定;
5、用protel软件完成原理电路图的绘制;
1.4设计方法
电路采用动态显示,由八位共阳极数码管通过P0口,P2口与单片机分别相连,且数码管A,B,C,D,E,F,G分别依次与单片机的P0口相连,P0口做为字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的P2.0—P2.7相连,P2口做为数码管的位控制端,动态显示是每次数码管只显示一位,由于人的视觉停留是0.05到0.2秒之间,当数码管依次点亮各个位时,使循环的频率高于人的视觉停留时间,人们就会认为数码管是同时点亮的,就可以达到动态显示的效果。
输入键盘采用4*4键盘。
采用软件识别键值并执行相应的操作,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序。
这样循环执行。
第二章设计内容及要求
基本功能:
利用89c51作为主控器组成一个四则运算的计算器。
可选器件:
51系列单片机、6264、7段LED数码管、74LS244或74LS240、与非门等
第三章方案论证与比较
3.1控制部分的设计方案论证与选择
根据设计要求,控制器主要用于红外信号的接收和辨认、控制步进电机的动作,控制显示步进电机的转速等。
对于控制器的选择有以下三种方案。
方案一:
采用计算器专用芯片实现。
用计算器专用芯片进行设计并编程实现。
这种设计方案计算效率高、速度快、而且成本也相对较低,是厂家做计算器的最佳方案。
但是本人对计算器专用芯片掌握的不够,还不足以实现设计计算器,所以这个方案不可去。
方案二:
采用FPGA(现场可编程门阵列)作为系统的控制器。
FPGA将所有器件集成到一块芯片上,体积小,节省空间,提高了稳定性;
直接面向用户,具有极大的灵活性和通用性,使用方便,硬件测试和实现快捷,开发效率高,工作可靠性好。
可以实现各种复杂的逻辑功能,规模大,密度高,采用并行的输入输出方式,系统处理速度高,适合作为大规模实时系统的控制核心。
由FPGA内部编程实现计算器功能,本设计对数据处理速度的要求不是很高,FPGA的高速处理的优势得不到充分的体现,由于其集成度高,使其成本偏高,同时由于芯片的引脚较多,实物电路板布线复杂,加重了电路设计和实际焊接的工作。
并且FPGA的价格相对较高,性价比太低。
方案三、用单片机实现。
由于单片机集成了运算器电路、控制电路、存储器、中断系统、定时器/计数器以及输入/输出口电路等,所以用单片机设计控制电路省去了很多分立元器件。
由于单片机是可编程芯片,并且它可以运用C语言编写,对于一些复杂的计算功能,可以调用C语言库函数。
使编写程序变得非常简单。
所以该课题用单片机实现,不仅功能易于实现,而且精确度高,稳定性好,抗干扰能力强。
并且由于其成本低、体积小、技术成熟和功耗小等优点,且技术比较成熟。
性价比也相当高。
更重要的是本人经过几年的学习,对单片机已有深刻的理解,并且可以灵活运用。
综上所述,并通过各个方面综合比较为达到最佳效果。
我们采用方案三利用单片机控制器。
3.2键盘设计方案与选择
独立键盘。
独立键盘为一端接地,另一端接I/O口,并且要接上拉电阻。
这种键盘的硬件都很容易实现,但每一个按键就要用一个I/O口,非常的浪费单片机的I/O口资源,不适合本次设计。
自制编码键盘。
编码键盘的电路如图1-9所示,这种键盘有编程简单,占用资源少,但其硬件比较复杂,要用很多的二极管,不是很理想。
图1-9、自制编码键盘电路图
方案三:
4*4矩阵式键盘。
其电路图如图图1-10所示,这种键盘的硬件简单,使用的I/O口也不多,而且这种键盘的编程方法已很成熟。
所以本次设计采用这种矩阵式键盘。
第四章硬件系统设计
硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。
单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。
本设计选用以AT89S51单片机为主控单元。
显示部分:
采用7段LED动态显示。
按键部分,采用4*4键盘。
4.1键盘接口电路
计算机输入数字和其他功能按键时要用到很多按键,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这样的方式,而是采用矩阵键盘的方式。
矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的数量就为4*4个。
这样行列式键盘结构能有效的提高单片机系统中I/O口的利用率。
计算器的键盘布局如图3.2所示:
一般有16个键组成,在单片机中正好有一个P端口实现16个按键功能,这种形式在单片机系统中最常用。
图3.2矩阵键盘内部电路
4.27段LED数码管
利用集成的LED数码管(四位)
4.3程序下载接口
利用串行口芯片232烧录入程序
4.4数码管驱动芯片
利用244芯片驱动数码管显示
4.5、单片机时钟电路
时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚X1,输出端为引脚X2,在芯片的外部跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
此电路采用12MHz的石英晶体。
时钟电路如下图2-2:
图2.2时钟电路
4.6、单片机复位电路
复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误是系统处于死锁状态时,为摆脱困境,也需要按复位键以重新启动。
RST引脚是单片机复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡周期(即2个机器周期)以上,若使用频率为12MHz的晶振,则复位信号持续时间应超过4
s才能完成复位操作。
复位操作有上电自动复位和按键手动复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的。
按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的。
在本设计中采用了按键电平复位方式,其复位电路如下图2-3。
图2-3、复位电路
第五章软件设计
5.1汇编语言和C语言的特点及选择
本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。
在单片机的应用系统程序设计时,常用的是汇编语言和C语言。
机硬件,程序可读性和可移植性比较差。
而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。
在本设计中采用C语言编写软件程序。
主程序的设计详见附录三。
5.2键扫程序设计
键扫程序的过程为:
开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。
其流程图如图4.1所示。
图4.1键扫程序流程图
5.3算术运算程序设计
算术运算程序的过程为:
先判断输入的运算符是+、-、*、/中的哪一个,若是+或-,则要判断运算结果是否溢出,溢出则显示错误信息,没溢出就显示运算结果,若是/,则要先判断除数是否为零,为零就显示错误信息,不为零则显示运算结果,若是-,则直接显示运算结果。
其流程图如图4.2所示。
图4.2算术运算程序设计流程图
5.4LED显示原理
LED点阵显示器亦称LED矩阵板,具有亮度高、发光均匀、可靠性好、接线简单、拼装方便等优点,能构成各种尺寸的大屏幕显示器。
因此,它被广泛应用于大型LED智能显示屏、智能仪器仪表和机电一体化设备的显示单元中,取得了较好的效果。
由于它经济、小型的显示系统,同时要求使用方便灵活,方便地组成了由多块大屏幕LED显示器构成的显示系统,该系统可广泛用于商场、车站、码头及其它公共场合。
LED显示屏由ED点阵显示器(常见型号为P2158A)构成。
它是以发光二极管为像素,按照行与列的顺序排列而成的显示器件,采用逐行(或逐列)扫描方式工作,由峰值较大的窄脉冲驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的脉冲信号,反复循环以上操作,就可显示各种图形或文字信息
此设计中LED数码管的显示为动态显示。
各数码管在显示过程中轮流得到送显信号,与各数码管接口的I/O口线是共用的。
动态显示优点是用元器件少,占I/O线少。
但缺点是有闪烁,必须扫描,花费CPU时间,编程复杂。
LED多数情况用于显示十进制数字,要将0~9的数字用7段显示,必须将数字转换为LED对应七段码的信息,比如,要显示“0”,就是让a、b、c、d、e和f段发光,显示“1”,让b和c段发光,等等如表所示。
然后根据LED是共阴极还是共阳极接法确定LED各输入端应接逻辑1还是逻辑0,我选用的是共阴接法,要显示“0”时,a、b、c、d、e和f段就要输入逻辑1,即其段码为3F,
将待显示内容“翻译”为LED段码的过程,可以由软件查表方法实现译码。
第六章系统调试与存在的问题
6.1硬件调试
常见故障:
1、逻辑错误:
它是由设计错误或加工过程中的工艺性错误所造成的。
这类错误包括错线、开路、短路等。
2、元器件失效:
有两方面的原因:
一是器件本身已损坏或性能不符合要求;
二是组装错误造成元件失效,如电解电容、集成电路安装方向错误等。
3、可靠性差:
因其可靠性差的原因很多,如金属化孔、接插件接触不良会造成系统时好时坏,经不起振动;
走线和布局不合理也会引起系统可靠性差。
4、电源故障:
若样机由电源故障,则加电后很容易造成器件损坏。
电源故障包括电压值不符合设计要求,电源引线和插座不对,功率不足,负载能力差等。
调试方法:
包括多级调试和联机调试。
在调试过程中要针对可能出现的故障认真分析,直至检查出原因并排除。
本次硬件调试过程中,对所出现的问题进行了认真的分析和改正,最后能够很好的达到设计要求的效果。
6.2软件调试
软件调试一般分为以下四个阶段:
1、编写程序并查错;
2、在C语言的编译系统中编译源程序3、对程序进行编译连接,并及时发现程序中存在的错误;
4、改正错误。
在软件调试过程中,对出现的错误进行了认真的分析和修改,多次调试成功后,能够很好的达到既定的设计效果。
此系统可以改进为增加小数点和负数以及一种科学计算功能,这是一个比较难的挑战。
总结
这次单片机课程设计不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,例如对以前所学过的知识理解得不够深刻,掌握得不够牢固,学习了单片机C语言。
经过一周的努力,顺利的完成了单片机课设。
这是一个磨练意志的过程。
从课题的选择开始,计算器的设计、硬件和软件系统的设计、到最后的Proteus软件仿真完成,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。
一方面通过C51单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用;
另一方面在用Proteus软件画电路图时,然后再转换成一维的WORD中进行编辑,这个过程中让我掌握了计算机辅助的设计技术。
当然,这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。
需要的是细心和耐心。
在很大程度上培养了我拼搏的工作精神。
使我受益匪浅,更加明确了自己专业的方向。
通过本次课设,我不仅学到了关于单片机技术方面的许多专业知识,同时也让我感觉到团队合作的重要性。
其实如何有效和快速的找到资料也是课设给我的启发,利用好图书馆和网络,是资源的到最好的利用。
与他人交流思想是取得成功的关键,在交流中,不仅强化了自己原有的知识体系,也扩展了自己的思维。
课设是一个通过思考、发问、自己解惑并动手、提高的过程。
我会在以后的学习中不断学习,积累经验,完善自己。
这里我要感谢实验室的指导老师,没有老师的细致讲解和耐心的检查,也就没有我的计算器出来,非常感谢!
参考文献
[1]徐爱钧.智能化测量控制仪表原理与设计(第二版).北京航天航空大学出版社,2004.9
[2]杨恢先黄辉先著.单片机原理与应用.人民邮电出版,2009.7
[3]朱定华著.单片机原理与接口技术.电子工业出版社,2001.4
[4]王威著.HCS12微控制器原理及应用.北京航空航天大学出版社,2007.10
[5]龚运新著.单片机C语言开发技术.北京清华大学出版社,2006.10
[6]胡洪波著.单片机原理与应用实验教程.湘潭大学出版社,2009.7
附录
附录一:
计算器硬件连线图
附录二:
源程序
#include"
reg51.h"
sbitP3_0=P3^0;
sbitP3_1=P3^1;
sbitP3_2=P3^2;
sbitP3_3=P3^3;
sbitP3_4=P3^4;
sbitP3_5=P3^5;
sbitP3_6=P3^6;
sbitP3_7=P3^7;
unsignedcharsz[11],xs1[4],xs2[4],sj;
inti,j,cs,bb,t1,t2,fh,s1,s2;
voidchushihua()//初始化
{
bb=1;
//bb是标志为第一或者第二个操作数
xs1[0]=10;
xs1[1]=10;
xs1[2]=10;
xs1[3]=10;
//xs数组是要显示的数
xs2[0]=10;
xs2[1]=10;
xs2[2]=10;
xs2[3]=10;
t1=0;
t2=0;
s1=s2=0;
fh=0;
//符号
cs=1;
}
voidxianshi(unsignedcharxs[4])//显示子程序
inti,j;
unsignedcharzy;
zy=0x08;
//位选信号
for(i=0;
i<
4;
i++)
{
P2=zy;
P1=sz[xs[i]];
//查表得到显示的代码
zy=(zy>
>
1);
//右移一位
for(j=0;
j<
100;
j++);
//显示延时
}
//for(i=0;
i++);
return;
unsignedcharsaomiao()//扫描子程序
inti;
unsignedcharpp;
1000;
P0=0xfe;
P3=0x0f;
pp=P3;
if(P3_0==0){P3=0x0f;
pp=P3;
while(P3_0==0);
for(i=0;
return7;
}//判断按键,含消抖过程。
下同
if(P3_1==0){P3=0x0f;
while(P3_1==0);
return8;
if(P3_2==0){P3=0x0f;
while(P3_2==0);
return9;
if(P3_3==0){P3=0x0f;
while(P3_3==0);
return11;
//==========1
P0=0xfd;
return4;
return5;
return6;
return12;
//==========2
P0=0xfb;
return1;
return2;
return3;
return13;
//==========3
P0=0xf7;
return16;
return0;
return15;
return14;
//===========4
return10;
//没按键,返回10
voidchuli(unsignedcharx)//处理程序
if(x==16)
cs=0;
return;
if(x>
=0&
&
x<
10)//输入为数字
if(bb==1)//为第一个操作数
{
if(s1==4){cs=0;
return;
else//输入数字没有四位,则左移一位
{
for(i=3;
i>
0;
i--)
xs1[i]=xs1[i-1];
xs1[0]=x;
s1++;
t1=t1*10+x;
}
}
if(bb==2)//与上同
if(s2==4){cs=0;
else
xs2[i]=xs2[i-1];
xs2[0]=x;
s2++;
t2=t2*10+x;
}
10)//输入为符号
if(bb==1){fh=x;
bb=2;
return;
if(bb==2)
if(fh==11)t1=t1/t2;
if(fh=