1602显示原理及应用(课件) - 图文 联系客服

发布时间 : 星期五 文章1602显示原理及应用(课件) - 图文更新完毕开始阅读5f49e3a450e2524de5187ed0

下面是DS1302的时钟寄存器。我们要读取的时间数据就是从下面这些数据寄存器中读取出来的。当我们要想调整时间时,可以把时间数据写入到相应的寄存器中就可以了。

这是DS1302内部的31个RAM寄存器。在某些应用场合我们可以应用到。如我们想要做一个带定时功能的闹钟。则可以把闹钟的时间写入到31个RAM寄存器中的任意几个。当单片机掉电时,只要我们的DS1302的备用电池还能工作,那么保存在其中的闹钟数据就不会丢失~~

由于对于这些器件的操作基本上按照数据手册上面提供的时序图和相关命令字来进行操作就可以了。因此在我们应用这些器件的时候一定要对照着手册上面的要求来进行操作。如果觉得还不够放心的话。可以到网上下载一些参考程序。对着手册看别人的程序,看别人的思路是怎么样的。

DS1302和单片机的连接很简单。只需一根复位线,一根时钟线,一根数据线即可。同时它本身还需要接一个32.768KHz的晶振来提供时钟源。对于晶振的两端可以分别接一个6PF左右的电容以提高晶振的精确度。同时可以在第8脚接上一个3.6V的可充电的电池。当系统正常工作时可以对电池进行涓流充电。当系统掉电时,DS1302由这个电池提供的能量继续工作。 下面让我们来驱动它。

sbit io_DS1302_RST = P2^0 ; sbit io_DS1302_IO = P2^1 ; sbit io_DS1302_SCLK = P2^2 ;

//-------------------------------------常数宏---------------------------------// #define DS1302_SECOND_WRITE 0x80 //写时钟芯片的寄存器位置 #define DS1302_MINUTE_WRITE 0x82 #define DS1302_HOUR_WRITE 0x84 #define DS1302_WEEK_WRITE 0x8A #define DS1302_DAY_WRITE 0x86 #define DS1302_MONTH_WRITE 0x88 #define DS1302_YEAR_WRITE 0x8C

#define DS1302_SECOND_READ 0x81 //读时钟芯片的寄存器位置 #define DS1302_MINUTE_READ 0x83 #define DS1302_HOUR_READ 0x85 #define DS1302_WEEK_READ 0x8B #define DS1302_DAY_READ 0x87 #define DS1302_MONTH_READ 0x89 #define DS1302_YEAR_READ 0x8D

//-----------------------------------操作宏----------------------------------// #define DS1302_SCLK_HIGH io_DS1302_SCLK = 1 ;

#define DS1302_SCLK_LOW io_DS1302_SCLK = 0 ;

#define DS1302_IO_HIGH io_DS1302_IO = 1 ; #define DS1302_IO_LOW io_DS1302_IO = 0 ; #define DS1302_IO_READ io_DS1302_IO

#define DS1302_RST_HIGH io_DS1302_RST = 1 ; #define DS1302_RST_LOW io_DS1302_RST = 0 ;

/****************************************************** * 保存时间数据的结构体 *

******************************************************/ struct {

uint8 Second ; uint8 Minute ; uint8 Hour ; uint8 Day ; uint8 Week ; uint8 Month ; uint8 Year ; }CurrentTime ;

/******************************************************************************

* Function: static void v_DS1302Write_f( uint8 Content ) * * Description:向DS1302写一个字节的内容 * * Parameter:uint8 Content : 要写的字节 * * *

******************************************************************************/

static void v_DS1302Write_f( uint8 Content )

{

uint8 i ;

for( i = 8 ; i > 0 ; i-- ) {

if( Content & 0x01 ) {

DS1302_IO_HIGH } else {

DS1302_IO_LOW }

Content >>= 1 ;

DS1302_SCLK_HIGH DS1302_SCLK_LOW } }

/******************************************************************************

* Function: static uint8 v_DS1302Read_f( void ) * * Description: 从DS1302当前设定的地址读取一个字节的内容 * * Parameter: *

* Return: 返回读出来的值(uint8) *

******************************************************************************/

static uint8 v_DS1302Read_f( void ) {

uint8 i, ReadValue ; DS1302_IO_HIGH for( i = 8 ; i > 0 ; i-- ) {

ReadValue >>= 1 ; if( DS1302_IO_READ ) {

ReadValue |= 0x80 ;