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

📄 lcd.c

📁 源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "LCDCharres.h"
#include "LCD.h"
#include "string.h"





u8 LCDRW;
u8 RS;
static	u8 ProgressYpos;		//进度条 Y轴
static	u8 ProgressXpos;		//进度条当前值
//const u8 LCDINIDATA[]={0xa0,0xa2,0xa6,0xa4,0x60,0xc8,0x2f,0x27,0x81,0x3f,0xaf};
const u8 LCDINIDATA[]={0xe2,0xa0,0xa2,0xa6,0xa4,0x40,0xc8,0x2f,0x27,0x81,0x3f,0xe0,0xaf};

/**************************************************************************************************
** 函数名: _GS_lcd_send
** 输 入: _data, dc
**      	_data 	: 	传送的指令
**		dc	:	0:COMMAND  1:DATA
** 输 出: void
** 功能描述:  本函数将 LCD DRIVER 的数据传给 MCU
** 说  明:	void
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
** lh
**************************************************************************************************/
void _GS_lcd_send(u8 _data, u8 dc)
{
      GPIO_Config(GPIO0, 0x0100, GPIO_OUT_PP);     //RS, p0.8
      if(dc==0)
          GPIO_BitWrite(GPIO0,0x08,0);
      else if(dc==1)
          GPIO_BitWrite(GPIO0,0x08,1);
      else  return;
        
      GPIO_Config(GPIO0, 0x0080, GPIO_OUT_PP);     //LCD片选CS端口,P0.7
      GPIO_BitWrite(GPIO0,0x07,0x00);     
      GPIO_Config(GPIO0, 0x0040, GPIO_OUT_PP);     //LCD CLK端口,P0.6
      GPIO_BitWrite(GPIO0,0x06,0x00); 
      //Delay(9);       //1us
      GPIO_Config(GPIO0, 0x0020, GPIO_OUT_PP);     //DATA, p0.5
      
      for(int i = 0; i < 8; ++i)
      { 
          if(_data&0x80)
              GPIO_BitWrite(GPIO0,0x05,1);
          else
              GPIO_BitWrite(GPIO0,0x05,0);
         //Delay(9);       //1us
         GPIO_BitWrite(GPIO0,0x06,0x01);     //LCD CLK端口,p0.6
         //Delay(9);
         GPIO_BitWrite(GPIO0,0x06,0x00);     //LCD CLK端口,p0.6
         //Delay(9);
         _data <<=1;   
      }
      //Delay(9);
      GPIO_Config(GPIO0, 0x0080, GPIO_OUT_PP);     //LCD片选CS端口,P0.7
      GPIO_BitWrite(GPIO0,0x07,0x01);        
}

/*void _GS_lcd_send(u8 _data, u8 dc)
{
      GPIO_Config(GPIO0, 0x0020, GPIO_OUT_PP);     //RS, p0.5
      if(dc==0)
          GPIO_BitWrite(GPIO0,0x05,0);
      else if(dc==1)
          GPIO_BitWrite(GPIO0,0x05,1);
      else  return;
      
      GPIO_Config(GPIO0, 0x0010, GPIO_OUT_PP);     //LCD片选CS端口,P0.4
      GPIO_BitWrite(GPIO0,0x04,0x00);     
      GPIO_Config(GPIO0, 0x0100, GPIO_OUT_PP);     //LCD CLK端口,p0.8
      GPIO_BitWrite(GPIO0,0x08,0x00);  
      //Delay(9);       //1us
      GPIO_Config(GPIO0, 0x0200, GPIO_OUT_PP);     //DATA, p0.9
      
      for(int i = 0; i < 8; ++i)
      { 
          if(_data&0x80)
              GPIO_BitWrite(GPIO0,0x09,1);
          else
              GPIO_BitWrite(GPIO0,0x09,0);
         //Delay(9);       //1us
         GPIO_BitWrite(GPIO0,0x08,0x01);    //LCD CLK端口,p0.8
         //Delay(9);
         GPIO_BitWrite(GPIO0,0x08,0x00);
         //Delay(9);
         _data <<=1;   
      }
      //Delay(9);
      GPIO_Config(GPIO0, 0x0010, GPIO_OUT_PP);     //LCD片选CS端口,P0.4
      GPIO_BitWrite(GPIO0,0x04,0x01);    
}*/

/*
void _GS_lcd_send(u8 _data, u8 dc)
{
      //bool  BitOut;
      //RS = dc;
      //LCDRW = _data;
      GPIO_Config(GPIO0, 0x0020, GPIO_OUT_PP);     //RS, p0.5
      if(dc==0)
          GPIO_BitWrite(GPIO0,0x05,0);
      else if(dc==1)
          GPIO_BitWrite(GPIO0,0x05,1);
      else  return;
      
      Delay(9600);       //1us
      
      GPIO_Config(GPIO0, 0x0100, GPIO_OUT_PP);     //LCD CLK端口,p0.8
      GPIO_BitWrite(GPIO0,0x08,0x01);  
      GPIO_Config(GPIO0, 0x0200, GPIO_OUT_PP);     //DATA, p0.9
      for(int i = 0; i < 8; ++i)
      { 
          if(_data&0x80)
              GPIO_BitWrite(GPIO0,0x09,1);
          else
              GPIO_BitWrite(GPIO0,0x09,0);
          GPIO_BitWrite(GPIO0,0x08,0x00); 
          Delay(9600);       //1us
          GPIO_BitWrite(GPIO0,0x08,0x01);
          Delay(9600);
          _data <<=1; 
          
      }
}
*/

/**************************************************************************************************
** 函数名: _GS_lcd_setaddr
** 输 入: u8 x, u8 y
**         x : 输入的起始横坐标
**         y : 输入的其始纵坐标
** 输 出: void
** 功能描述:  本函数是对 LCD 设置当前点位置
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**************************************************************************************************/
void _GS_lcd_setaddr(u8 x, u8 y)
{
        _GS_lcd_send(PAGEHEAD|y ,0);  		/*指定页地址*/
       // ++x;
	_GS_lcd_send(SEGHEADH|(x / 16),	0); 	/*指定页内地址*/
	_GS_lcd_send(SEGHEADL|(x % 16),	0); 	/*指定页内地址*/
}

/**************************************************************************************************
** 函数名: GS_InitLCD
** 输 入: void
** 输 出: void
** 功能描述:  本函数对 LCD 进行并行传输初始化
** 说  明: IC[]为初始化参数
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**	//lh
**************************************************************************************************/
void GS_InitLCD(void)
{
	u8 i, ContData; 
        //初始化端口
        /*GPIO_Config(GPIO0, 0x0010, GPIO_OUT_PP);     //LCD片选CS端口,P0.4
        GPIO_BitWrite(GPIO0,0x04,0x00);     
        GPIO_Config(GPIO0, 0x0040, GPIO_OUT_PP);     //LCD WR端口,P0.6
        GPIO_BitWrite(GPIO0,0x06,0x00);     
        GPIO_Config(GPIO0, 0x0100, GPIO_OUT_PP);     //LCD CLK端口,P0.8
        GPIO_BitWrite(GPIO0,0x08,0x01);
        */
        GPIO_Config(GPIO0, 0x0200, GPIO_OUT_PP);     //LCD背光,P0.9
        //GPIO_BitWrite(GPIO0,0x09,0x00); 
      //  if(GS_ReadLCDlight()==0x11)
        //    GPIO_BitWrite(GPIO0,0x09,0x00); 
       // else 
            GPIO_BitWrite(GPIO0,0x09,0x01); 
        GPIO_Config(GPIO0, 0x0080, GPIO_OUT_PP);     //LCD片选CS端口,P0.7
        GPIO_BitWrite(GPIO0,0x07,0x00);     
        GPIO_Config(GPIO0, 0x0010, GPIO_OUT_PP);     //LCD WR端口,P0.4
        GPIO_BitWrite(GPIO0,0x04,0x00);     
        GPIO_Config(GPIO0, 0x0040, GPIO_OUT_PP);     //LCD CLK端口,P0.6
        GPIO_BitWrite(GPIO0,0x06,0x01);
        //发送初始化参数
	for (i=0; i<13; i++)
		_GS_lcd_send(LCDINIDATA[i],0); 

//------------- 设置对比度 ---------------------------
	//ContData = GS_ReadContrast(); 
        ContData = 0x20;
	if((ContData & 0x40)||(!ContData))
		ContData = 0x0f; 
	_GS_lcd_send(0x81,0); 			//0x81
	_GS_lcd_send(ContData,0); 		//0x00--0x3f
}

/**************************************************************************************************
** 函数名: _GS_sendasciilat
** 输 入: char charstr, bit FXFlag
**			FXFlag  0 : 不反色显示
**				1 : 反色显示
** 输 出: void
** 功能描述:  本函数是向LCD输出字符
** 说  明: 无
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**************************************************************************************************/
void _GS_sendasciilat(u8 charstr, u8 FNo)
{
	u8 volatile i, temp;
	u16 spos;
	
	spos = (charstr-0x20)*6;
	for(i=0; i<6; i++)
	{
		temp = ASCIILAT[spos+i];
		if(FNo)
			temp = ~temp;
		_GS_lcd_send(temp,1);
   	}
}

/**************************************************************************************************
** 函数名: GS_PutChar
** 输 入: u8 x,  u8 y,  char ucChar, bit FXFlag
**	x	:	输出字符在LCD屏幕上的 x 坐标
**	y	:	输出字符在LCD屏幕上的 y 坐标	
**	ucChar	:	要输出字符
**	ucNegateColor :  NEGATE_COLOR_NONE  不反色显示
**	    		 NEGATE_COLOR_CHAR  反色显示
** 输 出: void
** 功能描述:  本函数是向LCD指定位置输出一个字符
** 说  明: 无
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**************************************************************************************************/
void GS_PutChar(u8 x,  u8 y,  u8 ucChar, u8 ucNegateColor)
{
	if(ucChar<0x20)
		return;
	_GS_lcd_setaddr(x, y);
	_GS_sendasciilat(ucChar, ucNegateColor);
}

/**************************************************************************************************
** 函数名: GS_PutChar_DZ
** 输 入: u8 x,  u8 y,  char charstr
**	x	:	输出字符在LCD屏幕上的 x 坐标
**	y	:	输出字符在LCD屏幕上的 y 坐标	
**	charstr	:	输出字符
** 输 出: void
** 功能描述:  本函数是向LCD输出字符
** 说  明: 无
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
** 16*12点阵的字符
**************************************************************************************************/
void GS_PutChar_DZ(u8 x,  u8 y,  u8 charstr)
{
	u8 i;
	u16 volatile spos;

	if(charstr<=18)
		spos = charstr*24;
	else
		spos = 456;
	
	_GS_lcd_setaddr(x, y);
	for(i=0; i<12; i++)
		_GS_lcd_send(Dot_DZ[spos+i], 1);
	_GS_lcd_setaddr(x, y+1);
	for(i=0; i<12; i++)
		_GS_lcd_send(Dot_DZ[spos+i+12], 1);
}

/**************************************************************************************************
** 函数名: GS_ClearLCD
** 输 入: void
** 输 出: void
** 功能描述:  本函数是对LCD进行清屏处理
** 说  明: 无
** 作 者:  SIMPLE
** 日 期:  
** 修 改:  
** 日 期:  2004/11/10
** 版  本:  V0.0
**************************************************************************************************/
/*void GS_ClearLCD(void)
{
	u8 i,j;
    
	for (i=0; i<=LCD_HEIGHT/8; i++)
	{
		_GS_lcd_send(PAGEHEAD|i, 0);
		_GS_lcd_send(SEGHEADH, 0);
		_GS_lcd_send(SEGHEADL, 0);
		for(j=0; j<LCD_WIDTH; j++)
			_GS_lcd_send(0x00,1);
        }
}*/

void GS_ClearLCD(void)
{
	u8 i,j;
   
	for (i=0; i<LCD_HEIGHT/8; i++)
	{
		_GS_lcd_setaddr(0, i);
		for(j=0; j<LCD_WIDTH; j++)
			_GS_lcd_send(0x00,1);
      }
}

/**************************************************************************************************
** 函数名: GS_PutString
** 输 入: 
**	u8 x,  输出字符在LCD屏幕上的 x 坐标
**	u8 y,  输出字符在LCD屏幕上的 y 坐标
**	P_u8 pucStr, 要显示的字符串,以0结束的字符串 
**	u8 ucAlignMode, 显示对齐方式
**		值可为:	TEXT_ALIGN_NONE--0;TEXT_ALIGN_LEFT--1;TEXT_ALIGN_CENTER--2; 
**				TEXT_ALIGN_RIGHT--3
**	u8 ucNegateColor,反色显示方式
**			NEGATE_COLOR_NONE--0;NEGATE_COLOR_CHAR--1; NEGATE_COLOR_LINE--2
** 输 出: void
** 功能描述:  本函数是向LCD输出字符串
** 说  明: 无
** 作 者:  SIMPLE
** 日 期:  2005/04/14
** 修 改:  
** 日 期:  
** 版  本:  V0.0
**	//lh
**************************************************************************************************/
void GS_PutString(u8 x,  u8 y,	u8 * pucStr, u8 ucAlignMode, u8 ucNegateColor)
{
	//u8 data ucLen, ucStartPos, i;
     u8 volatile ucLen, ucStartPos, i;
	u8 * pucStrBuf;

⌨️ 快捷键说明

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