《单片机课程设计报告基于单片机的电子日历钟设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计报告基于单片机的电子日历钟设计.doc(22页珍藏版)》请在三一办公上搜索。
1、研究生课程学习报告 课 程 名 称: 单 片 机 题 目: 电子日历钟 学 生 姓 名: 学 号: 年级 /专业: 机械电子工程 学院(直属系) : 机械工程与自动化学院 指 导 教 师: 黄 维 公 电子日历钟设计摘 要用单片机控制时间的读取并显示在液晶屏幕上面,并可通过按键实现对时间的修改。文中详细论述了电子日历钟设计原理、使用的各芯片的介绍,阐明了本实例所使用的设计方案、详细的电路图以及电子程序。关键词:电子日历钟 单片机 DS1302 LCD1602目 录摘要21 前言51.1 设计任务51.2本设计的应用意义52总体设计方案52.1 设计原理及相关说明52.2 总体设计框图52.3
2、电子日历钟电路图52.4 电子日历钟程序53芯片设计及对其的调用63.1DS1302实时时钟电路63.1.1 引言63.1.2 DS1302的结构及工作原理63.1.3 引脚功能及结构63.1.4 DS1302的控制字节63.1.5 数据输入输出(I/O)63.1.6 DS1302的寄存器73.2LCD1602字符型液晶模块73.2.1 LCD1602模块介绍73.2.2 LCD1602的一些参数及操作指令93.3AT89C51芯片103.3.1 芯片介绍103.3.2 主要特性113.3.3 管脚说明113.3.4 振荡器特性124系统调试124.1 硬件电路调试124.2 软件程序调试12
3、4.2.1 调试的主要方法124.2.2 调试中遇到的问题124.3 综合调试12致谢13参考文献14附录A: 电子日历钟电路图15附录B: 程序清单161 前言11 设计任务本设计实现一个小巧的电子日历钟,可以利用DS1302读取日期及时间并传至89C51,使之显示于LCD 1602 液晶显示屏上。设有四个按键,可以进入设置菜单对电子日历钟进行时间设置。开机时可以显示制作单位以及制作者名称。12 本设计的应用意义此电子日历钟小巧便捷利于携带,界面清爽,一目了然,方便的使您知晓当前时间,并可对时间做出修改,实在是居家旅行日常生活之必备用品!2 总体设计方案21设计原理及相关说明设计原理:利用D
4、S1302实时时钟电路芯片来读取系统中的日期以及时间信息,并利用P1.6端口将相关信息传送至AT89C51主芯片之中,利用P2端口使之显示于LCD1602液晶显示屏上,四个按键分别置于P1口的0、1、2、3端口可以对时间进行控制修改。详细请参阅第三节的芯片介绍。相关说明:点击 确定按键 可以进入LCD屏上方显示的主菜单,点击 返回按键 可以退出菜单,在时间修改菜单中点击 修改“小时”按键 可以修改时间中的小时数,点击 修改“分钟”按键 可以修改时间中的分钟数。22 总体设计框图电子日历钟设计框图如图2.1所示:AT89C51修改“小时”按键修改“分钟”按键确定按键返回按键LCD显示图2.1 电
5、子日历钟设计框图23 电子日历钟电路图电子日历钟电路图请见附件A23 电子日历钟程序电子日历钟程序清单请见附件B3 各芯片设计及对其的调用31 DS1302实时时钟电路311 引言现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。 312 DS1302的结构及工作原理 DS1302 是美国DALLAS公司推出的
6、一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 313 引脚功能及结构 1 82 7 图3.13 64 5Vcc1X1X2GNDVcc2RSTSCLKKKKKKKI/O图3.1示出DS1302的引脚排列,其中Vcc1为
7、后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,
8、则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK始终是输入端。 314 DS1302的控制字节 DS1302 的控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。315 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的
9、上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 316 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见下表。 寄存器名称命令字取值范围各位内容写操作读操作7 6 5 4 3 2 1 0秒寄存器80H81H00-59CH 10SEC SEC分寄存器82H83H00-590 10MIN MIN时寄存器84H85H01-1212/24 0 10HR HR日寄存器86H87H00-2
10、30 0 10DATE DATE月寄存器88H89H01-28.290 0 0 10M MONTH周寄存器8AH8BH30.310 0 0 0 0 DAY年寄存器8CH8DH01-12 10YEAR YEAR表3.1 日历、时间寄存器及其控制字此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄
11、存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。32 LCD 1602字符型液晶模块321 1602液晶模块介绍字符型型液晶是一种用57点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等,最常用的为2行16个字,即我们马上要学习的1602液晶模块,下面(图3.2)就是TC1602液晶模块的正面和反面照片。图3.2: 1602液晶模块实物照片带背光的液晶模块TC1602EL,TC1602EL采用标准的16脚接口,其引脚功能如下:第1脚:VSS为电源地,接GND。第2脚:VDD接5V正电源。第3脚:VL为液晶
12、显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:BLA背光电源正极(+5V)输入引脚。第16脚:BLK背光电源负极,接
13、GND。TC1602液晶模块内带标准字库,内部的字符发生存储器(CGROM)已经存储了192个57点阵字符,32个510点阵字符。另外还有字符生成RAM(CGRAM)512字节,供用户自定义字符。如表3.2所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。 表3.2: CGROM和CGRAM中字符代码与字符图形对应关系1602液晶模块内部的控制器共有11条控制指令,如表3.3所示。它的读写操作、屏幕和光标的操
14、作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)表3.3: 1602液晶模块内部的控制器共有11条控制指令指令1:清显示,指令码01H,光标复位到地址00H位置 指令2:光标复位,光标返回到地址00H 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标或显示移位 S/C:高电平时移动显示的文字,低
15、电平时移动光标指令6:功能设置命令 DL:高电平时4位总线,低电平为8位总线 N:低电平为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置指令8:DDRAM地址设置指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据指令11:读数据 下面是TC1602液晶模块的一些主要技术参数:1、逻辑工作电压(VDD):+4.5 +5.5V2、LCD驱动电压(VDD - VL):+4.5 +13.0V3、工作温度(Ta): 0 60C(常温)/-20 7
16、5 C(宽温)4、工作电流: 2.0mA5、屏幕视域尺寸: 62.5 16.1mm 322 LCD1602的一些参数及操作指令1)基本参数其主要技术参数及引脚功能如表3.4和3.5所述。显示容量162个字符模块最佳工作电压5.0V工作电压4.8V5.2V字符尺寸4.957.95mm工作电流2.0mA(5.0V)工作温度050背光源黄绿、蓝色等背光源电流0 输出信号:D0D7=指令4.写数据:输入信号:RS=1,RW=0,E=1-0 输出信号:D0D7=数据3)指令说明指令码功能0x07自定义字符位0x0f清高四位0x01清屏:数据指针清0,所有显示清00x0b光标置日调整位置0x0c显示开0x
17、0d光标所在字符闪烁0x0e光标开0x80+地址设置1602第一行的数据指针初始地址0xc0+地址设置1602第二行的数据指针初始地址(表3.6)33 AT89C51芯片331 芯片介绍AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM-Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制
18、器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。如图3.3所示。图3.3332 主要特性:与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路 333 管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八
19、位。在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口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。
20、P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(
21、串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目
22、的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,
23、此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。334 振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。4系统仿真调试41硬件电路调试 (略)42软件程序调试421调试的主要方法利用KEIL uVision3软件进行程序编写及调试,
24、利用Protues仿真软件进行仿真实验。422调试中遇到的问题1)程序运行后字符全部显示于一行,致使后面的字符无法显示出来,经调试,在源代码中添加“write_order(0x80+0x40);”换行语句后,字体全部正常显示了出来!2)运行仿真程序,无法显示出正常日期,经检查调试发现,DS1302的I/O输出DATA的端口被连接至89C51的P1.7端口,而程序设定的入口却是P1.6端口,重新连线后一切正常!致 谢感谢黄维公老师在我进行程序编写、仿真调试以及最后的书写报告中给予我的指导和帮助!感谢一直以来支持我的同学们!参考文献 1 谭浩强,C程序设计,北京:清华大学出版社,1999年12月第
25、2版2 徐爱钧,单片机高级语言C51应用程序设计,电子工业出版社,2000年5月3 周坚,单片机轻松入门,北京航空航天大学出版社,2004年2月第1版4 周立功单片机网站,5 电子驿站,6 百度百科,附件A:电子日历钟电路图附件B:部分程序清单;公司名称: 西华大学 机械电子工程系;程序名称:电子日历钟设计程序;创 建 人:司源 日期:2008-08-08;功能描述:电子日历钟 ;版 本:V1.0;*调用的头文件程序,以及函数付初值!/主程序void main()ini();open();delay(255);delay(255);delay(255);delay(255);write_ord
26、er(0x01);init_ds1302();set_ds1302(time_add,initial_time);while(1)detect();write_order(0x80+0x04);for(i=0;menukeyi!=0;i+)write_date(menukeyi);get_ds1302();write_order(0x80+0x40);write_date(timenow_time44);write_date(timenow_time4&0x0f);write_date(0x01);write_date(timenow_time34);write_date(timenow_ti
27、me3&0x0f);write_date(0x00);write_date( );write_date( );write_date(timenow_time24);write_date(timenow_time2&0x0f);write_date(:);write_date(timenow_time14);write_date(timenow_time1&0x0f);write_date(:);write_date(timenow_time04);write_date(timenow_time0&0x0f);*按键调用程序void detect()uchar temp;temp=P1;temp
28、=temp&0x0f;if(temp!=0x0f)switch(temp)case 0x0e:while(temp!=0x0f)temp=P1;temp=temp&0x0f;if(key=0)key=4;key-;flag=1;write_order(0x01);break;case 0x0d:while(temp!=0x0f)temp=P1;temp=temp&0x0f;key+;flag=2;if(key=4)key=0;write_order(0x01);break;case 0x0b:while(temp!=0x0f)temp=P1;temp=temp&0x0f;flag=3;writ
29、e_order(0x01);break;case 0x07:while(temp!=0x0f)temp=P1;temp=temp&0x0f;flag=4;write_order(0x01);break;*进入菜单程序/设置时间void time_set()flag=0;detect();if(flag=3)flag=0;while(flag!=4)write_order(0x80+0x02);write_date(timeset0);write_date(timeset1);write_date(:);write_date(timeset2);write_date(timeset3);detect();if(flag=1)flag=0;set1+;if(set1=10)set1=0;set0+;if(set0=2)if(set1=4)set1=0;set0=0;timego2=set04|set1;if(flag=2)flag=0;set3+;if(set3=10)set3=0;set2+;if(set2=6)set2=0;timego1=set24|set3;if(flag=3)set_ds1302(time_add,timego);flag=4;key=0;
链接地址:https://www.31ppt.com/p-4147675.html