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

📄 gps1602.c.bak

📁 GPS定位系统,1602液晶显示的源码.
💻 BAK
📖 第 1 页 / 共 2 页
字号:
* 函数名称    :ReadStatusLCM
* 功能描述    :读状态
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
unsigned char ReadStatusLCM(void)
{
		LCM_Data = 0xFF; 
		LCM_RS = 0;
		LCM_RW = 1;
		LCM_E = 0;
		LCM_E = 0;
		LCM_E = 1;
		while (LCM_Data & Busy); //检测忙信号
		return(LCM_Data);
}
/******************************************************************************************
* 函数名称    :LCMInit
* 功能描述    :LCM初始化
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void LCMInit(void) 
{
		LCM_Data = 0;
		WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
		Delay5Ms(); 
		WriteCommandLCM(0x38,0);
		Delay5Ms(); 
		WriteCommandLCM(0x38,0);
		Delay5Ms(); 

		WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
		WriteCommandLCM(0x08,1); //关闭显示
		WriteCommandLCM(0x01,1); //显示清屏
		WriteCommandLCM(0x06,1); // 显示光标移动设置
		WriteCommandLCM(0x0C,1); // 显示开及光标设置
}
/******************************************************************************************
* 函数名称    :LCMInit
* 功能描述    :LCM初始化
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void LCD_cls(void)
{
		WriteCommandLCM(0x01,0);
		Delay5Ms();
}
/******************************************************************************************
* 函数名称    :DisplayOneChar
* 功能描述    :按指定位置显示一个字符
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
		Y &= 0x1;
		X &= 0xF; //限制X不能大于15,Y不能大于1
		if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
		X |= 0x80; //算出指令码
		WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
		WriteDataLCM(DData);
}
/******************************************************************************************
* 函数名称    :DisplayListChar
* 功能描述    :按指定位置显示一串字符  ***原来的遇到空格0x20就不显示***
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
  	unsigned char ListLength,j;
  	ListLength = strlen(DData);
  	Y &= 0x1;
  	X &= 0xF; //限制X不能大于15,Y不能大于1
    if (X <= 0xF) //X坐标应小于0xF
      { 
		    for(j=0;j<ListLength;j++)
		      {
             DisplayOneChar(X, Y, DData[j]); //显示单个字符
             X++;
          }
       }
}

/******************************************************************************************
* 函数名称    :Delay5M
* 功能描述    :5ms延时
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Delay5Ms(void)
{
 		unsigned int TempCyc = 5552;
 		while(TempCyc--);
}
/******************************************************************************************
* 函数名称    :Delay400Ms
* 功能描述    :400ms延时
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Delay400Ms(void)
{
 		unsigned char TempCycA = 5;
 		unsigned int TempCycB;
 		while(TempCycA--)
		{
			TempCycB=7269;
			while(TempCycB--);
		};
}

/******************************************************************************************
* 函数名称    :uart
* 功能描述    :串口接收中断
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void uart(void) interrupt 4
{
    unsigned char tmp;
    if(RI)
    	{
        tmp=SBUF;
        switch(tmp)
        {
            case '$':
                cmd_number=0;        //命令类型清空
                mode=1;                //接收命令模式
                byte_count=0;        //接收位数清空
                break;
            case ',':
                seg_count++;        //逗号计数加1
                byte_count=0;
                break;
            case '*':
                switch(cmd_number)
                {
                    case 1:
                        buf_full|=0x01;
                        break;
                    case 2:
                        buf_full|=0x02;
                        break;
                    case 3:
                        buf_full|=0x04;
                        break;
                }
                mode=0;
                break;
            default:
                if(mode==1)
                	{
                    //命令种类判断
                    cmd[byte_count]=tmp;            //接收字符放入类型缓存
                    if(byte_count>=4)
                    	{                //如果类型数据接收完毕,判断类型
                        if(cmd[0]=='G')
                        	{
                            if(cmd[1]=='P')
                            	{
                                if(cmd[2]=='G')
                                	{
                                    if(cmd[3]=='G')
                                    	{
                                        if(cmd[4]=='A')
                                        	{
                                            cmd_number=1;
                                            mode=2;
                                            seg_count=0;
                                            byte_count=0;
                                        	}
                                    	}
                                    else if(cmd[3]=='S')
                                    	{
                                        if(cmd[4]=='V')
                                        	{
                                            cmd_number=2;
                                            mode=2;
                                            seg_count=0;
                                            byte_count=0;
                                        	}
                                    	}
                                	}
                                else if(cmd[2]=='R')
                                	{
                                    if(cmd[3]=='M')
                                    	{
                                        if(cmd[4]=='C')
                                        	{
                                            cmd_number=3;
                                            mode=2;
                                            seg_count=0;
                                            byte_count=0;
                                        	}
                                    	}
                                	}
                            }
                        }
                    }
                }
                else if(mode==2)
                	{
                    //接收数据处理
                    switch (cmd_number)
                    {
                        case 1:                //类型1数据接收。GPGGA
                            switch(seg_count)
                            {
                                case 2:                                //纬度处理
                                    if(byte_count<9)
                                    	{
                                        WD[byte_count]=tmp;
                                    	}
                                    break;
                                case 3:                                //纬度方向处理
                                    if(byte_count<1)
                                    	{
                                        WD_a=tmp;
                                    	}
                                    break;
                                case 4:                                //经度处理
                                    if(byte_count<10)
                                    	{
                                        JD[byte_count]=tmp;
                                    	}
                                    break;
                                case 5:                                //经度方向处理
                                    if(byte_count<1)
                                    	{
                                        JD_a=tmp;
                                    	}
                                    break;
                                case 6:                                //定位判断
                                    if(byte_count<1)
                                    	{
                                        lock=tmp;
                                    	}
                                    break;
                                case 7:                                //定位使用的卫星数
                                    if(byte_count<2)
                                    	{
                                        use_sat[byte_count]=tmp;
                                    	}
                                    break;
                                case 9:                                //高度处理
                                    if(byte_count<6)
                                    	{
                                        high[byte_count]=tmp;
                                    	}
                                    break;
                            }
                            break;
                        case 2:                //类型2数据接收。GPGSV
                            switch(seg_count)
                            {
                                case 3:                                //天空中的卫星总数
                                    if(byte_count<2)
                                    	{
                                        total_sat[byte_count]=tmp;
                                    	}
                                    break;
                            }
                            break;
                        case 3:                //类型3数据接收。GPRMC
                            switch(seg_count)
                            {
                                case 1:
                                    if(byte_count<6)
                                    	{                //时间处理
                                        time[byte_count]=tmp;    
                                    	}
                                    break;
                                case 7:                                //速度处理
                                    if(byte_count<5)
                                    	{
                                        speed[byte_count]=tmp;
                                    	}
                                    break;
                                case 8:                                //方位角处理
                                    if(byte_count<5)
                                    	{
                                        angle[byte_count]=tmp;
                                    	}
                                    break;
                            }
                            break;
                    }
                }
                byte_count++;        //接收数位加1
                break;
        }
    }
    RI=0;
}

⌨️ 快捷键说明

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