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

📄 show_window.c

📁 此程序是GPS定位导航程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************/
/*函数名称: 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 + -