项目十-单片机简易万年历设计课件.ppt

上传人(卖家):ziliao2023 文档编号:5789180 上传时间:2023-05-09 格式:PPT 页数:108 大小:2.54MB
下载 相关 举报
项目十-单片机简易万年历设计课件.ppt_第1页
第1页 / 共108页
项目十-单片机简易万年历设计课件.ppt_第2页
第2页 / 共108页
项目十-单片机简易万年历设计课件.ppt_第3页
第3页 / 共108页
项目十-单片机简易万年历设计课件.ppt_第4页
第4页 / 共108页
项目十-单片机简易万年历设计课件.ppt_第5页
第5页 / 共108页
点击查看更多>>
资源描述

1、回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 一、学习目标一、学习目标1了解红外线工作原理。2掌握SPI总线协议。3掌握DS1302驱动方法。4.掌握LCD128*64驱动显示中文的方法。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 二、学习任务二、学习任务 随着电子技术的发展,人类不断研究,不断创新纪随着电子技术的发展,人类不断研究,不断创新纪录。万年历目前已经不再局限于以书本形式出现。以录。万年历目前已经不再局限于以书本形式出现。以电脑软件或者电子产品形式出现的万年历被称为电子电

2、脑软件或者电子产品形式出现的万年历被称为电子万年历。与传统书本形式的万年历相比,电子万年历万年历。与传统书本形式的万年历相比,电子万年历得到了越来越广泛的应用,采用电子时钟作为时间显得到了越来越广泛的应用,采用电子时钟作为时间显示已经成为一种时尚。目前市场上各式各样的电子时示已经成为一种时尚。目前市场上各式各样的电子时钟数不胜数,但多数是只针对时间显示,功能单一不钟数不胜数,但多数是只针对时间显示,功能单一不能满足人们日常生活需求。能满足人们日常生活需求。本项目任务分解为具体本项目任务分解为具体2个学习任务:个学习任务:任务一任务一 DS1302时钟数码管显示;时钟数码管显示;任务二任务二 简

3、易万年历设计。简易万年历设计。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 三、任务分解三、任务分解任务一任务一 DS1302时钟数码管显示时钟数码管显示【任务描述【任务描述】随着社会、科技的发展,人类得知时间,从观太阳、随着社会、科技的发展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了在观测摆钟到现在电子钟,不断研究、创新。为了在观测时间,能够了解与人类密切相关的信息,比如星期、时间,能够了解与人类密切相关的信息,比如星期、日期等,电子时钟诞生了,它集时间、日期、星期日期等,电子时钟诞生了,它集时间、日期、星期等功能于

4、一身,具有读取方便、显示直观、功能多等功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表的发样、电路简洁等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。展趋势,具有广阔的市场前景。使用实时时钟芯片使用实时时钟芯片DS1302,设计一简易万年历,设计一简易万年历,显示日期和时间,做到可以调时。显示日期和时间,做到可以调时。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计【任务分析【任务分析】DS1302时钟芯片是美国时钟芯片是美国DALLAS公司推出的具有公司推出的具有涓细电流充电功能的低功耗实时时钟

5、芯片,它可以涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时,还具对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能,而且有闰年补偿等多种功能,而且DS1302的使用寿命的使用寿命长,误差小;数字显示是采用的长,误差小;数字显示是采用的LED显示屏来显示,显示屏来显示,可以同时显示年、月、日、星期、时、分、秒和温可以同时显示年、月、日、星期、时、分、秒和温度等信息。此外,该电子时钟还具有时间校准等功度等信息。此外,该电子时钟还具有时间校准等功能。能。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设

6、计【相关知识【相关知识】SPISPI总线总线回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 是是串行串行外围设备接口外围设备接口,是一种高速的,是一种高速的,全双工全双工,同步同步的的通信总线,并且在芯片的管脚上只占用四根线通信总线,并且在芯片的管脚上只占用四根线.RSPISPI的通信原理很简单,它以的通信原理很简单,它以主从方式主从方式工作,通常有一个主设备工作,通常有一个主设备和一个或多个从设备,需要和一个或多个从设备,需要至少至少4 4根线。根线。RSDO SDO 主设备数据输出,从设备数据输入主设备数据输出,从设备数据输入RSDI

7、SDI 主设备数据输入,从设备数据输出主设备数据输入,从设备数据输出RSCLK SCLK 用来为数据通信提供同步时钟信号,由主设备产生用来为数据通信提供同步时钟信号,由主设备产生RCS CS 从设备使能信号,由主设备控制从设备使能信号,由主设备控制RSPISPI接口是接口是全双工全双工、同步同步、串口串口、单主机。单主机。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 SPI从机从机从主机获得时钟和片选信号,从主机获得时钟和片选信号,因此因此cs和和sclk都是输入信号。都是输入信号。SPI接口在内部硬件实际上是个简单的接口在内部硬件实际上

8、是个简单的移位寄存器移位寄存器,传输的数据为传输的数据为8位位,在主器件在主器件产生的从器件使能信号和移位脉冲下产生的从器件使能信号和移位脉冲下,按位传输按位传输,高位在前高位在前,低位在后低位在后。SPI从机的内部结构回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 SPI总线寻址:寻址:MOSIMOSI:When master,out line;when slave,in lineWhen master,out line;when slave,in lineMISOMISO:When master,in line;when slave,o

9、ut lineWhen master,in line;when slave,out line回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 SPISPI从机的内部结构从机的内部结构SPISPI接口实际上是两个简单的移位寄存器接口实际上是两个简单的移位寄存器,传输的数据为传输的数据为8 8位位,在主器件产在主器件产生的从器件使能信号和移位脉冲下生的从器件使能信号和移位脉冲下,按位传输按位传输,高位在前高位在前,低位在后。低位在后。上升沿发送,下降沿接收。(有的器件是上升沿接收,下降沿发送)上升沿发送,下降沿接收。(有的器件是上升沿接收,下降沿

10、发送)D7D7.D0D0D0D0.D7D7回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 SPISPI总线总线 R在在SPISPI传输中,数据是传输中,数据是同步进行同步进行发送和接收的。发送和接收的。R数据传输的时钟基于来自数据传输的时钟基于来自主处理器主处理器的时钟脉冲,的时钟脉冲,R当当SPISPI接口上有多个接口上有多个SPISPI接口的单片机时,应区别其主从地位,在某一时刻接口的单片机时,应区别其主从地位,在某一时刻只能由一个单片机为主器件。只能由一个单片机为主器件。R从器件只能在主机发命令时从器件只能在主机发命令时,才能接收或向

11、主机传送数据。才能接收或向主机传送数据。R其数据的传输格式是其数据的传输格式是高位(高位(MSBMSB)在前,低位)在前,低位(LSB(LSB)在)在RSPISPI接口的一个接口的一个缺点缺点:没有应答机制确认是否接收到数据。:没有应答机制确认是否接收到数据。R如果只是进行写操作,主机只需忽略收到的字节;反过来,如果主机要读取外设的如果只是进行写操作,主机只需忽略收到的字节;反过来,如果主机要读取外设的一个字节,就必须发送一个空字节来引发从机的传输。一个字节,就必须发送一个空字节来引发从机的传输。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设

12、计 SPISPI总线总线添加从器件:每个从器件需要一个单独的从选择信号。总信号数最终为 n+3 个,其中 n 是总线上从器件的数量。在 SPI 总线上添加新的从器件也不方便。对于额外添加的每个从器件,都需要一条新的从器件选择线回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 R一个完整的传送周期是一个完整的传送周期是1616位,即两个字节,因为,首先主机位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的命令准备数据,主机要发送命令过去,然后从机根据主机的命令准备数据,主机在下一个在下一个8 8位时钟周期才把数据读回来位时钟周期才

13、把数据读回来。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 SPI总线的硬件接口电路 回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 SPI接口的串行时钟芯片DS1302 实时时钟,可对秒、分、时、日、周、月以及实时时钟,可对秒、分、时、日、周、月以及带闰年补偿带闰年补偿的年进行计数;的年进行计数;用于高速数据暂存的用于高速数据暂存的318 RAM;简单的简单的SPI三线串口;三线串口;/RST引脚引脚:复位兼片选,读:复位兼片选,读/写操作时写操作时必须为高必须为高电平电平。回目录回

14、目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 单片机与DS1302的接口回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 DS1302的内部结构回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 DS1302的工作原理 单片机开始数据传送时,必须将单片机开始数据传送时,必须将DS1302的的/RST置高,且把包含有地址置高,且把包含有地址和命令信息的和命令信息的8位数据发送给位数据发送给DS1302.数据在数据在SCLK的的上升沿入,下降沿串行上

15、升沿入,下降沿串行出出;单片机对单片机对DS1302的读的读/写是命令字来初写是命令字来初始化的。命令字格式:始化的。命令字格式:命令字节的命令字节的D7必须为必须为1,若,若D7=0,写保写保护;护;D6=0,表示存取日历时钟数据;表示存取日历时钟数据;D6=1,表示存取表示存取RAM数据数据.D5D1指示操作单元的地址;指示操作单元的地址;D0=0,表示写;表示写;D0=1,表示读;表示读;回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 DS1302的寄存器回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计

16、单片机简易万年历设计 回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 数据在数据在SCLKSCLK的的上升沿入上升沿入,下降沿下降沿串串行行出出;单字节操作单字节操作:每次对:每次对DS1302的写入或读出都由的写入或读出都由命命令字节引导令字节引导,每次只传送,每次只传送1字节数据。字节数据。单字节写操作:单字节写操作:单片机通过单片机通过8个个sclk下降沿传送写下降沿传送写命令字节后,在接下来的命令字节后,在接下来的8个个sclk时钟的下降沿传时钟的下降沿传送一字节数据。如果有送一字节数据。如果有更多的更多的sclk周期周期,DS13

17、02将会忽略。将会忽略。单字节读操作:单字节读操作:单字节读操作每次需单字节读操作每次需16个时钟,个时钟,地址字节在前地址字节在前8个时钟周期的上个时钟周期的上升沿输入升沿输入,而数据,而数据字节在后字节在后8个时钟周期的个时钟周期的下降沿输出下降沿输出。.DS1302输输出的第一出的第一位数据是在命令字节最后一位的第一个下位数据是在命令字节最后一位的第一个下降沿处,如果有降沿处,如果有更多的更多的sclk周期周期,DS1302将重新将重新发送数据字节。发送数据字节。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 多字节操作 多字节操作多

18、字节操作:每次对:每次对DS1302的写的写入或读出都由命令字节引导,然后入或读出都由命令字节引导,然后对时钟寄存器的对时钟寄存器的7个寄存器或个寄存器或31个个RAM依次按顺序写入依次按顺序写入/读出。读出。多字节写操作:多字节写操作:单片机通过单片机通过8个个sclk下降沿传送命令字节后,在接下降沿传送命令字节后,在接下来的下来的8个个sclk时钟的下降沿传送时钟的下降沿传送一字节数据一字节数据,以次类推。以次类推。多字节读操作:多字节读操作:单片机通过单片机通过8个个sclk下降沿传送命令字节后,在紧下降沿传送命令字节后,在紧接着的的接着的的8个个sclk时钟的下降沿时钟的下降沿DS13

19、02传送一字节数据传送一字节数据,以次类推。以次类推。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 特殊寄存器 在在DS1302的的时钟日历时钟日历或或RAM进行进行数据传送数据传送时,时,DS1302必须必须首先发送命令字节首先发送命令字节。若进行。若进行单字节传送,单字节传送,8位命令字节传送结束之后,在位命令字节传送结束之后,在下下8个个SCLK周期的下降沿输出数据字节。周期的下降沿输出数据字节。DS1302与与RAM相关的寄存器分为两类相关的寄存器分为两类:一类一类是单个是单个RAM单元,共单元,共31个,每个单元组态为个,每个单

20、元组态为一个一个8位的字节,其命令控制字为位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;其中奇数为读操作,偶数为写操作;再一类再一类为突发方式下的为突发方式下的RAM寄存器,在此方式下可寄存器,在此方式下可一次性读、写所有的一次性读、写所有的RAM的的31个字节。命令个字节。命令字为字为BEH和和BFH 写保护寄存器:写保护寄存器:写保护寄写保护寄存器存器命令字命令字D7 D6 D5 D4 D3 D2 D1 D08EH或8FHWP 0 0 0,0 0 0 0回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 RAM单元单

21、元 命令字命令字D7 RAM/CK D5 D4 D3 D2 D1 R/W0单元单元C0H或或C1H1 100,000R/W1单元单元C2H或或C3H1 100,001R/W2单元单元C4H或或C5H1 100,010R/W34.31单元单元C6H或或C7H.C8H或或C9H.FCH或或FDH.1 100,011R/W1 100,100R/W.11 11,110R/W回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 程序举例:初始化日历寄存器片内片内RAM说明说明68H(秒秒)0101,00105267H(分分)0011,01003466H(时

22、)(时)1965H(日)(日)0164H(星期)(星期)周三周三63H(月)(月)1062H(年)(年)1161H(写保护(写保护寄存器)寄存器)00h回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 DS1302的寄存器回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计【任务实施【任务实施】+5vX112MHzCY1CY2CY3S2U1R110k10F30pF30pF19P2.0/A08P2.1/A09P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/

23、A153938373635343332D0D1D2D3D4D5D6D7OELEQ0Q1Q2Q3Q4Q5Q6Q774LS373VCC1VCC2RSTSCLKI/OX1X2DS1302A B C D E F G DP1 2 3 4 5 6 7 8+5vABCE1E2E374LS138+5v+5vQ0Q1Q2Q3Q4Q5Q6Q0 Q1 Q2 Q3 Q4 Q5Q6P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7XTAL1XTAL2RSTALEPSENEA123

24、4567810111213141516172122232425262728189293031VccAT89C511.5V1.5V32.768KHzX2U2U3U4R2R3R410K10K10KRSTSCKIORSTSCKIOP3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDP2.0/A08P2.1/A09P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15+5v回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 单片机驱动单片机

25、驱动DS1302数码管显示对应的程序代码如下:数码管显示对应的程序代码如下:#include#include#define uchar unsigned char#define uint unsigned intsbit sck=P30;sbit io=P31;sbit rst=P32;unsigned char table1=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x40;unsigned char table2=0 xe0,0 xc0,0 xa0,0 x80,0 x60,0 x40,0 x20,0 x00;

26、uchar time_data7=10,6,4,17,11,58,30;/年周月日时分秒年周月日时分秒回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 uchar write_add7=0 x8c,0 x8a,0 x88,0 x86,0 x84,0 x82,0 x80;uchar read_add7=0 x8d,0 x8b,0 x89,0 x87,0 x85,0 x83,0 x81;uchar disp8;void write_ds1302_byte(uchar dat);void write_ds1302(uchar add,uchar d

27、at);uchar read_ds1302(uchar add);void set_rtc(void);void read_rtc(void);void time_pros(void);void display(void);void delay(unsigned int a)while(a-);回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 void write_ds1302_byte(uchar dat)/写一字节子程序写一字节子程序uchar i;for(i=0;i1;sck=1;回目录回目录上一页上一页下一页下一页结结 束束项目十项目

28、十 单片机简易万年历设计单片机简易万年历设计 void write_ds1302(uchar add,uchar dat)/向向DS1302写数据写数据rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);write_ds1302_byte(dat);rst=0;_nop_();io=1;sck=1;回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 uchar read_ds1302(uchar add)/读一字节数据读一字节数据uchar i,value;rst=0

29、;_nop_();sck=0;_nop_();rst=1;_nop_();write_ds1302_byte(add);/写地址写地址for(i=0;i1;sck=0;if(io)value=value|0 x80;sck=1;rst=0;_nop_();sck=0;_nop_();sck=1;io=1;return value;/返回读到的值返回读到的值回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 void set_rtc(void)uchar i,j;for(i=0;i7;i+)j=time_datai/10;time_datai=t

30、ime_datai%10;time_datai=time_datai+j*16;write_ds1302(0 x8e,0 x00);/去除写保护去除写保护for(i=0;i7;i+)write_ds1302(write_addi,time_datai);write_ds1302(0 x8e,0 x80);/加写保护加写保护回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 void read_rtc(void)/设置初始时间设置初始时间uchar i;for(i=0;i7;i+)time_datai=read_ds1302(read_addi)

31、;void time_pros(void)/分离出数码管显示所需数据分离出数码管显示所需数据disp0=time_data6%16;disp1=time_data6/16;disp2=0 x40;disp3=time_data5%16;disp4=time_data5/16;disp5=0 x40;disp6=time_data4%16;disp7=time_data4/16;回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 void display(void)/数码管显示数码管显示uchar i;for(i=0;i8;i+)P1=table

32、2i;if(i=2|i=5)P2=table110;else P2=table1dispi;delay(200);回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 void main()while(1)read_rtc();time_pros();display();【进阶提高【进阶提高】回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 将上面任务中的数码管改用液晶将上面任务中的数码管改用液晶LCD1602显示。在显示。在Proteus软件中按下图所示,绘制电路图。软件中按下图所示,绘制电路

33、图。+5vX112MHzCY1CY2CY3S2U1R110k10F30pF30pF19P2.0/A08P2.1/A09P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A153938373635343332VCC1VCC2RSTSCLKI/OX1X2DS1302+5vP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7XTAL1XTAL2RSTALEPSENEA1234567810111213141516172122

34、232425262728189293031VccAT89C511.5V1.5V32.768KHzX2U4R2R3R410K10K 10KRSTSCKIORSTSCKIOP3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDP2.0/A08P2.1/A09P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15+5vLCD1602SSVDDVEEVSRWRE0D1D2D3D4D5D6D7DRESPACK-8+5v+5v+5v10KR2回目录回目录上一页上一页下一页下一页结结 束束项目十项

35、目十 单片机简易万年历设计单片机简易万年历设计 main.c程序代码:程序代码:#include#include#include#define uchar unsigned charuchar hour,minute,second,week,day,month,year;void main()uchar i;Initial_LCD();/液晶初始化液晶初始化 Initial_DS1302();/DS1302初始化初始化 set_rtc();/对时操作对时操作 while(1)回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 TimeToStr

36、();LCD_WRITE_COM(0 x80);/液晶第一行显示液晶第一行显示for(i=0;i0;x-)for(y=110;y0;y-);/*LCD写命令函数写命令函数*/void LCD_WRITE_COM(unsigned char com)/写命令函数写命令函数回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 LCD_RS=0;LCD_RW=0;LCD_E=1;P0=com;delay(5);LCD_E=0;/*LCD写数据函数写数据函数*/void LCD_WRITE_DATA(unsigned char date)/写数据函数写数

37、据函数 LCD_RS=1;LCD_RW=0;LCD_E=1;P0=date;delay(5);LCD_E=0;回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计/*LCD初始化函数初始化函数*/void Initial_LCD()/液晶初始化函数液晶初始化函数 LCD_WRITE_COM(0 x38);/设置设置16*2显示,显示,5*7点阵,点阵,8位数据接口位数据接口LCD_WRITE_COM(0 x0c);/设置开显示,不显示光标设置开显示,不显示光标LCD_WRITE_COM(0 x06);/写一个字符后地址指针加写一个字符后地址指针加

38、1ds1302.h文件代码:文件代码:/*DS1302读写相关寄存器地址宏定义读写相关寄存器地址宏定义*/#define WRITE_SECOND0 x80#define WRITE_MINUTE0 x82#define WRITE_HOUR0 x84#define WRITE_DAY0 x86#define WRITE_MONTH0 x88#define WRITE_YEAR0 x8C 回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计#define WRITE_PROTECT0 x8E#define WRITE_WEEK0 x8A#defi

39、ne WRITE_CURRENT 0 x90#define READ_SECOND0 x81#define READ_MINUTE0 x83#define READ_HOUR0 x85#define READ_DAY0 x87#define READ_MONTH0 x89#define READ_WEEK0 x8B#define READ_YEAR0 x8D sbit RST=P12;/DS1302片选片选sbit DIO=P11;/DS1302数据信号数据信号sbit SCLK=P10;/DS1302时钟信号时钟信号sbit ACC_7=ACC7;/位寻址寄存器定义位寻址寄存器定义unsig

40、ned char time_data7=10,6,4,17,11,58,59;/10年年6周周4月月17日日11时时58 回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 分分59秒秒unsigned char write_add7=0 x8c,0 x8a,0 x88,0 x86,0 x84,0 x82,0 x80;/年周年周月日时分秒写寄存器地址月日时分秒写寄存器地址unsigned char TimeString16;unsigned char hour,minute,second,week,day,month,year;void Ini

41、tial_DS1302();/DS1302初始化函数申明初始化函数申明unsigned char read_1302(unsigned char addr);/DS1302读数据函数申明读数据函数申明void write_1302(unsigned char addr,unsigned char date);/DS1302写数据写数据函数申明函数申明void TimeToStr(void);/*回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 DS1302写入函数写入函数*/void write_1302(unsigned char addr

42、,unsigned char date)/地址、数据发送地址、数据发送子程序子程序 unsigned char i,temp;RST=0;/RST引脚为低,数据传送中止引脚为低,数据传送中止 SCLK=0;/清零时钟总线清零时钟总线 RST=1;/RST引脚为高,逻辑控制有效引脚为高,逻辑控制有效 for(i=8;i0;i-)/发送地址,循环发送地址,循环8次移位次移位 SCLK=0;temp=addr;DIO=(bit)(temp&0 x01);/每次传送低字节每次传送低字节 addr=1;/右移一位右移一位回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片

43、机简易万年历设计 SCLK=1;for(i=8;i0;i-)/发送数据发送数据 SCLK=0;temp=date;DIO=(bit)(temp&0 x01);date=1;SCLK=1;回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 RST=0;unsigned char read_1302(unsigned char addr)/读取数据读取数据 unsigned char i,temp,date1,date2;RST=0;SCLK=0;RST=1;for(i=8;i0;i-)/循环循环8次移位次移位,写入要读的寄存器地址写入要读的寄存器

44、地址 SCLK=0;temp=addr;DIO=(bit)(temp&0 x01);/每次传送低字节每次传送低字节 addr=1;/右移一位右移一位 SCLK=1;回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 for(i=8;i0;i-)ACC_7=DIO;SCLK=1;ACC=1;SCLK=0;RST=0;date1=ACC;date2=date1/16;/数据进制转换数据进制转换 date1=date1%16;/十六进制转十进制十六进制转十进制 date1=date1+date2*10;return(date1);回目录回目录上一页上

45、一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计/*设置时间,对时函数设置时间,对时函数*/void set_rtc(void)unsigned char i,j;for(i=0;i7;i+)j=time_datai/10;time_datai=time_datai%10;time_datai=time_datai+j*16;/拼接成拼接成BCD码码回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 write_1302(0 x8e,0 x00);/去掉写保护去掉写保护 for(i=0;i低I/O缓冲DR配合/W

46、进行写数据或指令高DRI/O缓冲配合R进行读数据或指令低/低高无动作 回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 忙标志忙标志:BFBF标志提供内部工作情况标志提供内部工作情况.BF=1表示模块在进行表示模块在进行内部操作内部操作,此时模块不接受外部指令和数据此时模块不接受外部指令和数据.BF=0时时,模块为准备状态模块为准备状态,随时可接受外部指令和数据随时可接受外部指令和数据.利用利用STATUS RD 指令指令,可以将可以将BF读到读到DB7总线总线,从而检验模块之工作状态从而检验模块之工作状态.回目录回目录上一页上一页下一页下一

47、页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 字型产生字型产生ROM(CGROM)字型产生字型产生ROM(CGROM)提供)提供8192个此触发器个此触发器是用于模块屏幕显示开和关的控制。是用于模块屏幕显示开和关的控制。DFF=1为开显为开显示(示(DISPLAY ON),DDRAM 的内容就显示在屏幕的内容就显示在屏幕上,上,DFF=0为关显示(为关显示(DISPLAY OFF)。DFF 的状态是指令的状态是指令DISPLAY ON/OFF和和RST信号信号控制的。控制的。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设

48、计 显示数据显示数据RAM(DDRAM)模块内部显示数据模块内部显示数据RAM提供提供642个位元组的空间,个位元组的空间,最多可控制最多可控制4行行16字(字(64个字)的中文字型显示,个字)的中文字型显示,当写入显示数据当写入显示数据RAM时,可分别显示时,可分别显示CGROM与与CGRAM的字型;此模块可显示三种字型,分别是的字型;此模块可显示三种字型,分别是半角英数字型半角英数字型(16*8)、CGRAM字型及字型及CGROM的的中文字型,三种字型的选择,由在中文字型,三种字型的选择,由在DDRAM中写入中写入的编码选择,在的编码选择,在0000H0006H的编码中(其代码的编码中(其

49、代码分别是分别是0000、0002、0004、0006共共4个)将选择个)将选择CGRAM的自定义字型,的自定义字型,02H7FH的编码中将选的编码中将选择半角英数字的字型,至于择半角英数字的字型,至于A1以上的编码将自动的以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中结合下一个位元组,组成两个位元组的编码形成中文字型的编码文字型的编码BIG5(A140D75F),),GB(A1A0-F7FFH)。)。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 字型产生字型产生RAM(CGRAM)字型产生字型产生RAM提供图象定义提供图

50、象定义(造字造字)功能功能,可以提供可以提供四组四组1616点的自定义图象空间,使用者可以将内点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到部字型没有提供的图象字型自行定义到CGRAM中,中,便可和便可和CGROM中的定义一样地通过中的定义一样地通过DDRAM显示显示在屏幕中。在屏幕中。回目录回目录上一页上一页下一页下一页结结 束束项目十项目十 单片机简易万年历设计单片机简易万年历设计 地址计数器地址计数器AC地址计数器是用来贮存地址计数器是用来贮存DDRAM/CGRAM之一的地之一的地址址,它可由设定指令暂存器来改变,之后只要读取或它可由设定指令暂存器来改变,之后只要读

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(项目十-单片机简易万年历设计课件.ppt)为本站会员(ziliao2023)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|