?? gps.c
字號:
//包含所需頭文件
#include <ioM16v.h>
#include <macros.h>
//*
//*
/***************************************************************************************************
宏定義
****************************************************************************************************/
#define uchar unsigned char
#define uint unsigned int
//串行通信
#define PORT PORTA //選擇引腳口
#define setRS PORT|=(1<<1) //串行的片選信號
#define clearRS PORT&=~(1<<1)
#define setRW PORT|=(1<<2) //串行的數據口
#define clearRW PORT&=~(1<<2)
#define setCKL PORT|=(1<<3),delay_nus(1) //串行的同步時鐘
#define clearCKL PORT&=~(1<<3),delay_nus(1)
#define Clear WriteCommand(0x01),delay_nms(5) //清屏
#define hanzishu 18 //輸入漢字數
#define howmany0 1 //在開始顯示漢字前填入多少個相同的漢字 (一般填空字)
#define position 6 //填什么樣的相同漢字(一般填空字)
#define homMHZPosition 8 //以多少個漢字位來顯示移動漢字
/***************************************************************************************************
宏定義
****************************************************************************************************/
//全局變量
uchar temp[17][(howmany0+hanzishu)*2+2];
bn=0;
char lin1[]={"時間:00:00:00 A"};
char lin2[]={"經度:00000.0000"};
char lin3[]={"緯度:0000.0000"};
char lin4[]={" 東經 北緯 "};
uchar data_item=0; //接收到第幾個字節
uchar g_Ptr = 0; //所要提取的一節信息的字節數
uchar g_Class = 0; //提取信息節數
uchar g_DataVari = 0;
uint rece_num = 0; //
uchar g_DisTime[6]={"000000"}; //時間
uchar g_Diss [1]={" "}; //定位狀態
uchar g_Diswie [9]={"0000.1111"}; //緯度
uchar g_Disns [1]={"N"}; //北緯N/南緯S
uchar g_Disjing[10]={"00000.0000"};//經度
uchar g_Disew [1]={"E"}; //東經E/西經W
/***************************************************************************************************
下面是 全局函數
****************************************************************************************************/
void delay_1us(void) ;//
void delay_nus(unsigned int n);
void delay_1ms(void);
void delay_nms(unsigned int n);
void send_8bit(uchar ch);//發送8位數據
void WriteData(uchar data);//寫數據
void WriteCommand(uchar command);//寫地址
void guangbiao(uchar x); //光標開關,1開,0關
void lcd12864_init(void); //液晶初始化程序
void Set_display_Adress(uchar y,uchar x);//設置顯示坐標:y行,x列
void display_Char(uchar y, uchar x,uchar);
void display_String(uchar y,uchar x,uchar *s) ; //顯示字符串
void display_Num(uchar y,uchar x,uint num,char N);//可以顯示 N 位的的整數num,(從個位起)最多顯示6位
void Display_Picture(const uchar *tab );//全屏顯示圖形子程序 128*64
void Display_Picture32( uchar *tab );//顯示圖形子程序 32*32
void display_hanzi();
void leftmove32x32(uchar *tu );
void putin (uchar point);
void clearRAM (void);
void left_move(void);
void zaihanzi(void);
void left_movedisplay(void);
shownum( unsigned char i,unsigned char j, float num);//LCD顯示 顯示帶有數碼包括整數,浮點
/***************************************************************************************************
上述為 全局函數
****************************************************************************************************/
/*-----------------------------------------------------------------------
延時函數
系統時鐘:8M
-----------------------------------------------------------------------*/
void delay_1us(void) //1us延時函數
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延時函數
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms延時函數
{
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n) //N ms延時函數
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
/*-----------------------------------------------------------------------
延時函數
系統時鐘:8M
-----------------------------------------------------------------------*/
/***************************************************************************************************
下面為12864液晶模塊驅動程序
****************************************************************************************************/
//漢字圖像 若將其用另文件存放則顯示漢字不正常
const uchar HZ[19][32]={
/*-- 文字: 過 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x40,0x10,0x20,0x10,0x30,0x10,0x20,0x10,0x07,0xFE,0x00,0x10,0x02,0x10,0xE1,0x10,
0x21,0x90,0x21,0x10,0x20,0x10,0x20,0x50,0x20,0x20,0x58,0x00,0x87,0xFE,0x00,0x00,
//下面是數字10: 構造分法,用1與0的數碼,把0的數碼交替地放在1代碼后面
//0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x70,0x24,0x10,0x42,0x10,0x42,0x10,0x42,
//0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x7c,0x18,0x00,0x00,0x00,0x00,
/*-- 文字: 去 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x7F,0xFE,0x02,0x00,0x06,0x00,0x08,0x20,0x10,0x10,0x3F,0xF8,0x10,0x10,0x00,0x00,
/*-- 文字: 屬 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x3F,0xFC,0x20,0x04,0x3F,0xFC,0x20,0x00,0x2F,0xF8,0x20,0x80,0x27,0xF8,0x24,0x88,
0x27,0xF8,0x20,0x80,0x2F,0xFC,0x28,0xA4,0x48,0xF4,0x4B,0x14,0x88,0x04,0x08,0x0C,
/*-- 文字: 于 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x09,0x00,0x05,0x00,0x02,0x00,
/*-- 文字: 死 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x7F,0xFE,0x08,0x40,0x08,0x40,0x1F,0x40,0x11,0x46,0x21,0x58,0x32,0x60,
0x4A,0x40,0x8A,0x40,0x04,0x40,0x04,0x42,0x08,0x42,0x30,0x42,0xC0,0x3E,0x00,0x00,
/*-- 文字: 神 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x20,0x20,0x10,0x20,0x10,0x20,0xFD,0xFC,0x05,0x24,0x09,0x24,0x11,0xFC,0x39,0x24,
0x55,0x24,0x95,0xFC,0x11,0x24,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,
/*-- 11文字: 空字 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//11
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 現 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0xFF,0xF8,0x12,0x08,0x12,0x48,0x12,0x48,0x12,0x48,0x7E,0x48,0x12,0x48,
0x12,0x48,0x12,0xA8,0x1C,0xA0,0xE1,0x22,0x01,0x22,0x02,0x22,0x04,0x1E,0x08,0x00,
/*-- 文字: 在 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x02,0x00,0x02,0x00,0x7F,0xFE,0x04,0x00,0x04,0x00,0x08,0x40,0x18,0x40,0x17,0xFC,
0x30,0x40,0x50,0x40,0x90,0x40,0x10,0x40,0x10,0x40,0x17,0xFE,0x10,0x00,0x00,0x00,
/*-- 文字: 與 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x08,0x00,0x08,0x04,0x0F,0xFE,0x08,0x00,0x08,0x00,0x0F,0xFC,0x00,0x04,
0x00,0x04,0x00,0x24,0x7F,0xF4,0x00,0x04,0x00,0x04,0x00,0x48,0x00,0x30,0x00,0x00,
/*-- 文字: 未 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x03,0x00,
0x03,0x80,0x05,0x40,0x05,0x20,0x09,0x18,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00,
/*-- 文字: 來 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x01,0x00,0x01,0x00,0x3F,0xFC,0x01,0x00,0x09,0x30,0x05,0x20,0x03,0x40,0x7F,0xFE,
0x01,0x80,0x03,0x40,0x05,0x20,0x09,0x18,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00,
/*-- 文字: 卻 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x08,0x00,0x08,0x7C,0x08,0x44,0x7F,0x44,0x08,0x44,0x08,0x44,0x08,0x44,0xFF,0x44,
0x10,0x44,0x12,0x44,0x21,0x44,0x27,0xD4,0x79,0x48,0x20,0x40,0x00,0x40,0x00,0x40,
/*-- 文字: 由 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,
0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x20,0x08,0x00,0x00,
/*-- 文字: 我 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x06,0x40,0x38,0x50,0x08,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x48,
0x0E,0x28,0x38,0x30,0xC8,0x20,0x08,0x50,0x09,0x92,0x08,0x0A,0x28,0x06,0x10,0x02,
/*-- 文字: 們 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x0A,0x00,0x09,0x00,0x11,0xBC,0x11,0x04,0x34,0x04,0x24,0x04,0x64,0x04,0xA4,0x04,
0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x14,0x24,0x08,0x00,0x00,
/*-- 文字: 掌 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x11,0x10,0x09,0x20,0x7F,0xFE,0x40,0x04,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x00,0x00,
0x3F,0xF0,0x01,0x00,0x3F,0xF8,0x01,0x00,0x7F,0xFC,0x01,0x00,0x05,0x00,0x02,0x00,
/*-- 文字: 握 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x20,0x00,0x23,0xFC,0x22,0x04,0xFB,0xFC,0x22,0x00,0x23,0xFE,0x2A,0x40,0x32,0x88,
0x63,0xFC,0xA2,0x24,0x22,0x20,0x23,0xFC,0x24,0x20,0x24,0x20,0xAB,0xFE,0x40,0x00,
};
//圖象數組
uchar tu[]={
0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,
0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x3F,0xFC,0x00,0x00,0x3F,0xFC,0x00,
0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xF0,
0x03,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0xC0,
0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xF0,0x0F,0xFE,0x3F,0xF0,
0x1F,0xF8,0x1F,0xF8,0x1F,0xE0,0x07,0xF8,0x3F,0xC0,0x01,0xFC,0x3F,0x00,0x00,0xFC,
0x7C,0x00,0x00,0x3E,0x78,0x00,0x00,0x1E,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x01,
};
//發送8位數據
void send_8bit(uchar ch)
{
char i;
for(i=0;i<8;i++)
{ setCKL;
if((ch<<i)&0x80)setRW;
else clearRW;
clearCKL;
}
}
//寫數據
void WriteData(uchar data)//
{
setRS;
send_8bit(0xfa);
send_8bit(data&0xf0);
send_8bit(data<<4);
clearRS;
}
//寫地址
void WriteCommand(uchar command)//
{
setRS;
send_8bit(0xf8);
send_8bit(command&0xf0);
send_8bit(command<<4);
clearRS;
}
//光標開關,1開,0關
void guangbiao(uchar x) //
{
if(x==1) WriteCommand(0x0c|0x03);
else WriteCommand(0x0c);
}
// 設置顯示坐標:y行,x列
void Set_display_Adress(uchar y,uchar x)//
{
uchar address;
switch(y)
{
case 0:
address=0x80+x;
break;
case 1:
address=0x90+x;
break;
case 2:
address=0x88+x;
break;
case 3:
address=0x98+x;
break;
}
WriteCommand(address);
}
//顯示字符串
void display_String(uchar y,uchar x,uchar *s) //
{
uchar i=0;
if(*s=='\0')return;
for(i=0;;i++)
{
if(*(s+i)=='\0')break;
if(!i%2)
Set_display_Adress(y,x);
WriteData(*(s+i));
if(i%2)x++;
if(x>7){y++,x=0;}
}
}
//顯示單個字符
void display_Char(uchar y,uchar x,char ch)
{
Set_display_Adress(y,x);
WriteData(ch);
}
//可以顯示 N 位的的整數num,(從個位起)最多顯示6位
void display_Num(uchar y,uchar x,uint num,char N)//
{
char tmp[5],i;//加大數組可以達到加多顯示數位的效果
//N%=6;
for(i=0;i<N;i++)
{
tmp[i]=(num%10);
num/=10;
};
i--;
while(1)
{
Set_display_Adress(y,x);
WriteData(tmp[i--]+0x30);
if(!i)
{WriteData(tmp[i]+0x30);break;}
WriteData(tmp[i--]+0x30);
if(!i)
{WriteData(tmp[i]+0x30);break;}
x++;
}
x--;
}
//全屏顯示圖形子程序 128*64
void Display_Picture(const uchar *tab )
{
unsigned i,j,k,l=0,x=0x80,y;
for(i=0;i<2;i++) //x=0x80 為第一行
{
for(j=0,y=0x80; j<32;j++,y++)//y為水平方向以字節為單位
{
WriteCommand(0x36); //8位擴充指令集,允許繪圖
WriteCommand(y);//地址設置
WriteCommand(x);
WriteCommand(0x30);
k=16;
while(k--)
WriteData(tab[l++]); //時間復雜度(16*32)*2=32*32=32個H代碼控制一個漢字,共有32個漢字,則是全屏
} //按順序讀入:0->(32*32-1)
x=0x88;//第三行
}
}
//顯示圖形子程序 32*32
void Display_Picture32( unsigned char *tab )//
{
unsigned i,j,k,l=0,x=0x80,y;
for(j=0,y=0x80; j<32;j++,y++)//水平掃描32行 第一個32行(漢字的兩行)為一個連續地址
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -