资源描述
目 录
第一部分 设计任务与调研………………………………………………………1
第二部分 设计说明…………………………………………………………………3
第三部分 设计成果…………………………………………………………………9
第四部分 结束语……………………………………………………………………14
第五部分 致谢…………………………………………………………………………15
第六部分 参考文献…………………………………………………………………16
一、设计任务与调研
1.1毕业设计的主要任务
以STC89C52单片机为核心,辅以必要的电路, 设计一个简易的秒表。由5V直流电源供电,能够通过数码管准确显示时间、调整时间,从而到达学习、设计、开发软、硬件的能力。
1.2设计的思路
单片机的模块中最常见的就是数字钟,数字钟是一种利用数字电路技术以实现分、秒计时的装置,与传统机械式的时钟相比具有更高直观性和准确性,并且无机械装置,有着更长的使用寿命,因此能够被广泛的使用。现如今,高精度的计时工具大多都使用了石英晶体振荡器,由于电子钟,石英钟,石英表都采用了石英技术,因此走时精度和稳定性高,不需要经常调校使用方便。数字式电子钟是用集成电路计时,译码代替机械式传动,用LED显示器代替了指针显示进而显示时间,计时误差减小。这种表具有时,分,秒显示时间的功能,还可以进行时、分和秒的校对,灵活性好。
在计算机系统中,时钟电路的作用是非常重要的,是确保系统可以正常工作的基础。在一个单片机应用系统中,时钟有着两个方面的含义:一是指为保障系统能够正常工作的基准振荡定时信号,主要是由晶振和外围电路构成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但是误差比较大,主要是用于对时间精度要求不高的场合;二是用专门的时钟芯片实现,时间精度很高,常用的时钟芯片有:DS1302,DS12C887等。
本设计采用单片机内部的定时/计数器来实现电子时钟计时,由STC89C52单片机和LED数码管为核心,辅以必要的电路,构成单片机电子时钟。
1.3与本课题相关的资料
1.3.1 计时模块
本设计最主要的部分是数字时钟,基于硬件电路,考虑用软件来实现数字时钟。原理为:在单片机内部存储器设三个字节分别用来存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,而每产生一次中断,其存储器内相应的秒值增加1;若秒值达到了60,就将其清零,并将相对应的分字节值加1;若分值达到了60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。
1.3.2系统控制器的选择
单片机具有性价比高、电压低、可靠性强、功耗低等特点,使其能够发展和大范围的推广。单片机的算术运算功能强,软件编程灵活自由,可用软件编程以实现各种逻辑功能,本身带有定时器、计数器,可以用来定时和计数,并且其功耗低,体积小,计数成熟和成本低等优点。基于以上分析,本设计采用了STC89C52单片机作为控制器
1.3.3显示电路的选择
显示用液晶,硬件不复杂,用软件能达到很好的控制。不过液晶字符显示器虽然可以很清晰地显示非常丰富的内容,但是液晶字符式价格昂贵,而且在本设计中并不需要用到复杂的显示内容,因此我们放弃了此方案。从经济的角度来考虑,为了降低制作和设计的成本,我们选用LED数码管显示。虽然显示的内容相对有限,但也能显示数字和几个英文字母,在此设计中已经足够用了,并且价格相比液晶字符式要低。
1.4调研的目的和总结。
单片机体积小、重量轻、具有较强的抗干扰能力、环境要求不高、价格低廉、可靠性高、灵活性好、开发容易。因具有上述的优点,在我国自动化控制领域得以广泛地应用。例如在自动检测、智能仪表仪器、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习应用,设计一个由数字电路实现对 “秒”数字显示的计时装置。
数字钟的精度、稳定性是远超老式机械钟的。在这次设计中,我们将采用LED数码管,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,定时器计数。在此次设计中,电路具有显示时间的其本功能,可以实现对时间的调整。
二、 设计过程与说明
2.1整体方案设计
2.1.1设计要求
1)可实现0-99计数
2)具有按键暂停功能
2.1.2 系统概述
以STC89C52单片机为核心器件,配合电阻电容晶振等元器件,构成单片机的最小系统。其它个模块围绕着单片机最小系统展开。其中包括,显示设备为共阴数码管;电源供电则采用USB 5V供电,同时还包括按键部分,实现暂停开始。
2.1.3系统框图
数码管显示
单片机
最小系统
电源部分
按键部分
图2-1系统框图
2.2最小系统模块
2.2.1 STC89C52简介
(1)概述
STC89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用了ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,内置通用8位中央处理器和Flash存储单元,功能强大的STC89C52单片机可提供许多较复杂系统控制应用场合。
STC89C52有40个引脚,32个外部双向输入/输出(I/O)端口,内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线。STC89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
(2)8051单片机的引脚图
STC89C52单片机采用40个引脚,双列直插式封装,用HMOS工艺制造,其外部引脚排列如图2-2所示。
图2-2 STC89C52引脚图
2.2.2最小系统电路
STC89C52的最小系统如图2-3所示,整个最小系统由三个部分组成,晶振电路部分、复位电路部分、电源电路等三个部分组成。
晶振电路包括2个30pF的电容C2和C3,以及12M的晶振X1。电容在这里是起振作用,帮助晶振更容易的起振,取值范围是15-33pF。晶振的取值也可以是24M,晶振的取值越高,单片机的执行速度越快。在进行电路设计的时候,晶振部分越靠近单片机越好。
单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机的情况时,只要按下重启按钮,电脑内部的程序就会重新开始执行。单片机也是一样,当单片机系统在运行中,如受到环境干扰而出现程序跑飞的情况,按下复位按钮,内部的程序就会自动重新开始执行。
复位电路由10uF的极性电容C1和10K的电阻R4构成。用电容电压不能突变的性质可以知道,当系统一上电,RESET脚将会出现高电平,并且这个高电平持续的时间由电路的RC值来决定。典型的51单片机当RESET脚的高电平持续两个机器周期以上就将复位,所以适当组合RC的取值就可以保证可靠的复位。
在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K×10UF=0.1S。也就是说在电脑启动的0.1S内,电容两端的电压时在0-3.5V增加,这个时候RESET引脚所接收到的电压是5V-1.5V。在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。所以在开机0.1S内,单片机系统自动复位(RESET引脚接收到的高电平信号时间为0.1S左右)。
最后一个是电源部分,实物可以采用5V的USB直接供电,手机充电器、电脑USB口、移动电源等设备都可以进行供电。
此外,除了单片机最小系统的3个部分之外,这里还多了一些外部电路。
由于STC89C52的P0口是漏极开路输出,因此在P0口接了一个10K的排阻R1,使得P0口可以作为普通的I/O口使用,本设计用P0口来做液晶的数据口。
特别注意的是,对于31脚(EA),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行。由于我们的程序存储在了单片机内部,所以EA要接高电平,保证单片机是从内部读取程序去执行的。
图2-3 单片机最小系统电路
2.3显示电路
2.3.1 数码管简介
8字形LED数码管实质是由七个发光管构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,形成我们眼睛看到的字样。如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
led数码管的结构及工作原理:led数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部完成连接,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。位数有半位,1,2,3,4,5,6,8,10位等等....,led数码管根据LED的接法不同分为共阴和共阳两类,了解了LED的这些特性,这对编程是很重要的,因为对于不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图2是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。led数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。下面将介绍常用LED数码管内部引脚。
图2-4 数码管实物图
图2-4这是一个7段两位带小数点 10引脚的LED数码管
图2-5 LED数码管引脚定义
图2-5引脚定义 :每一笔划都是对应一个字母表示 DP是小数点。LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。本设计采用的是动态显示驱动:数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp "的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。
2.3.2 数码管显示电路
本模块的电路的连接图如图所示,连接单片机的P0口,1h,2h为位选,连接单片机的P2口。
图2-6 数码管显示电路
2.4 按键电路
图2-7按键电路
通过连接单片机P16口的按键来设置秒表的暂停和开始功能。
2.5软件设计
2.5.1程序语言及开发环境
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
2.5.2程序流程设计
1)主程序流程图如图所示:
开始
将秒的
数据显示
N
Y
秒加一
清零
秒是否到99
结束
图2-8 主程序流程图
定时器初始化
并打开定时器
2)定时器中断T0流程图
T0中断
保护现场
秒表
加1s处理
恢复,中断返回
图2-9定时器中断T0流程图
2.6系统调试
Proteus ISIS是英国Labcenter公司开发的实物仿真与电路分析软件,它可以仿真、分析各种集成电路和模拟器件。软件的主要特点:实现了SPICE电路仿真和单片机仿真相结合的功能,支持主流单片机系统的仿真和调试软件功能,实现原理图绘制。由于它的出现,可以先仿真调试通过之后再焊接电路,不需要先焊接电路板,大大减少在硬件调试上花费的时间。
打开已经画好的Proteus DSN文件,双击图中的AT89S52芯片,弹出一个窗口,在program file项中通过路径,选择在keil中生成hex文件,双击选中然后确定,这样仿真图中的AT89S52芯片就已经读取了本设计中的hex文件,最后进行仿真。
三、 设计成果
3.1作品特点
(1)操作容易,简单实用
(2)可实现0-99计数
(3)具有按键暂停功能
3.2设计成果proteus仿真电路图
图3-1 proteus仿真电路图
3.3佐证材料:
基于单片机的秒表设计源程序及注释:
#include<reg52.h> //头文件
#define uint unsigned int
#define uchar unsigned char //宏定义
uchar temp,aa,shi,ge; //定义变量
uchar code table[]={0x6f,0x0a,0xe3,0xcb,0x8e,0xcd,0xed,0x0f,0xef,0xcf};//数码管字符码0-9
//声明初始化函数
sbit stop = P1^6;
/********************************
函数名称: 延时函数 delay
功 能: 延时指定毫秒
********************************/
void delay(uint z) //延时函数 1ms
{
uint x,y; //定义延时变量
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/********************************
函数名称: 显示函数display()
功 能: 数码管显示
*********************************/
void display(uchar shi,uchar ge) //显示函数
{
P2=0xfd; //选中1位
P0=table[shi]; //P0口输出数字码,显示十位数
delay(5); //延时5ms
P2=0xfe; //选中2位
P0=table[ge]; //P0口输出数字码,显示个位数
delay(5); //延时5ms
}
/********************************
函数名称: 定时器初始化函数
功 能: 定时器初始化
*********************************/
void init() //初始化函数
{
temp=0; //秒清零
TMOD=0x01; //定义工作方式
TH0=0x3c; //定时器赋初值
TL0=0xb0; //50ms
EA=1; //打开中断总开关
ET0=1; //打开T0中断允许开关
TR0=1; //打开定时器定时开关
stop=1;
}
/********************************
函 数 名 称 : 主函数
*********************************/
void main() //主函数
{
init(); //调用初始化函数
while(1) //进入循环
{
if(aa==20) //变量加一次是50ms,加20次是一秒
{
aa=0; //变量清零
temp++; //秒变量加
if(temp==100) //最大计时99秒
{
temp=0; //大于等于100s时清零
}
shi=temp/10; //将秒数据分成两个一位数,比如35s,35/10=3
ge=temp%10; //将秒数据分成两个一位数,比如35s,35%10=5
}
display(shi,ge); //将数据显示到数码管上
if(stop==0)
{
TR0=~TR0; //关闭定时器0
// do
display(shi,ge); //将数据显示到数码管上
while(!stop);
}
}
}
/**********************************
函数名称: 中断函数
***********************************/
void timer0() interrupt 1 //定时器工作函数
{
TH0=0x3c; //进入中断后先将定时器重新赋初值
TL0=0xb0;
aa++; //变量加1,加一次是50ms
}
四、总结
经过多月的努力,本次毕业设计的任务已经完成。这个设计的题目并不是新的,但从中可以体现出一个系统开发设计的过程,足以让我们受益。从设计、论证、制板、编程到最终的调试成功,完成整个系统的设计,以理论联系实践,这是一次难得的机会。通过查资料和收集有关的文献,也培养了自学能力。并且由原先的被动接受知识转换为主动寻求知识,这是学习方法上的一个突破。在以往的传统学习模式下,我们可能会记住很多书本知识,但是通过毕业设计,我们学会了如何将学到的知识化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题,把握重点,攻克难关,活学活用。
设计论证和完成本次设计的过程,将单片机原理、C语言程序、模拟电路基础与数字电路基础等多门课程的内容有机地结合应用在了一起。通过实际的分析与应用深化了对这些主干知识的认识。此外掌握了从系统的需求、方案论证、功能模块的划分、原理图的设计和绘制、程序设计到软硬件调试的设计流程,积累了硬件设计的经验。单片机的功能日益强大,但其基本原理是相对不变的。因此虽然本次设计任务的功能较为简单,但是能够较全面的涉及单片机各项基本知识,提高了自己的单片机设计能力,是一次将理论能力向实践能力转化的好机会。
通过这次毕业设计,我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学期间的学习成果。虽然在这次设计中对知识的运用和衔接还不够熟练。但是我将在以后的工作和学习中继续努力、不断完善。这次设计是对过去所学知识的系统提高和扩充的过程,今后我将不断加深理论基础和实践能力,在以后的工作学习中取得更大的进步。
在设计过程中由于时间仓促有很多地方难免存在不足之,但在以后的工作中,我们会严格要求自己最求完美。
致 谢
本设计的研究工作是在我的指导老师精心指导和悉心关怀下完成的。从开端到结束,我所取得的每一个进步、编写的每一段程序都无不倾注着导师辛勤的汗水和心血。导师严谨的治学态度、渊博的各科知识、无私的奉献精神使我深受启迪,从尊敬的导师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。在今后的学习工作中,我将铭记恩师对我的教诲和鼓励,尽自己最大的努力取得更好的成绩。在此我要向我的导师致以最衷心的感谢和深深的敬意!
感谢我亲爱的父母,感谢您用汗水换我平静无忧的校园生活,感谢您宽大的胸怀包容我的任性,感恩您鼓励的眼神督促我前进的步伐。
感谢同窗好友们,特别是我的室友同学。在同一个宿舍,我们一起学习、一起生活,最终我们一起毕业,这是一个宝贵的记忆,使得学校生活更加让人眷恋。祝福所有同学都有一个美好的明天。
感谢各位授课老师们的辛勤教育,你们用专业的理论与灵活的实践知识使我在理论的学习与实证的研究方面受益匪浅,同时增加了我对相关专业的理解与认识。在校学习期间,每位老师对我的学习、生活都给予了很多的关心和帮助,使我的水平得到了很大的提高,取得了长足的进步。
在此,向所有关心和帮助过我的老师、同学和朋友表示由衷的谢意!
最后感谢阅读本设计并提出宝贵意见的各位专家,感谢您在百忙之中抽出宝贵的时间,感谢您对文章提出的意见,让我对本研究内容有更多的认识和更广泛的研究思路,向您的付出表示最衷心的谢意。
参考文献
[1] 郭天祥.51单片机C语言教程[M]. 北京:电子工业出版社,2009.
[2] 刘建清.轻松玩转51单片机C语言[M]. 北京:航空航天大学出版社,2011.
[3] 张绪光,刘在娥.电路与模拟电子技术[M]. 北京:北京大学出版社,2010.
[4] 徐晓光.数字逻辑与数字电路[M]. 北京:机械工业出版社,2008.
[5] 黄智伟.印刷电路板设计技术与实践[M]. 北京:电子工业出版社,2013.
[6] 张俊谟.单片机中级教程[M]. 北京:北京航天航空大学出版社,2006.
[7] 谢维成.单片机原理与应用及C51程序设计[M]. 北京:清华大学出版社,2009.
16
展开阅读全文