《单片机课程设计报告电子日历时钟学位论文.doc》由会员分享,可在线阅读,更多相关《单片机课程设计报告电子日历时钟学位论文.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、沈阳理工大学课程设计专用纸1 题目设计要求通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。2 系统的器件功能和作用 2.1 MCSC51单片机AT89C51AT89C51是一种带4K字节FLASH存储器( FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只
2、读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89S51系列单片机中有PDIP,PLCC,TQFP多种封装形式。本设计采用的是PDIP封装40管脚的单片机。 图2.1主控制模块AT89C52l 并行I/O接口P0、P1、P2、P3它们是特殊功能寄存器,既可以做输入又可以做输出l 串行I/O接口是全双工可编程的端口l 两个16位定时/计数器
3、实现计数功能l 两个优先级别的中断源l 片内带振荡器,频率范围为1.2-12MHZ2.2复位电路 复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开 关或电源插头分-合过程中引起的抖动而影响复位。 图2.2复位电路2.3 DS1302时钟模块 DS1302 是美国DAL
4、LAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。 2.3.1引脚功能及结构 图2.3DS1302引脚图DS1302有8个引脚:l X1、X2:32.768kHz晶振介入引脚。l GND:地。l RST:复
5、位引脚,低电平有效。l I/O:数据输入/输出引脚,具有三态功能。l SCLK:串行时钟输入引脚。l Vcc1:工作电源引脚。l Vcc2:备用电源引脚。DS1302有一个控制寄存器,12个日历,时钟寄存器和31个RAM。 DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如
6、果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。2.3.2 DS1302的控制字节DS1302 的控制字节。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。2.3.3 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时
7、钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 图2.4时钟芯片外部电路图 2.3.4 数据输入输出(I/O) 在控制指令字输
8、入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。2.4 晶振电路 图2.5晶振电路晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。其中晶振电路的振荡频率为12MHZ。 2.5液晶显示LCD1602 2.5.1 LCD1602的引脚功能及结构 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可
9、以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 图2.6LCD1602引脚图RT-1602采用表中的16 脚接口:l 第1脚:Vss,电源地。l 第2脚:VDD,+5V电源。l 第3脚:VL,液晶显示偏压信号。l 第4脚:RS
10、,数据/命令选择端,高电平时选择数据寄存器,低电平时选择指令寄存器。l 第5脚:R/W,读/写选择端。l 第6脚:E,使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。l 第714脚:D0D7,为8位双向数据线。l 第15脚:BLA,背光源正极。l 第16脚:BLK,背光源负极。2.5.2控制寄存器控制寄存器用于存放DS1302的控制命令字,DS1302的RST引脚回到高电平后写入的第一个字就为控制命令。它用于对DS1302读写过程进行控制,它的格式如下:表2.1 控制寄存器的格式 D7 D6 D5 D4 D3 D2 D1 D01RAM/CKA4A3A2A1A0RD/W 各项功能说明如下
11、。l D7:固定为1l D6:RAM/CK位,片内RAM或日历、时钟寄存器选择位,当RAM/CK=1时,对片内RAM进行读写,当RAM/CK=0时,对日历、时钟寄存器进行读写。l D5D1:地址位,用于选择进行读写的日历、时钟寄存器或片内RAM。对日历、时钟寄存器或片内RAM的选择。l D0:读写位,当RD/W=1时,对日历、时钟寄存器或片内RAM进行读操作,当RD/W=0时,对日历、时钟寄存器或片内RAM进行写操作。说明:1) 数据都以BCD码形式表示。2) 小时寄存器的D7位为12小时制/24小时制的选择位,当为1时选择12小时制,当为0时选24小时制。当12小时制时,D5位为1是上午,D
12、5位为0是下午,D4位小时的十位。当24小时制时,D5、D4位为小时的十位。3) 秒寄存器中的CH位为时钟暂停位,当为1时,时钟暂停,为0时,时钟开始启动。4) 写保护寄存器中的WP为写保护位,WP=1时,写保护,当WP=0时,未写保护,当对日历、时钟寄存器或片内RAM进行写时,WP应清零,当对日历、时钟寄存器或片内RAM进行读时,WP一般置1.5) 慢充电寄存器的TCS位为控制慢充电的选择,当它为1010时才能是慢充电工作。DS为二极管选择位。DS为01选择一个二极管,DS为10选择两个二极管,DS为11或00充电器被禁止,与TCS无关。RS用于选择连接在Vcc2与Vcc1之间的电阻,RS为
13、00,充电器被禁止,与TCS无关。3 设计方案 3.1设计原理电子日历时钟是采用单片机最小系统,用DS1302时钟芯片和LCD1602液晶显示器分别进行寄存相关信息与显示年、月、日、时、分和秒的显示。每一秒刷新液晶屏的秒数值,每60秒刷新液晶屏分值,以此类推,组成电子日历时钟显示器。 3.2设计内容通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。 3.3系统组成 系统由复位电路、晶振电路、LCD1602液晶显示器、单片机AT89C52、串行时钟日历片DS1302、数据输入输出I/O组成。DS1302的
14、CLOCK与AT89C52的P1.6相连,RST与P1.5相连,IO与P1.7相连。LCD1602的D0D7与AT89C51的P0.0P.7相连,并接上拉电阻,RS与P2.0相连,RW与P2.1相连,E与P2.2相连。4 系统硬件设计 图4.1电子日历时钟电路原理图 本电路是由AT89C52单片机为控制中心。时钟电路由DS1302提供,它是一种高性能、低功耗的实时时钟电路。它可以对年、月、日、时、分、秒进行计时。显示器部分由LCD1602构成。5 系统软件设计 5.1源代码#include /包含单片机寄存器的头文件#include /包含_nop_()函数定义的头文件/*以下是DS1302芯
15、片的操作程序*/unsigned char code digit10=0123456789; /定义字符数组显示数字sbit DATA=P17; /位定义1302芯片的接口,数据输出端定义在P1.7引脚sbit RST=P15; /位定义1302芯片的接口,复位端口定义在P1.5引脚sbit SCLK=P16; /位定义1302芯片的接口,时钟输出端口定义在P1.6引脚/*函数功能:延时若干微秒入口参数:n*/ void delaynus(unsigned char n)unsigned char i;for(i=0;in;i+);/*函数功能:向1302写一个字节数据入口参数:x*/ voi
16、d Write1302(unsigned char dat)unsigned char i; SCLK=0; /拉低SCLK,为脉冲上升沿写入数据做好准备delaynus(2); /稍微等待,使硬件做好准备for(i=0;i=1; /将dat的各数据位右移1位,准备写入下一个数据位/*函数功能:根据命令字,向1302写一个字节数据入口参数:Cmd,储存命令字;dat,储存待写的数据*/ void WriteSet1302(unsigned char Cmd,unsigned char dat)RST=0; /禁止数据传递SCLK=0; /确保写数居前SCLK被拉低RST=1; /启动数据传输d
17、elaynus(2); /稍微等待,使硬件做好准备Write1302(Cmd); /写入命令字Write1302(dat); /写数据SCLK=1; /将时钟电平置于已知状态RST=0; /禁止数据传递/*函数功能:从1302读一个字节数据入口参数:x*/ unsigned char Read1302(void)unsigned char i,dat;delaynus(2); /稍微等待,使硬件做好准备for(i=0;i=1; /将dat的各数据位右移1位,因为先读出的是字节的最低位if(DATA=1) /如果读出的数据是1dat|=0x80; /将1取出,写在dat的最高位SCLK=1; /
18、将SCLK置于高电平,为下降沿读出delaynus(2); /稍微等待SCLK=0; /拉低SCLK,形成脉冲下降沿delaynus(2); /稍微等待 return dat; /将读出的数据返回 /*函数功能:根据命令字,从1302读取一个字节数据入口参数:Cmd*/ unsigned char ReadSet1302(unsigned char Cmd)unsigned char dat;RST=0; /拉低RSTSCLK=0; /确保写数居前SCLK被拉低RST=1; /启动数据传输Write1302(Cmd); /写入命令字dat=Read1302(); /读出数据SCLK=1; /将
19、时钟电平置于已知状态RST=0; /禁止数据传递return dat; /将读出的数据返回/*以下是对液晶模块的操作程序*/sbit RS=P20; /寄存器选择位,将RS位定义为P2.0引脚sbit RW=P21; /读写选择位,将RW位定义为P2.1引脚sbit E=P22; /使能信号位,将E位定义为P2.2引脚sbit BF=P07; /忙碌标志位,将BF位定义为P0.7引脚/*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms()unsigned char i,j; for(i=0;i10;i+)for(j=0;
20、j33;j+); /*函数功能:延时若干毫秒入口参数:n*/void delaynms(unsigned char n)unsigned char i;for(i=0;i4)*10 + (ReadValue&0x0F);/将读出数据转化Display(second,0x4c); /显示秒ReadValue = ReadSet1302(0x83); /从分寄存器读minute=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 Display(minute,0x49); /显示分ReadValue = ReadSet1302(0x85); /从小
21、时寄存器读hour=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化Display(hour,0x46); /显示小时ReadValue = ReadSet1302(0x87); /从分寄存器读day=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化Display(day,0x0c); /显示日ReadValue = ReadSet1302(0x89); /从分寄存器读month=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化Displa
22、y(month,0x09); /显示月ReadValue = ReadSet1302(0x8d); /从分寄存器读year=(ReadValue&0xf0)4)*10 + (ReadValue&0x0F); /将读出数据转化Display(year,0x06); /显示年 5.2 程序流程图程序流程图如图5.1所示: 开始 LCD初始化函数 Lcdlnitiate()写数据的显示地址函数 WriteAddress显示Date和Time调用ReadSet1302(unsigned char Cmd)根据命令字从1302读取一字节数据调用DisPlay(),分别显示年、月、日、时、分、秒 结束 图
23、5.1程序流程图6 系统仿真调试 6.1仿真原理图设计如图6.1为仿真原理图: 开始 图6.1仿真原理图 6.2仿真调试过程 6.2.1 Keil下程序编译 如图6.2为Keil执行C程序的结果图: 图6.2keil执行结果图6.2.2 Proteus调入HEX文件在Keil下,将所编制的C语言程序编译后,生成11.HEX文件;再在PROTEUS环境下,将.HEX文件加到编制的仿真原理图中进行仿真调试,从而生成正确的日期和时间,该日期和时间与当前系统的日期和时间相符。 图6.3调入HEX文件图6.2.3仿真工具栏 图6.4仿真工具栏 其功能为运行仿真、单步运行、暂停仿真、结束仿真。6.3仿真调
24、试结果如图6.4,开始进行执行仿真时,仿真结果如上图,其显示的时间是系统的时间。显示Date和Time 图6.4仿真结果图 7 总结 这个学期我学习了单片机,它是我们主要的专业课程之一,反省起此次单片机课程设计,我学习到了许多。的确,开始课程设计,我从理论到实践,遇到困难重重,十分辛苦,但是可以学到很多很多的的东西,课程设计是一个重要的教学环节,通过课程设计使我们了解到一些实际与理论之间的差异,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够
25、牢固。因此,我们必须认真、谨慎、踏实、一步一步的完成设计。在这次课程设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。 终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。通过这次课程设计,我们即学会了使用proteus和keil c51软件,也掌握了一些有用的知识,这对我们以后的学习和生活非常的有帮助,也使得我们对自己的总体知识水平有了一个了解。懂得了知识的重要性。
26、使我学会了如何运用所学的知识收集、归纳相关资料解决具体问题的方法,加强了我的动手能力、分析和解决问题的能力、以及增强综合运用知识的能力。同时对自己应用计算机的水平有了一个更深刻的了解,我在今后的学习和生活中,可以有针对性的学习和改善。单片机是很重要的一门课程,老师和一些工作的朋友都曾说过,如果学好一门单片机,就凭这个技术这门手艺找一个好工作也不成问题。尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习,学好了单片机也就多了一项生存的本钱。最后感谢老师对我们的精心指导和帮助,感谢同学们对我的帮助 参考文献1谢维成著单片机原理与应用及C51程序设计,清华大学出版社,20092马秀丽,周越,王红著 单片机原理与应用系统设计,清华大学出版社,20143马秀丽等著 C语言设计(第2版)。北京,清华大学出版社,2008 21