万年历课程设计带电路图 3.docx
《万年历课程设计带电路图 3.docx》由会员分享,可在线阅读,更多相关《万年历课程设计带电路图 3.docx(33页珍藏版)》请在冰豆网上搜索。
万年历课程设计带电路图3
郑州华信学院
课程设计说明书
题目:
基于单片机控制的电子万年历设计
******
院(系):
机电工程学院
专业班级:
10级电气工程一班
学号:
**********
指导教师:
宋东亚杨坤漓
成绩:
时间:
2012年11月20日至2013年1月5日
1引言
1.1背景
单芯片微型计算机简称单片机,它有微处理器、存储器、I/O接口电路所组成。
将其配以晶振和复位电路后就形成可以简单的计算机应用系统。
随着计算机技术的发展,人们发现了计算机在逻辑处理及工业控制等方面也具有非凡的能力,在控制领域中,人们更多的关心计算机的低成本、小体积、运行的可靠和控制的灵活性。
因单片机体积小、控制功能强,且其非凡的嵌入式应用形态对于满足嵌入式应用需求具有独特的优势,所以单片机应用技术已经成为电子应用系统设计中最为常用的技术手段。
美国Intel公司分别于1971年生产出4位单片机4004和1972年生产出8位单片机8008。
随着1976年MCS-48单片机的问世,单片机的发展近入了全盛时期。
并在其后的30年里多次更新换代,大约每二三年集成度就增大一倍,性能翻一番。
随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。
二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。
本文通过对一个基于单片机的能实现万年历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。
系统由主控制器AT89C51、时钟电路DS1302、显示电路、按键电路等部分构成,能实现时钟日历显示的功能,能进行时、分、秒的显示。
1.2设计目的
(1)加强对51系列单片机的构造了解及应用,熟悉汇编语言编程,综合掌握和理解设计各部分的工作原理、设计过程、芯片器件的选择方法、模块化编程等多项知识。
(2)用单片机模拟实现具体应用使个人设计系统能够真正使用;
(3)把理论知识与实践知识相结合,充分发挥个人能力,并在实践中得到锻炼;
(4)提高利用已学的知识分析和解决问题的能力;
(5)提高动手实践能力。
1.3应用价值
随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。
单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化等专业技术人员必须掌握的技术。
而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目,因为它的有很好的开放性和可发挥性。
LED数字显示的日历时钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。
数字显示的日历时钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管式显示的日历时钟逐渐受到人们的欢迎。
2设计方案
本设计选用的是单片机(8051)来实现电子万年历的功能。
共具备两个功能:
(1)显示年月日及分秒信息
(2)具有可调整日期和时间功能。
系统分为主控制器模块、显示模块、按键开关模块,主控制模块采用AT89C51单片机为控制中心,显示模块采用普通的共阴极LED数码管,键输入采用中断实现功能调整,计时使用AT89C51单片机自带的定时器功能,实现对时间、日期的操作,通过按键盘开关实现对时间、日期的调整。
3总体设计及核心部件简介
3.1总体设计
单片机电子万年历的制作有多种方法,可供选择的器件和运用的技术也有很多种。
所以,系统的总体设计方案应在满足系统功能的前提下,充分考虑系统使用的环境,所选的结构要简单使用、易于实现,器件的选用着眼于合适的参数、稳定的性能、较低的功耗以及低廉的成本。
本设计基于AT89C51单片机设计的电子万年历,以AT89c51单片机为核心,配备数码管显示模块、按键等功能模块。
采用BCD-7段译码器和时钟芯片来实现的。
万年历采用24小时制方式显示时间,在数码管上显示年、月、日、小时、分钟、秒等功能。
设计主要包括硬件设计和软件编程两个方面。
硬件电路设计主要包括中央处理单元电路、时钟电路、执行电路等几部分。
软件用汇编语言来实现,主要包括主程序、键盘扫描子程序、时间设置子程序等软件模块。
3.2核心部件简介
3.2.1微处理器
1.电源
(1)VCC-芯片电源,接+5V;
(2)VSS-接地端;2.时钟:
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
3.控制线:
控制线共有4根,
(1)ALE/PROG:
地址锁存允许/片内EPROM编程脉冲
[1]ALE功能:
用来锁存P0口送出的低8位地址
[2]PROG功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
(2)PSEN:
外ROM读选通信号。
(3)RST/VPD:
复位/备用电源。
[1]RST(Reset)功能:
复位信号输入端。
[2]VPD功能:
在Vcc掉电情况下,接备用电源。
(4)EA/Vpp:
内外ROM选择/片内EPROM编程电源。
[1]EA功能:
内外ROM选择端。
[2]Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
4.I/O线80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)
图3-1AT89C51管脚
3.2.2时钟芯片DS1302的结构及工作原理
1.DS1302的结构及工作原理
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
2.引脚功能及结构
图3-2所示出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送.RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),后面有详细说明。
SCLK始终是输入端。
图3-2DS1302管脚图
3.数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
3.2.3输出LCD显示功能简介
液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。
图3-3LCD数码显示屏
3.2.4按键电路
每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。
但是当按键较多时占用单片机的I/O数目较多。
图3-4AT89C51管脚图
3.3总体设计框图
图3-5总体设计框图
3.4硬件设计
3.4.1系统硬件框图
图3-6-1系统硬件框图
图3-6-2设计总电路图
3.5软件设计
3.5.1主程序流程图
N
Y
图3-7
电子万年历的功能是在程序控制下实现的。
该系统的软件设计方法与硬件设计相对应,按整体功能分成多个不同的程序模块,分别进行设计、编程和调试,最后通过主程序将各程序模块连接起来。
这样有利于程序修改和调试,增强了程序的可移植性。
3.5.2从1302读取日期和时间程序
N
Y
图3-8从1302读取程序
3.5.3ProteusISIS简介
Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。
该软件的特点是:
(1)全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。
(2)具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS-232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
(3)目前支持的单片机类型有:
ARM7系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
(4)支持大量的存储器和外围芯片。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大,可仿真ARM、51、AVR、PIC。
Proteus启动画面:
图3-9Proteus启动画面
4仿真与调试
通过在KEIL下对源程序的编译,改正了其中的很多错误,运行之后生成HEX文件。
然后按原理图选择正确合理的电气元件,画出正确而且美观的电路图,加载源程序运行,顺利实现了电子万年历年月日时分秒的输出。
下图为电子万年历的显示效果:
按下调时键后(第一个键)表示小时的数字开始闪动:
按下调日期键后(第三个键)年代键开始闪动:
5设计体会与总结
作为一名自动化专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。
在已度过的大学时间里,我们大多数接触的是专业课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似的课程设计就为我们提供了良好的实践平台。
这次单片机课程设计我们历时几个星期,在我们班里算是倒数几组完成的吧,但经过这几个星期的实践和体验下来,我们又怎么会去在乎那个先后问题呢,因为对我来说学到的不仅是那些知识,更多的是团队和合作。
现在想来,也许学校安排的课程设计有着它更深层的意义吧,它不仅仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥出的巨大潜能!
单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:
汇编语言、模拟和数字电路知识等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;另外要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。
更重要的是如何把自己平时所学的东西应用到实际中。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。
我认为这个收获应该说是相当大的。
觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
小组人员的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的。
6参考文献
[1]邸春芳,电脑实时时钟的设计,(西南石油学院电子信息工程学院)
[2]AT89C51,,广州周立功单片机发展有限公司
[3]李全利,单片机原理及接口技术[M],高等教育出版社
[4]王文杰,单片机应用技术[M],冶金工业出版社
[5]朱清慧,PROTEUS教程——电子线路设计、制版与仿真[M],清华大学出版社
[6]单片机实验指导书,天煌教仪
[7]彭伟,单片机C语言程序设计实训100例[M],电子工业出版社
[8]王文杰、许文斌,单片机应用技术,冶金工业出版社
7附录
源程序代码:
SCLKEQUP3.2
IOEQUP3.3
RSTEQUP3.4
TRLEQUP3.5
JIA1EQUP3.6
TSHEQUP3.7
YEARDATA66H
MONTHDATA65H
WEEKDATA64H
DAYDATA63H
HOURDATA62H
MINUTEDATA61H
SECONDDATA60H
DS_ADDRDATA32H
DS_DATADATA31H
ORG0H
AJMPSTART
MAIN2F:
LJMPMAIN2
START:
MOVSP,#70H
LCALLDELAY1
MOVDS_ADDR,#8EH
MOVDS_DATA,#00H
LCALLWRITE
START0:
MOVDS_ADDR,#81H
LCALLREAD
ANLA,#7FH
MOVDS_ADDR,#80H
MOVDS_DATA,A
LCALLWRITE
START1:
MOVDS_ADDR,#0C0H
MOVDS_DATA,#9CH
LCALLWRITE
MOV20H,#0
MOV21H,#0FH
MOV22H,#0
MAIN1:
JBTRL,MAIN2FA
MOV22H,#1
AJMPMAIN2FB
MAIN2FA:
JBTSH,MAIN2F
MOV22H,#2
MOVDS_ADDR,#81H
LCALLREAD
ORLA,#80H
MOVDS_ADDR,#80H
MOVDS_DATA,A
LCALLWRITE
MAIN4:
LCALLDISP
JNBTSH,MAIN4
MOV22H,#2
LJMPSSS
MAIN2FB:
MOVDS_ADDR,#81H
LCALLREAD
ORLA,#80H
MOVDS_ADDR,#80H
MOVDS_DATA,A
LCALLWRITE
MAIN4J:
LCALLDISP
JNBTRL,MAIN4J
MOV22H,#1
NNN:
LCALLDISP
JNBTRL,YYY
MOV20H,#8
LCALLDISP
JBJIA1,NNN
NNN2:
LCALLDISP
JNBJIA1,NNN2
MOVR7,YEAR
LCALLJIAY1
MOVYEAR,A
CJNEA,#30H,NNN1
MOVYEAR,#06
NNN1:
MOVDS_ADDR,#8CH
MOVDS_DATA,YEAR
LCALLWRITE
MOVR0,YEAR
LCALLDIVIDE
MOV4AH,R1
MOVA,4AH
SWAPA
MOV4AH,A
MOV4BH,R2
MOVA,4BH
SWAPA
MOV4BH,A
SJMPNNN
YYY:
LCALLDISP
JNBTRL,YYY
YYY3:
JNBTRL,DDD
MOV20H,#4
LCALLDISP
JBJIA1,YYY3
YYY2:
LCALLDISP
JNBJIA1,YYY2
MOVR7,MONTH
LCALLJIAY1
MOVMONTH,A
CJNEA,#13H,YYY1
MOVMONTH,#1
YYY1:
MOVDS_ADDR,#88H
MOVDS_DATA,MONTH
LCALLWRITE
MOVR0,MONTH
LCALLDIVIDE
MOV48H,R1
MOVA,48H
SWAPA
MOV48H,A
MOV49H,R2
MOVA,49H
SWAPA
MOV49H,A
SJMPYYY3
DDD:
LCALLDISP
JNBTRL,DDD
MOV20H,#2H
DDD3:
JNBTRL,NYD
MOV20H,#2
LCALLDISP
JBJIA1,DDD3
DDD2:
LCALLDISP
JNBJIA1,DDD2
MOVR7,DAY
LCALLJIAY1
MOVDAY,A
CJNEA,#32H,DDD1
MOVDAY,#1
DDD1:
MOVDS_ADDR,#86H
MOVDS_DATA,DAY
LCALLWRITE
MOVR0,DAY
LCALLDIVIDE
MOV46H,R1
MOVA,46H
SWAPA
MOV46H,A
MOV47H,R2
MOVA,47H
SWAPA
MOV47H,A
SJMPDDD3
NYD:
LJMPMAIN3A
SSS:
LCALLDISP
JNBTSH,SSS
MOV20H,#8
SSS3:
JNBTSH,FFF
LCALLDISP
JBJIA1,SSS3
SSS2:
LCALLDISP
JNBJIA1,SSS2
MOVR7,HOUR
LCALLJIAY1
MOVHOUR,A
CJNEA,#24H,SSS1
MOVHOUR,#0
SSS1:
MOVDS_ADDR,#84H
MOVDS_DATA,HOUR
LCALLWRITE
MOVR0,HOUR
LCALLWRITE
MOVR0,HOUR
LCALLDIVIDE
MOV44H,R1
MOV45H,R2
SJMPSSS
FFF:
LCALLDISP
JNBTSH,FFF
MOV20H,#4
FFF3:
JNBTSH,MMM
LCALLDISP
JBJIA1,FFF3
FFF2:
LCALLDISP
JNBJIA1,FFF2
MOVR7,MINUTE
LCALLJIAY1
MOVMINUTE,A
LCALLJIAY1
MOVMINUTE,A
CJNEA,#60H,FFF1
MOVMINUTE,#0
FFF1:
MOVDS_ADDR,#82H
MOVDS_DATA,MINUTE
LCALLWRITE
MOVR0,MINUTE
LCALLDIVIDE
MOV42H,R1
MOV43H,R2
SJMPFFF3
MMM:
LCALLDISP
JNBTSH,MMM
MOV20H,#2
MMM3:
JNBTSH,MAIN3
LCALLDISP
JBJIA1,MMM3
MMM2:
LCALLDISP
JNBJIA1,MMM2
MOVR7,SECOND
LCALLJIAY1
MOVSECOND,A
CJNEA,#60H,MMM1
MOVSECOND,#0
MMM1:
ORLSECOND,#80H
MOVDS_ADDR,#80H
MOVDS_DATA,SECOND
LCALLWRITE
ANLSECOND,#7FH
MOVR0,SECOND
LCALLDIVIDE
MOV40H,R1
MOV41H,R2
SJMPMMM3
MAIN3:
SETBP3.0
SETBP3.1
MOV22H,#0
LCALLDISP
JNBTSH,MAIN3
MOV20H,#0
MOV21H,#0FH
MOV22H,#0
MOVDS_ADDR,#81H
LCALLREAD
ANLA,#7FH
MOVDS_ADDR,#80H
MOVDS_DATA,A
LCALLWRITE
LJMPMAIN1
MAIN3A:
SETBP3.0
SETBP3.1
MOV22H,#0
LCALLDISP
JNBTRL,MAIN3A
MOV20H,#0
MOV21H,#0FH
MOV22H,#0
MOVDS_ADDR,#81H
LCALLREAD
ANLA,#7FH
MOVDS_ADDR,#80