📄 show_window.c
字号:
/*****************************************************************/
/*函数名称: Show_Window.c */
/*函数功能: 基本信息的显示 */
/*有无返回: 无 */
/*修改记录: 无修改记录 */
/*编写作者: t483-4-19chenyong */
/*编写日期: 2007-4-06 */
/*****************************************************************/
#include "common.h"
#include "TS12864A.h"
#include "delay.h"
#include "window.h"
#include "key.h"
#include "astar.h"
#include "map.h"
// GPS数据接收定义
extern unsigned char JD[10]; //经度
extern unsigned char JD_a; //经度方向
extern unsigned char WD[9]; //纬度
extern unsigned char WD_a; //纬度方向
extern unsigned char time[6]; //时间
extern unsigned char date[6]; //日期
extern unsigned char speed[5]; //速度
extern unsigned char Height[6]; //高度
extern unsigned char angle[5]; //方位角
extern unsigned char use_sat[2]; //使用的卫星数
extern unsigned char total_sat[2]; //天空中总卫星数
//串口中断需要的变量
extern unsigned char seg_count; //逗号计数器
extern unsigned char dot_count; //小数点计数器
extern unsigned char byte_count; //位数计数器
extern unsigned char cmd_number; //命令类型
extern unsigned char mode; //0:结束模式,1:命令模式,2:数据模式
extern unsigned char buf_full; //1:整句接收完成,相应数
extern unsigned char cmd[5]; //命令类型存储数组
//显示需要的变量
extern unsigned char dsp_count; //刷新次数计数器
extern unsigned char time_count;
extern unsigned char Height_num,a_num,s_num;
extern unsigned int Position;
unsigned char key=0xff;
unsigned char i=0;
unsigned char t=0;
unsigned int sum=0;
/*xy坐标*/
unsigned char temp_key[KeyInputN]={0};
/*****************************************************************/
/* 窗口显示函数:基本信息 :第一屏 : */
/* 窗口模式: */
/* ----------------------------------------------------- */
/* | 毕业设计 | */
/* ----------------------------------------------------- */
/* | 作品 | */
/* ----------------------------------------------------- */
/* | GPS导航设计 | */
/* ----------------------------------------------------- */
/*字库查询:
毕(0) 业(1) 设(2) 计(3)
作(4) 品(5)
导(6) 航(7) 设(8) 计(9) */
/*****************************************************************/
void show_menu_system()
{
CleanScreen();
delay_nms(10);
Display_Character(2,1,0); // 毕
Display_Character(4,1,1); // 业
Display_Character(6,1,2); // 设
Display_Character(8,1,3); // 计
Display_Character(10,1,4); // 作
Display_Character(12,1,5); // 品
Display_Char(2,3,42); // G
Display_Char(3,3,51); // P
Display_Char(4,3,54); // S
Display_Character(6,3,6); // 导
Display_Character(8,3,7); // 航
Display_Character(10,3,8); // 设
Display_Character(12,3,9); // 计
show_author_information();
while(1)
{
key= keyscan();
// delay_nms(2500);
switch(key)
{
case 0x00: show_menu_frist();
/* 按0(确定键)键进入菜单界面 */
break;
default: break;
}
}
}
/*****************************************************************/
/* 窗口显示函数:基本信息 :第二屏 : */
/* 窗口模式: */
/* ----------------------------------------------------- */
/* | 1: 基本信息 | */
/* ----------------------------------------------------- */
/* | 2: 小车导航 | */
/* ----------------------------------------------------- */
/*字库查询:
基(10) 本(11) 信(12) 息(13)
作(4) 品(5)
小(14)车(15)导(16) 航(17) */
/*****************************************************************/
void show_menu_frist()
{
i=0;
CleanScreen();
delay_nms(10);
Display_Char(3,3,0); // 0:
Display_Char(4,3,62);
Display_Character(5,3,10); // 基
Display_Character(7,3,11); // 本
Display_Character(9,3,12); // 信
Display_Character(11,3,13); // 息
Display_Char(3,5,1); // 1:
Display_Char(4,5,62);
Display_Character(5,5,14); // 小
Display_Character(7,5,15); // 车
Display_Character(9,5,16); // 导
Display_Character(11,5,17); // 航
while(1)
{
if(i==5)
{
i=0;
Clear_Area(0,1,16);
}
Display_Character(2*(7-i),1,30+i);
delay_nms(2500);
if(i<3)
Clear_Area(2*(7-i),1,2);
Display_Character(2*i,1,30+i);
key= keyscan();
// delay_nms(2500);
switch(key)
{
case 0x00: show_Base_Function_Key();
/* 按0(确定键)键进入基本信息显示界面 */
break;
case 0x01:
GPS_Navigation();
/* 按1(确定键)键进入小车导航显示界面 */
break;
default: break;
}
i++;
}
}
void show_Base_Function_Key()
{
CleanScreen();
delay_nms(10);
Display_Char(3,1,0); // 0:
Display_Char(4,1,62);
Display_Character(6,1,22); // 位
Display_Character(8,1,23); // 置
Display_Char(3,3,1); // 1:
Display_Char(4,3,62);
Display_Character(6,3,24); // 时
Display_Character(8,3,25); // 间
Display_Char(3,5,2); // 2:
Display_Char(4,5,62);
Display_Character(6,5,26); // 其
Display_Character(8,5,27); // 它
while(1)
{
key= keyscan();
delay_nms(3500);
switch(key)
{
case 0x00: while(1)
{
CleanScreen();
delay_nms(1);
show_menu_JingDu(); // 经度
show_menu_WeiDu(); // 纬度
show_menu_GaoDu(); // 高度
key= keyscan();
if(key==0x0f)break;
}
break;
case 0x01: while(1)
{
CleanScreen();
delay_nms(1);
show_menu_ShiJian(); // 时间
key= keyscan();
if(key==0x0f)break;
}
break;
case 0x02: while(1)
{
CleanScreen();
delay_nms(1);
show_menu_SuDu(); // 速度
show_menu_sat(); // 使用的卫星数
show_sum_sat(); // 天空中总卫星数
key= keyscan();
if(key==0x0f)break;
}
break;
case 0x0f: show_menu_frist();
break;
/*等待按键值为8,返回原菜单*/
default: break;
}
}
}
/*****************************************************************/
/* 窗口显示函数:基本信息 :第三屏 : */
/* 窗口模式: 00000.0000 */
/*
----------------------- ------- --------------------------
/经度半球 1 'W' 或 'E' \
| ----------------------- ------- --------------------------
| 经度坐标 7 WGS84坐标系统,坐标格式ddmmmmm |
| 在第4位数字后省略了一个小数点 |
| ----------------------- ------- ---------------------------
*/
/*****************************************************************/
void show_menu_JingDu()
{
unsigned char temp_jd=0;
temp_jd = JD_a-48; // 转换为ASCII
temp_jd = 19+temp_jd;
Display_Char(0,1,temp_jd); // 经度的方向
Display_Char(1,1,62); // :
if(buf_full|0x01)
{
for(i=0;i<5;i++)
{
if((((use_sat[0]-0x30)*10+(use_sat[1]-0x30))>=4)&&(((use_sat[0]-0x30)*10+(use_sat[1]-0x30))<=12))
Display_Char(2+i,1,JD[i]-48);
else
Display_Char(2+i,1,0);
}
Display_Char(7,1,66);
for(i=1;i<5;i++)
{
if((((use_sat[0]-0x30)*10+(use_sat[1]-0x30))>=4)&&(((use_sat[0]-0x30)*10+(use_sat[1]-0x30))<=12))
Display_Char(7+i,1,JD[i+5]-48);
else
Display_Char(7+i,1,0);
}
}
}
/*****************************************************************/
/* 窗口显示函数:基本信息 :第三屏 : */
/* 窗口模式: 0000.0000 */
/*
----------------------- ------- --------------------------
/伟度半球 1 'N' 或 'S' \
| ----------------------- ------- --------------------------
| 纬度坐标 7 WGS84坐标系统,坐标格式ddmmmmm |
| 在第4位数字后省略了一个小数点 |
| ----------------------- ------- ---------------------------
*/
/*****************************************************************/
void show_menu_WeiDu()
{
unsigned char temp_wd=0;
temp_wd = WD_a-48; // 转换为ASCII
temp_wd = 19+temp_wd;
Display_Char(0,3,temp_wd); // 纬度的方向
Display_Char(1,3,62); // :
if(buf_full|0x01)
{
for(i=0;i<4;i++)
{
if((((use_sat[0]-0x30)*10+(use_sat[1]-0x30))>=4)&&(((use_sat[0]-0x30)*10+(use_sat[1]-0x30))<=12))
Display_Char(2+i,3,WD[i]-48);
else
Display_Char(2+i,3,0);
}
Display_Char(6,3,66);
for(i=0;i<4;i++)
{
if((((use_sat[0]-0x30)*10+(use_sat[1]-0x30))>=4)&&(((use_sat[0]-0x30)*10+(use_sat[1]-0x30))<=12))
Display_Char(7+i,3,WD[i+5]-48);
else
Display_Char(7+i,3,0);
}
}
}
/*****************************************************************/
/* 窗口显示函数:基本信息 :第三屏 : */
/* 窗口模式: 000000 */
/*
----------------------- ------- -----------------------
/年 2 UTC年的最后两位数字 \
| ----------------------- ------- ------------------------
| 月 2 UTC月, "01".."12" |
T | ----------------------- ------- ------------------------
i | 日 2 UTC日, "01".."31" |
m | ----------------------- ------- ------------------------
e | 时 2 UTC时, "00".."23" |
| ----------------------- ------- ------------------------
| 分 2 UTC分, "00".."59" |
| ----------------------- ------- ------------------------
\秒 2 UTC秒, "00".."59" /
----------------------- ------- ------------------------
*/
/*****************************************************************/
void show_menu_ShiJian()
{
unsigned char xdata dsp_count=0; //刷新次数计数器
unsigned char xdata Bhour=0,Bday=0,Bmonth=0;
unsigned int xdata Byear=0;
CleanScreen();
delay_nms(100);
Display_Char(0,3,55); // T
Display_Char(1,3,62); // :
delay_nus(100);
if(buf_full|0x08) //北京时间转换
{
if(Bhour!=((time[0]-0x30)*10+time[1]-0x30)+TIME_AREA)
{
Bhour=((time[0]-0x30)*10+time[1]-0x30)+TIME_AREA;
Bday=(date[0]-0x30)*10+date[1]-0x30;
Bmonth=(date[2]-0x30)*10+date[3]-0x30;
Byear=(date[4]-0x30)*10+date[5]-0x30+2000;
if(Bhour>=24)
{ //如果小时数大于24
Bhour-=24; //小时数减24
Bday++; //日期数加1
switch(Bday)
{ //判断日期
case 29: //普通年的2月份
if((!((Byear%400==0)||((Byear%4==0)&&(Byear%100!=0)))&&(Bmonth==2)))
{
Bday=1;
Bmonth++;
}
break;
case 30: //如果是闰年的2月
if(((Byear%400==0)||((Byear%4==0)&&(Byear%100!=0)))&&(Bmonth==2))
{
Bday=1;
Bmonth++;
}
break;
case 31:
if((Bmonth==4)||(Bmonth==6)||(Bmonth==9)||(Bmonth==11))
{
Bday=1;
Bmonth++;
}
break;
case 32:
Bday=1;
Bmonth++;
if(Bmonth>=13)
{
Byear++;
Bmonth=1;
}
break;
}
}
}
Display_Char(0,1,39); // D
Display_Char(1,1,62); // :
Display_Char(3,1,2); // 2
Display_Char(4,1,0); // 0
Display_Char(5,1,(Byear%100)/10);
Display_Char(6,1,Byear%10);
Display_Char(7,1,68);
Display_Char(8,1,Bmonth/10);
Display_Char(9,1,Bmonth%10);
Display_Char(10,1,68);
Display_Char(11,1,Bday/10);
Display_Char(12,1,Bday%10);
Display_Char(0,5,52); // Q
Display_Char(1,5,62); // :
Display_Character(4,5,28); // 星期
Display_Character(6,5,29);
switch(week(Byear%100,Bmonth,Bday))
{
case 0:
Display_Char(8,5,7); // 星期日
break;
case 1:
Display_Char(8,5,1); // 星期一
break;
case 2:
Display_Char(8,5,2); // 星期二
break;
case 3:
Display_Char(8,5,3); // 星期三
break;
case 4:
Display_Char(8,5,4); // 星期四
break;
case 5:
Display_Char(8,5,5); // 星期五
break;
case 6:
Display_Char(8,5,6); // 星期六
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -