⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gt.c

📁 这是GPS全球卫星定位系统授时的下位机部分
💻 C
📖 第 1 页 / 共 2 页
字号:
sendBYTE(0xfa);
delay(10);
sendBYTE(dat&0xf0);
delay(10);
sendBYTE((dat<<4)&0xf0);
delay(10);
}

void display(char x_add,char dat,char dat1)
{
sendCMD(x_add);
sendDAT(dat);
sendDAT(dat1);
}

void init_lcm(void)
{
sendCMD(0x30);
sendCMD(0x04);
sendCMD(0x0f);
sendCMD(0x01);
sendCMD(0x02);
delay(10);
led2=0;
}
void send_title_up()
{
	unsigned char day,month,date,year;
	unsigned char dayl,monthl,datel,yearl;
	unsigned char dayh,monthh,dateh,yearh;
	uchar i,k;
	sendCMD(DDRAM_0);
	sendCMD(off_cursor);
/*	day=R1302(0x87);
	month=R1302(0x89);
	date=R1302(0x8b);
	year=R1302(0x8d);
	dayh=(day>>4)&0x03;
	dayl=day&0x0f;
	monthh=(month>>4)&0x01;
	monthl=month&0x0f;
	dateh=(date>>4)&0x0f;
	datel=date&0x0f;
	yearh=(year>>4)&0x0f;
	yearl=year&0x0f;
	sendDAT('2');
	sendDAT('0');
	sendDAT(BCD2ASC(yearh));
	sendDAT(BCD2ASC(yearl));
	sendDAT('-');
	sendDAT(BCD2ASC(monthh));
	sendDAT(BCD2ASC(monthl));
	sendDAT('-');
	sendDAT(BCD2ASC(dayh));
	sendDAT(BCD2ASC(dayl));
	display(0x85,0xd0,0xc7);
	display(0x86,0xc6,0xda);
	sendDAT(BCD2ASC(datel));  */
	if (GPS_STATUS==999)
	{
		for(i=0; i<15; i++)
		{
			sendDAT(GPS_DATA[i+1]);	
		}
	}
	led3=0;
}
void send_title_down()
{
	unsigned char sec,min,hr;
	unsigned char secl,minl,hrl;
	unsigned char sech,minh,hrh;
	sendCMD(DDRAM_1);
	sendCMD(off_cursor);
	sec=R1302(0x81);
	min=R1302(0x83);
	hr=R1302(0x85);
	sech=(sec>>4)&0x0f;
	secl=sec&0x0f;
	minh=(min>>4)&0x0f;
	minl=min&0x0f;
	hrh=(hr>>4)&0x03;
	hrl=hr&0x0f;
	sendDAT(BCD2ASC(hrh));
	sendDAT(BCD2ASC(hrl));
	sendDAT(':');
	sendDAT(BCD2ASC(minh));
	sendDAT(BCD2ASC(minl));
	sendDAT(':');
	sendDAT(BCD2ASC(sech));
	sendDAT(BCD2ASC(secl));
	led3=1;
}	   
void   init1302(void)
{
	W1302(0x8e,0x00);  //写保护打开
	W1302(0x8c,0x05);  //年05
	W1302(0x8a,0x01);  //星期06
	W1302(0x88,0x10);  //月10
	W1302(0x86,0x27);  //日27
	W1302(0x84,0x18);  //24小时制,18时
	W1302(0x82,0x11);  //分钟09
	W1302(0x80,0x00);  //启动时钟,00秒
	W1302(0x8f,0x80);  //写保护关闭
}
void   hour24(void)
{
	W1302(0x8e,0x00);  //写保护打开
	W1302(0x84,0x7f&R1302(0x85));  //24小时制
//	W1302(0x84,0x21);  //24小时制,21时
	W1302(0x8f,0x80);  //写保护关闭
}
void   hour12(void)
{
	W1302(0x8e,0x00);  //写保护打开
	W1302(0x84,0x80|R1302(0x85));  //12小时制
	W1302(0x8f,0x80);  //写保护关闭
}

/******************************************************************** 
 函 数 名:RTInputByte()
 功    能:实时时钟写入一字节
 说    明:往DS1302写入1Byte数据
 入口参数:ucData 写入的数据 
 返 回 值:无  
***********************************************************************/
void RTInputByte(uchar ucData) 
{ 
    uchar i;
    ACC = ucData;
    for(i=8; i>0; i--)
    {
		T_IO = ACC0;           /*相当于汇编中的 RRC */
        T_CLK = 1;
		T_CLK = 0;
        ACC = ACC >> 1; 
    } 
}
/******************************************************************** 
 函 数 名:RTOutputByte()
 功    能:实时时钟读取一字节
 说    明:从DS1302读取1Byte数据
 入口参数:无  
 返 回 值:Acc
***********************************************************************/
uchar RTOutputByte(void) 
{ 
    uchar i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;         /*相当于汇编中的 RRC */
		ACC7 = T_IO;
        T_CLK = 1;
        T_CLK = 0;
    } 
    return(ACC); 
}
/******************************************************************** 
 函 数 名:W1302()
 功    能:往DS1302写入数据
 说    明:先写地址,后写命令/数据
 调    用:RTInputByte() , RTOutputByte()
 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
 返 回 值:无
***********************************************************************/
void W1302(uchar ucAddr, uchar ucData)
{
    T_CLK = 0;
    T_RST = 0;
    T_RST = 1;
    RTInputByte(ucAddr);       /* 地址,命令 */
    RTInputByte(ucData);       /* 写1Byte数据*/
    T_RST = 0;
    T_CLK = 1;
        
} 
/******************************************************************** 
 函 数 名:R1302()
 功    能:读取DS1302某地址的数据
 说    明:先写地址,后读命令/数据
 调    用:RTInputByte() , RTOutputByte()
 入口参数:ucAddr: DS1302地址
 返 回 值:ucData :读取的数据
***********************************************************************/
uchar R1302(uchar ucAddr)
{
    uchar ucData;
    T_CLK = 0;
    T_RST = 0;
    T_RST = 1;
    RTInputByte(ucAddr);             /* 地址,命令 */
    ucData = RTOutputByte();         /* 读1Byte数据 */
    T_RST = 0;
    T_CLK = 1;
        
    return(ucData);
}
/******************************************************************** 
 函 数 名:BurstW1302T()
 功    能:往DS1302写入时钟数据(多字节方式)
 说    明:先写地址,后写命令/数据
 调    用:RTInputByte() 
 入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
                         8Byte (BCD码)1B 1B 1B 1B 1B  1B  1B 1B
 返 回 值:无
***********************************************************************/
void BurstW1302T(uchar *pWClock)
{
    uchar i;
    W1302(0x8e,0x00);         /* 控制命令,WP=0,写操作?*/
    T_CLK = 0;
    T_RST = 0;
    T_RST = 1;
    RTInputByte(0xbe);        /* 0xbe:时钟多字节写命令 */
    for (i = 8; i>0; i--)     /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
    {
        RTInputByte(*pWClock); /* 写1Byte数据*/
        pWClock++;
    }
    T_RST = 0;
    T_CLK = 1;
} 
/******************************************************************** 
 函 数 名:BurstR1302T()
 功    能:读取DS1302时钟数据
 说    明:先写地址/命令,后读数据(时钟多字节方式)
 调    用:RTInputByte() , RTOutputByte()
 入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
                             7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 返 回 值:无
***********************************************************************/
void BurstR1302T(uchar *pRClock)
{
    uchar i;
    T_CLK = 0;
    T_RST = 0;
    T_RST = 1;
    RTInputByte(0xbf);             /* 0xbf:时钟多字节读命令 */
    for (i=8; i>0; i--) 
    {
       *pRClock = RTOutputByte();   /* 读1Byte数据 */
       pRClock++;
    }
    T_RST = 0;
    T_CLK = 1;
}
/******************************************************************** 
 函 数 名:BurstW1302R()
 功    能:往DS1302寄存器数写入数据(多字节方式)
 说    明:先写地址,后写数据(寄存器多字节方式)
 调    用:RTInputByte()
 入口参数:pWReg: 寄存器数据地址
 返 回 值:无
***********************************************************************/
void BurstW1302R(uchar *pWReg)
{
    uchar i;
    W1302(0x8e,0x00);         /* 控制命令,WP=0,写操作*/
    T_CLK = 0;
    T_RST = 0;
    T_RST = 1;
    RTInputByte(0xfe);         /* 0xbe:时钟多字节写命令 */
    for (i=31; i>0; i--)       /* 31Byte 寄存器数据 */
    {
        RTInputByte(*pWReg);    /* 写1Byte数据*/
        pWReg++;
    }
    T_RST = 0;
    T_CLK = 1;
} 
/******************************************************************** 
 函 数 名:BurstR1302R()
 功    能:读取DS1302寄存器数据
 说    明:先写地址,后读命令/数据(寄存器多字节方式)
 调    用:RTInputByte() , RTOutputByte()
 入口参数:pRReg: 寄存器数据地址
 返 回 值:无
***********************************************************************/
void BurstR1302R(uchar *pRReg)
{
    uchar i;
    T_CLK = 0;
    T_RST = 0;
    T_RST = 1;
    RTInputByte(0xff);            /* 0xff:时钟多字节读命令 */
    for (i=31; i>0; i--)          /*31Byte 寄存器数据 */
    {
        *pRReg = RTOutputByte();  /* 读1Byte数据 */
        pRReg++;
    }
    T_RST = 0;
    T_CLK = 1;
}
/******************************************************************** 
 函 数 名:Set1302()
 功    能:设置初始时间
 说    明:先写地址,后读命令/数据(寄存器多字节方式)
 调    用:W1302()
 入口参数:pClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
                            7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 返 回 值:无
***********************************************************************/
void Set1302(uchar *pClock) 
{
    uchar i;
    uchar ucAddr = 0x80; 
    W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
    for(i =7; i>0; i--)
    { 
        W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
        pClock++;
        ucAddr +=2;
    }
    W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
}
/******************************************************************** 
 函 数 名:Get1302()
 功    能:读取DS1302当前时间
 说    明:
 调    用:R1302() 
 入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 
                                        7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
 返 回 值:无
***********************************************************************/
void Get1302(uchar ucCurtime[]) 
{
    uchar i;
    uchar ucAddr = 0x81;
    for (i=0; i<7; i++)
    {
        ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
        ucAddr += 2;
    }
}

unsigned char BCD2ASC(unsigned char BCD4)    
{
	if (BCD4<10)
	{	return(BCD4+'0');}
	else
	{	return(BCD4+'A'-10);}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -