📄 gt.c
字号:
#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 + -