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

📄 gt.c

📁 这是GPS全球卫星定位系统授时的下位机部分
💻 C
📖 第 1 页 / 共 2 页
字号:
	#include <head.h>
	#include <iap_lite.h>
	#define DDRAM_0 0x80
	#define DDRAM_1 0x90
	#define off_cursor 0x0c
	#define GPSDATA0 0x1800
	#define addrpllvl 0x1801
	#define addrplla  0x1802
	
	sbit SID= P2^2;
	sbit SCLK=P2^3;
	sbit led1=P1^6;
	sbit led2=P2^0;
	sbit led3=P2^1;
	sbit T_CLK = P0^6;            /*实时时钟时钟线引脚 */
	sbit T_IO  = P0^7;            /*实时时钟数据线引脚 */
	sbit T_RST = P2^7;            /*实时时钟复位线引脚 */

/**********************************
全局变量定义
**********************************/
	sbit isprst=P1^0;
	sbit ispvcc=P1^1;
	sbit ACC0 = ACC^0;
	sbit ACC7 = ACC^7;
	sbit a0=ACC^0;
	sbit a7=ACC^7;
	sbit ds_clk=P0^6;        /*1302时钟端*/
	sbit ds_dat=P0^7;        /*1302数据端*/
	sbit ds_rst=P2^7;        /*1302复位端*/

	sbit ds1302_clk=P0^6;
	sbit ds1302_dat=P0^7;
	sbit ds1302_rst=P2^7;

	sbit ACC_0 = ACC^0;
	sbit ACC_1 = ACC^1;
	sbit ACC_2 = ACC^2;
	sbit ACC_3 = ACC^3;
	sbit ACC_4 = ACC^4;
	sbit ACC_5 = ACC^5;
	sbit ACC_6 = ACC^6;
	sbit ACC_7 = ACC^7;
	uchar GPS_DATA[80];
	uchar GPS_STATUS;
	uchar GPS_DATA_POINT;

void IoInit(void);					
void IspInit(voidw);					
void delay(uint delayms);
void newdelay(void);
void shortdelay(uchar i);
void ispreset();
void sendBYTE(char dat);
void sendCMD(char dat);
void sendDAT(char dat);
void display(char x_add,char dat,char dat1);
void init_lcm(void);
void send_title_up();
void send_title_down();
void   RTInputByte(uchar);       /* 输入 1Byte */
uchar  RTOutputByte(void);       /* 输出 1Byte */
void   W1302(uchar, uchar);
uchar  R1302(uchar);
void   Set1302(uchar *);         /* 设置时间 */
void   Bcd2asc(uchar,uchar *);
void   Get1302(uchar curtime[]); /* 读取1302当前时间 */
unsigned char BCD2ASC(unsigned char);    
void   init1302(void);
void   hour24(void);
void   hour12(void);



/****************************************************/
void shortdelay()
{	uchar i;
	for(i=50;i>0;i--);
}
/****************************************************/
void delay(uint delayms)
{
	uchar i;
	uint delayint;
	for(delayint=0;delayint<delayms;delayint++)
		for(i=0;i<255;i++);
	
}

//串口通讯,用于设置频率
/*******************************************************************/	
void uart_int(void) interrupt 4 
{
	uchar recchar;
	uint  recint=0;
	 
	if(RI)
	{
		RI=0;
		recchar=SBUF;
		switch(recchar)
		{
			case 0xfe :	SBUF=0xfe;
				break;
			default :
				switch(GPS_STATUS)
				{
					case 0:
						if(recchar=='$')
						{
							GPS_STATUS=1;
							GPS_DATA_POINT=1;
							GPS_DATA[GPS_DATA_POINT]=recchar;
						}
						break;						
					case 1:
						if(recchar=='G')
						{
							GPS_STATUS=2;
							GPS_DATA_POINT=2;
							GPS_DATA[GPS_DATA_POINT]=recchar;
						}
						break;						
					case 2:
						if(recchar=='P')
						{
							GPS_STATUS=3;
							GPS_DATA_POINT=3;
							GPS_DATA[GPS_DATA_POINT]=recchar;
						}
						break;						
					case 3:
						if(recchar=='R')
						{
							GPS_STATUS=4;
							GPS_DATA_POINT=4;
							GPS_DATA[GPS_DATA_POINT]=recchar;
						}
						break;						
					case 4:
						if(recchar=='M')
						{
							GPS_STATUS=5;
							GPS_DATA_POINT=5;
							GPS_DATA[GPS_DATA_POINT]=recchar;
						}
						break;						
					case 5:
						if(recchar=='C')
						{
							GPS_STATUS=6;
							GPS_DATA_POINT=6;
							GPS_DATA[GPS_DATA_POINT]=recchar;
						}
						break;						
					default :
						if(GPS_STATUS>=6)
						{
							if(recchar!=0x0a)
							{
								GPS_STATUS=GPS_STATUS+1;
								GPS_DATA_POINT=GPS_DATA_POINT+1;
								GPS_DATA[GPS_DATA_POINT]=recchar;
							}
							else
							{
								GPS_STATUS=999;
							}
						}
						else
						{
							GPS_STATUS=0;
						}
						break;						
				}  
		}
/*			while(!RI);
			RI=0;
			recchar=SBUF;
			if(recchar=='G')
			{
				GPS_STATUS=2;
				GPS_DATA_POINT=2;
				GPS_DATA[GPS_DATA_POINT]=recchar;
				while(!RI);
				RI=0;
				recchar=SBUF;
				if(recchar=='P')
				{
					GPS_STATUS=3;
					GPS_DATA_POINT=3;
					GPS_DATA[GPS_DATA_POINT]=recchar;
					while(!RI);
					RI=0;
					recchar=SBUF;
					if(recchar=='R')
					{
						GPS_STATUS=4;
						GPS_DATA_POINT=4;
						GPS_DATA[GPS_DATA_POINT]=recchar;
						while(!RI);
						RI=0;
						recchar=SBUF;
						if(recchar=='M')
						{
							GPS_STATUS=5;
							GPS_DATA_POINT=5;
							GPS_DATA[GPS_DATA_POINT]=recchar;
							while(!RI);
							RI=0;
							recchar=SBUF;
							if(recchar=='C')
							{
								GPS_STATUS=6;
								GPS_DATA_POINT=6;
								GPS_DATA[GPS_DATA_POINT]=recchar;
								while(!RI);
								RI=0;
								recchar=SBUF;
								while((recchar!=0x0a)&&(GPS_DATA_POINT<=80))
								{
									GPS_STATUS=GPS_STATUS+1;
									GPS_DATA_POINT=GPS_DATA_POINT+1;
									GPS_DATA[GPS_DATA_POINT]=recchar;
									while(!RI);
									RI=0;
									recchar=SBUF;
								}
							}
						}
					 }
				 }
			}
		}*/
	}
	else
		TI=0;
	
}



/********************************************************
* I/O 初始化
/*******************************************************/
void IoInit(void)
{
	P1M1=0x00;		//P1准双向口
	P1M2=0x00;
	P2M1=0x00;		//P2端口设置为准双向
	P2M2=0x00;
	P0M1=0x00;
	P0M2=0x00;
	
}
/********************************************************
*ISP初始化程序
*********************************************************/
void IspInit(void)
{	//unsigned char i;
    SSTAT &=0xFA;
	BRGCON =0x00;
	AUXR1 |=0x40;
	SCON =0X50;
//	BRGR0=0xF0;				// setup BRG for 9600 baud @ 7.373MHz internal RC oscillator
//	BRGR1=0x02;
	BRGR0=0xF0;				// setup BRG for 4800 baud @ 7.373MHz internal RC oscillator
	BRGR1=0x05;
	BRGCON=0X03;

	
}
/*********************************************************
*主程序
************************************************************/

void main(void)
{	char i;
 	IoInit();     //初始化I/O口
	IspInit();     //初始化ISP
	EX1=1;         //允许计数脉冲中断
	IT1=1;         //边沿触发
	EA=1;
	ES=1;
	PS=1;
	init_lcm();
    ACC = 0;
	i=1;
	led1=1 ;
	GPS_STATUS=0;
	GPS_DATA_POINT=0;
//	init1302();
	hour24();
	sendCMD(DDRAM_0);
	sendCMD(off_cursor);
	while(1)
	{
		delay(500);
		if(i==1)
		{	led1=1;
			i=0;
			send_title_up();	
		}
		else
		{	led1=0;
			i=1;
			send_title_down();	
		}
	}
}
/*********************************************************/

/************************************************************/
void newdelay(void)
{char i;
for(i=0;i<0x0ee;i++);
}

void sendBYTE(char dat)
{
	char i;
	for(i=0;i<8;i++)
	{ SCLK=0;
	if((dat&0x80)!=0)
		{SID=1;}
	else
		{SID=0;	}
	SCLK=1;
	dat=dat<<1;
	}
}

void sendCMD(char dat)
{
sendBYTE(0xf8);
delay(10);
sendBYTE(dat&0xf0);
delay(10);
sendBYTE((dat<<4)&0xf0);
delay(10);
}

void sendDAT(char dat)
{

⌨️ 快捷键说明

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