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();
}
Beispiel #2
0
//====================================================================//
// 语法格式: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);
}
Beispiel #4
0
//====================================================================//
// 语法格式: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();
}
Beispiel #7
0
//====================================================================//
// 语法格式: 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();		//加延时
	}
}