void Write1302(u8 addr,u8 data) { DS1302_OUT(); DS1302_RST_L(); DS1302_CLK_L(); DS1302_RST_H(); DelayNOP(100); DS1302SendByte(addr); DS1302SendByte(data); DelayNOP(100); DS1302_RST_L(); }
//====================================================================// // 语法格式:void Lcd_WriteDat(uchar dat) // 实现功能:写显示数据到LCD // 参 数:要显示的数据 // 返 回 值:无 //====================================================================// void Lcd_WriteDat(uchar dat) { while(Lcd_Busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; DelayNOP(); LCD_EN = 1; DelayNOP(); LCD_EN = 0; }
u8 Read1302(u8 addr) { u8 data=0; DS1302_OUT(); DS1302_RST_L(); DS1302_CLK_L(); DS1302_RST_H(); DelayNOP(100); DS1302SendByte(addr|0x01); DS1302_IN(); data = DS1302ReceiveByte(); DelayNOP(100); DS1302_RST_L(); return(data); }
//====================================================================// // 语法格式:void Lcd_WriteCmd(uchar cmd) // 实现功能:写指令数据到LCD // 参 数:要写入的指令 // 返 回 值:无 //====================================================================// void Lcd_WriteCmd(uchar cmd) { while(Lcd_Busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; DelayNOP(); LCD_EN = 1; DelayNOP(); LCD_EN = 0; }
/* 写时间函数,顺序为:年周月日时分秒 */ void WriteDS1302Clock(u8 *p) { Write1302(DS1302_WRITE,0x00); //关闭写保护 DS1302_OUT(); DS1302_RST_L(); DS1302_CLK_L(); DS1302_RST_H(); DelayNOP(100); DS1302SendByte(0xbe); //突发模式 DS1302SendByte(p[5]); //秒 DS1302SendByte(p[4]); //分 DS1302SendByte(p[3]); //时 DS1302SendByte(p[2]); //日 DS1302SendByte(p[1]); //月 DS1302SendByte(0x01); //周,设置成周一,没有使用 DS1302SendByte(p[0]); //年 DS1302SendByte(0x80); //保护标志字节 DelayNOP(100); DS1302_RST_L(); }
/* 读时间函数,顺序为:年周月日时分秒 */ void ReadDS1302Clock(u8 *p) { DS1302_OUT(); DS1302_RST_L(); DS1302_CLK_L(); DS1302_RST_H(); DelayNOP(100); DS1302SendByte(0xbf); //突发模式 DS1302_IN(); p[5] = DS1302ReceiveByte(); //秒 p[4] = DS1302ReceiveByte(); //分 p[3] = DS1302ReceiveByte(); //时 p[2] = DS1302ReceiveByte(); //日 p[1] = DS1302ReceiveByte(); //月 DS1302ReceiveByte(); //周 p[0] = DS1302ReceiveByte(); //年 DS1302ReceiveByte(); //保护标志字节 DelayNOP(100); DS1302_RST_L(); }
//====================================================================// // 语法格式: static bit Lcd_Busy(void) // 实现功能:检查LCD忙状态。为1时,忙,等待。为0时,闲,可写指令与数据。 // 参 数:无 // 返 回 值:忙状态 //====================================================================// static bit Lcd_Busy(void) { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; DelayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); }
u8 DS1302ReceiveByte(void) { u8 i,byte=0; for(i=0x01;i;i<<=1) { if(DS1302_IN_X) byte |= i; DS1302_CLK_L(); DelayNOP(80); //加延时 DS1302_CLK_H(); NOP();NOP(); //加延时 } return(byte>>1); }
void DS1302SendByte(u8 byte) { u8 i; for(i=0x01;i;i<<=1) { if(byte&i) DS1302_OUT_H(); else DS1302_OUT_L(); DS1302_CLK_H(); DelayNOP(80); //加延时 DS1302_CLK_L(); NOP();NOP(); //加延时 } }