单片机课程设计-基于89C51的数字电子钟设计(16页).docx
-
资源ID:37139110
资源大小:139.35KB
全文页数:16页
- 资源格式: DOCX
下载积分:15金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
单片机课程设计-基于89C51的数字电子钟设计(16页).docx
-单片机课程设计-基于89C51的数字电子钟设计-第 11 页单片机系统课 程 设 计成绩评定表设计课题 : 基于89C51的数字电子钟设计 学院名称 : 电气工程学院 专业班级 : 自动1304 学生姓名 : 学 号 : 2 指导教师 : 设计地点 : 31-505 设计时间 : 2015-12-282016-01-08 指导教师意见:成绩: 签名: 年 月 日单片机系统课 程 设 计课程设计名称: 基于89C51的数字电子钟设计 专 业 班 级 : 自动1304 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计地点: 31-505 课程设计时间: 2015-12-282016-01-08 单片机系统 课程设计任务书学生姓名专业班级自动1304学号201323020402题 目基于89C51的数字电子钟设计课题性质工程设计课题来源自拟指导教师主要内容(参数)利用89C51单片机设计一个数字电子时钟,实现功能如下: 1、通过单片机的I/O口和DS1302时钟电路模块来驱动LCD1602显示并进行计时。2、通过独立按键来对LCD1602显示的时钟进行调整控制。3、具备复位功能。任务要求(进度)第1-2天:熟悉课程设计任务及要求,查阅技术资料,确定设计方案。第3-4天:按照确定的方案设计单元电路。要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。第5-6天:软件设计,编写程序。第7-8天:实验室调试。第9-10天:撰写课程设计报告。要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅合理。主要参考资料1 张迎新单片微型计算机原理、应用及接口技术(第2版)M北京:国防工业出版社,20042伟福LAB6000系列单片机仿真实验系统使用说明书3 阎石数字电路技术基础(第五版)北京:高等教育出版社,2006审查意见系(教研室)主任签字: 年 月 日 目录1绪论11.1数字电子时钟概述11.2设计思想及基本功能12总体方案设计12.1方案设计12.2 方案比较22.3方案选取23硬件电路设计3数字电子时钟总体框图33.1 直流稳压电源电路设计43.2 单片机最小系统设计43.3 显示电路设计63.4 按键控制电路设计73.5DS1302时钟模块设计.74系统程序设计85系统的功能测试106总结10参 考 文 献11附 录11附录1数字电子时钟系统原理图11附录2系统调试图13附录3程序代码141绪论1.1数字电子时钟概述数字电子时钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,无机械装置,具有更长的使用寿命。数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字时钟的精度,远远超过老式钟表,使其得到了广泛的使用。 该课程设计为数字电子钟的设计。以AT89C51为核心,配合LCD1602显示实时数据,按键可以进行数据调整,为用户提供长期、连续、可靠、稳定的工作环境。该数字电子钟有年月日周时分秒显示功能以及时间的调整的功能。系统软件设计主要实现参数设置、串行口数据接收、指令发送以及数据的显示和存储,并且实现键盘、液晶显示器等各模块的功能,采用C语言编程。1.2设计思想及基本功能该系统具有一般数字电子时钟的最基本功能,即通过四个独立按键来控制调整时间。在选取设计方案和采取元器件方面,该系统本着简单实用经济的思想,尽量简化电路设计,用最简单的电路布线和选用最经济实用的器件来达到设计要求。数字电子时钟系统具有以下几个基本功能: 1、通过单片机的I/O口和DS1302时钟电路模块来驱动LCD1602显示并进行计时。2、通过独立按键来对LCD1602显示的时钟进行调整控制。3、具备复位功能。2总体方案设计2.1方案设计根据查阅的资料和现实生活中的应用,我认为用两种方案可实现数字电子时钟显示的功能:方案(一)采用LED数码管,通过51单片机编程配合DS1302时钟模块,来显示时间,设计出数字电子时钟系统,LED数码管如图2-1。图1 方案(一)的原理框图方案(二)采用LCD1602,通过51单片机编程配合DS1302时钟模块,来显示时间,设计出数字电子时钟系统,LCD1602如图2-2.图2 方案(二)的原理框图2.2 方案比较方案(一):数码管只有8个,用数码管显示时分秒,就不能用数码管显示年月日了。方案(二):LCD1602可以显示的字符多,空间大,还可以显示字母和数字,并且成本低,材料现成可直接使用。2.3方案选取 对于数字电子时钟应用而言,方案2完全符合应用要求,况且显示的字符多,可以显示年月日周时分秒,就好比市面上的万年历,有实际的研究意义,故选择方案(二)。3硬件电路设计 数字电子时钟总体框图 图3 数字电子时钟总体框图硬件电路包括直流稳压电源电路、单片机最小系统、DS1302时钟模块、LCD1602、按键控制电路五大模块。如图所示3.1 直流稳压电源电路设计直流电源的稳定性和输出电源的质量影响单片机系统运行的稳定性,所以一个完整的可靠的电子设计需要可靠的电源供电。本设计直接采用USB 5V供电,电源稳定可靠。3.2 单片机最小系统设计 单片机最小系统是使单片机工作满足的最低硬件系统要求、主要包括单片机、复位电路、时钟电路等。复位电路的设计:当振荡器起振后,在RESET引脚上输入2个机器周期以上高电平,器件便进入复位状态,此时ATE、PSEN、P0、P1、P2、P3输出高电平,RESET上输入返回低电平后,退出复位状态,本次设计采用手动按键复位方式,按下RSTK1键即可使单片机复位。图4复位电路时钟电路的设计:采用单片机内部方式产生时钟信号,用于外接一个12MHz石英晶体振荡器和2个30uF微调电容,构成稳定的的自激振荡器,其发出的脉冲直接送入内部的时钟电路。89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM-Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/9C51引脚图地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写"1"时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址"1"时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入"1"后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口。图5单片机最小系统电路图上述设计原理图如图3.2.2,图中时钟电路位于51单片机芯片的左下部分3.3 显示电路设计数字电子时钟的数字最终显示在LCD1602上面,1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块。管脚功能:1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。图6显示电路LCD1602的电路图3.4 按键控制电路设计 本系统外接四个独立按键,K1接RXD,K2接TXD,K3接P3.2,K4接P3.3.按键控制电路原理图如图3-4。图7 按键控制电路图3.5 DS1302时钟模块设计 DS1302是一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。图8 DS1302时钟模块4系统程序设计图9程序框架系统程序设计主要包括主程序和中断控制程序两部分。本章节系统介绍数字电子时钟的主程序和中断程序的设计流程,具体的程序代码见附录。4.1 主程序软件设计 主程序软件设计的方案是:通过单片机设定初始显示时间,并开始计时。检测键盘K3是否按下,如果按下,进入设定模式,没有的话继续计时。如果进入设定模式,检测键盘K1是否按下,是的话,设定调整秒、分、时、日、周、月、年的数字。检测键盘K2是否按下,是的话,设定值加一,即可调整时间。图10主程序设计5系统的功能测试 硬件调试的主要任务是排除硬件故障,其中包括设计错误和工艺性故障。首先进行脱机调试,用万用表逐步检查各个引脚,尤其是电源是否连接正确,单片机芯片是否正确插入底座。其次进行联机调试,使用keil软件进行调试,出现错误的地方去改正,再次检查,正确无误后生成HEX格式的文件,将程序下载入单片机中,将单片机通电,看是否能满足倒计时需求,若不满足继续调试程序,重复进行,知道达到需求为止。另外,若要实现复位功能,按住复位键即可实现。 本次调试的过程中遇到过一些困难,比如LCD显示不出来或者显示乱码,按键不起作用,无法生成HEX文件等等,通过多次调试排除各个故障点,才得以实现电子时钟功能,调试效果图见附录2。6、总结 这两周的实习时,就网上找资料,看程序里面的好多内容不懂,自我感觉是单片机我们所学的内容还不足以编出程序,但是只好硬着头皮去看去理解。但在学习过程中也充满了乐趣,当看懂了程序的一些语句,画出了要求的设计图,那我喜悦那种成就感油然而生。 这次实习让我受益匪浅,无论从知识上还是其他的各个方面。上课的时候的学习从来没有见过真正的单片机,只是从理论的角度去理解枯燥乏味。但在实习中见过甚至使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。在这次课程设计中又让我体会到了合作与团结的力量,当遇到不会或是设计不出来的地方,我们就会在QQ群里讨论或者是同学之间相互帮助。团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感。 单片机是很重要的一门课程,老师和一些工作的朋友都曾说过,如果学好一门单片机,就凭这个技术这门手艺找一个好工作也不成问题。尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习,学好了单片机也就多了一项生存的本钱。最后感谢老师对我们的精心指导和帮助,感谢同学们对我的帮助。参 考 文 献1 张迎新单片微型计算机原理、应用及接口技术(第2版)M北京:国防工业出版社,20042 keil软件单片机仿真实验系统使用说明书3 严天峰.单片机应用系统设计与仿真调试.北京:北京航空航天大学出版社,20054 阎石数字电路技术基础(第五版)北京:高等教育出版社,20065 夏路易,石宗义.电路原理图与电路板设计教程Protel 99se.北京:北京希望电子出版社,2002附 录附录1数字电子时钟系统原理图 图11数字电子时钟系统原理图附录2系统调试图图12系统调试图1图13系统调试图2图14系统调试图3图15 系统调试图4图16 系统调试图5附录3程序代码#include<reg51.h>#include"lcd.h"#include"ds1302.h"sbit K1=P31;sbit K2=P30;sbit K3=P32;sbit K4=P33;void Int0Configuration();void LcdDisplay();unsigned char SetState,SetPlace;void Delay10ms(void); /误差 0us* 函数名 : main* 函数功能 : 主函数* 输入 : 无* 输出 : 无void main()unsigned char i;Int0Configuration();LcdInit();Ds1302Init();while(1)if(SetState=0)Ds1302ReadTime();elseif(K1=0)/检测按键K1是否按下Delay10ms();/消除抖动if(K1=0)SetPlace+;if(SetPlace>=7)SetPlace=0;while(i<50)&&(K1=0) /检测按键是否松开Delay10ms();i+;i=0;if(K2=0)/检测按键K2是否按下Delay10ms();/消除抖动if(K2=0)TIMESetPlace+;if(TIMESetPlace&0x0f)>9) /换成BCD码。TIMESetPlace=TIMESetPlace+6;if(TIMESetPlace>=0x60)&&(SetPlace<2)/分秒只能到59TIMESetPlace=0;if(TIMESetPlace>=0x24)&&(SetPlace=2)/小时只能到23TIMESetPlace=0;if(TIMESetPlace>=0x32)&&(SetPlace=3)/日只能到31TIMESetPlace=0;if(TIMESetPlace>=0x13)&&(SetPlace=4)/月只能到12TIMESetPlace=0;if(TIMESetPlace>=0x7)&&(SetPlace=5)/周只能到7TIMESetPlace=1;/if(SetPlace=5)/月只能到12/TIMESetPlace=;while(i<50)&&(K2=0) /检测按键是否松开Delay10ms();i+;i=0;LcdDisplay();* 函数名 : LcdDisplay()* 函数功能 : 显示函数* 输入 : 无* 输出 : 无void LcdDisplay()LcdWriteCom(0x80+0X40);LcdWriteData('0'+TIME2/16);/时LcdWriteData('0'+(TIME2&0x0f); LcdWriteData(':');LcdWriteData('0'+TIME1/16);/分LcdWriteData('0'+(TIME1&0x0f);LcdWriteData(':');LcdWriteData('0'+TIME0/16);/秒LcdWriteData('0'+(TIME0&0x0f);LcdWriteCom(0x80);LcdWriteData('2');LcdWriteData('0');LcdWriteData('0'+TIME6/16);/年LcdWriteData('0'+(TIME6&0x0f);LcdWriteData('-');LcdWriteData('0'+TIME4/16);/月LcdWriteData('0'+(TIME4&0x0f);LcdWriteData('-');LcdWriteData('0'+TIME3/16);/日LcdWriteData('0'+(TIME3&0x0f);LcdWriteCom(0x8D);LcdWriteData('0'+(TIME5&0x07);/星期 * 函数名 : Int0Configuration()* 函数功能 : 配置外部中断0* 输入 : 无* 输出 : 无void Int0Configuration()/设置INT0IT0=1;/跳变沿出发方式(下降沿)EX0=1;/打开INT0的中断允许。EA=1;/打开总中断* 函数名 : Int0() * 函数功能 : 外部中断0 中断函数* 输入 : 无* 输出 : 无void Int0() interrupt 0 Delay10ms();if(K3=0)SetState=SetState;SetPlace=0;Ds1302Init();* 函数名 : Delay10ms* 函数功能 : 延时函数,延时10ms* 输入 : 无* 输出 : 无void Delay10ms(void) /误差 0us unsigned char a,b,c; for(c=1;c>0;c-) for(b=38;b>0;b-) for(a=130;a>0;a-);