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

📄 lcd.c

📁 ARM7 LPC2114上编写的uC/os-II源程序
💻 C
字号:
/******************************************************************************************************
**文   件   名: lcd.c
**创   建   人: 梁浩荡
**最后修改日期: 2008年5月27日
**描        述: HG1223209C-YF62L-VA LCD的uc/osII底层驱动 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#define IN_LCD
#include "config.h"

#define LCD_WRITE_COMMAND_MODE 1
#define LCD_WRITE_DATA_MODE 0

#define LCD_CS_PIN (1<<7)
#define LCD_RESET_PIN (1<<6) 
#define LCD_SCLK_PIN (1<<5)
#define LCD_SID_PIN (1<<4)
    
INT8U Bitmap_INT8U[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void InitializeLCD_FUN(void);
void LCD_Send_Command_Or_Data_FUN(INT8U WriteMode_INT8U,INT8U SendData_INT8U);
void LCD_Display_a_Sentence_FUN(INT8U StartAddress_INT8U,char * PointToSentence_INT8U,INT8U CleanDDRAM_INT8U);
void LCD_Display_a_Byte_FUN(INT8U StartAddress_INT8U,INT8U Word_INT8U);
void LCD_Display_a_Number_FUN(INT8U StartAddress_INT8U,INT8U Number_INT8U);



/****************************************************************************
* 名称:DelayNuS()
* 功能:长软件延时
* 入口参数:dly		延时参数,值为1时,延时为1us
* 出口参数:无
**------------------------------------------------------------------------------------------------------
** 作 者: 梁浩荡
** 日 期: 2008年5月27日
**------------------------------------------------------------------------------------------------------
****************************************************************************/

void  DelayNuS(INT32U  dly)
{ 
   for(; dly>0; dly--) ;
}


/*********************************************************************************************************
** 函数名称: InitializeLCD_FUN
** 功能描述: 初始化LCD 
** 输 入:无
**
** 输 出:无
** 全局变量: LCD_WRITE_COMMAND_MODE
** 调用模块: LCD_Send_Command_Or_Data_FUN,LCD_Display_a_Sentence_FUN
**------------------------------------------------------------------------------------------------------
** 作 者: 梁浩荡
** 日 期: 2008年5月27日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void InitializeLCD_FUN(void)
{
     //char s[40]={"这一刻我们都是四川人我们都是中国人"};
     char s[40] = {"向汶川大地震遇"};
     char s1[40] = {"难同胞致哀!!"};
     OSTimeDly(OS_TICKS_PER_SEC/10);
     LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,0x30); /*功能设置:一次送8位数据,基本指令集*/ 
	 DelayNuS(2);
     LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,0x18); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
	 DelayNuS(2);
     LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,0x0C); /*显示设定:开显示,显示光标,当前显示位反白闪动*/ 
	 DelayNuS(2);
     LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,0x01); /*清DDRAM*/ 
	 DelayNuS(2);
     LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,0x02); /*DDRAM地址归位*/ 
	 DelayNuS(2);
     LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,0x80); /*把显示地址设为0X80,即为第一行的首位*/ 
	 DelayNuS(2);
	 LCD_Display_a_Sentence_FUN(0x80,s,1);
	 LCD_Display_a_Sentence_FUN(0x90,s1,0);
}       

/*********************************************************************************************************
** 函数名称: LCD_Display_a_Sentence_FUN
** 功能描述: LCD显示一个句子
** 输 入: StartAddress_INT8U:显示首地址 * PointToSentence_INT8U:
**			数据指针 CleanDDRAM_INT8U:清DDRAM标志
** 输 出:无
** 全局变量: LCD_WRITE_COMMAND_MODE,
** 调用模块: LCD_Send_Command_Or_Data_FUN
**------------------------------------------------------------------------------------------------------
** 作 者: 梁浩荡
** 日 期: 2008年5月27日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void LCD_Display_a_Sentence_FUN(INT8U StartAddress_INT8U, char *PointToSentence_INT8U,INT8U CleanDDRAM_INT8U)
{
     if((StartAddress_INT8U>=0x80&&StartAddress_INT8U<0x8F)||(StartAddress_INT8U>=0x90&&StartAddress_INT8U<0x9F))
	 {
	     if(CleanDDRAM_INT8U==1)
		 {
		     LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,0x01); /*清DDRAM*/ 
		 }
         LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,StartAddress_INT8U);
         while((*PointToSentence_INT8U!='\0')&&(StartAddress_INT8U<0x9F))
	     {
             LCD_Send_Command_Or_Data_FUN(LCD_WRITE_DATA_MODE,*PointToSentence_INT8U++);
			 StartAddress_INT8U++;
			 if(StartAddress_INT8U==0x8F)
			 {
			     StartAddress_INT8U=0x90;
                 LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,StartAddress_INT8U);
			 }
		 }
	 }
}

/*********************************************************************************************************
** 函数名称: LCD_Display_a_Byte_FUN
** 功能描述: LCD显示一个字符
** 输 入: StartAddress_INT8U:显示首地址 Word_INT8U:显示字符
**			
** 输 出:无
** 全局变量: LCD_WRITE_COMMAND_MODE,LCD_WRITE_DATA_MODE
** 调用模块: LCD_Send_Command_Or_Data_FUN
**------------------------------------------------------------------------------------------------------
** 作 者: 梁浩荡
** 日 期: 2008年5月27日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void LCD_Display_a_Byte_FUN(INT8U StartAddress_INT8U,INT8U Word_INT8U)
{
     if((StartAddress_INT8U>=0x80&&StartAddress_INT8U<0x8F)||(StartAddress_INT8U>=0x90&&StartAddress_INT8U<0x9F))
	 {
		 //LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,0x01); /*清DDRAM*/ 
         LCD_Send_Command_Or_Data_FUN(LCD_WRITE_COMMAND_MODE,StartAddress_INT8U);
         LCD_Send_Command_Or_Data_FUN(LCD_WRITE_DATA_MODE,Word_INT8U);
	 }
}

/*********************************************************************************************************
** 函数名称: LCD_Display_a_Number_FUN
** 功能描述: LCD显示一个字符
** 输 入: StartAddress_INT8U:显示首地址 Number_INT8U:显示数字
**			
** 输 出:无
** 全局变量: LCD_WRITE_COMMAND_MODE,LCD_WRITE_DATA_MODE
** 调用模块: LCD_Send_Command_Or_Data_FUN,LCD_Display_a_Byte_FUN
**------------------------------------------------------------------------------------------------------
** 作 者: 梁浩荡
** 日 期: 2008年5月27日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void LCD_Display_a_Number_FUN(INT8U StartAddress_INT8U,INT8U Number_INT8U)
{
      if(Number_INT8U>99)
	  {
		   LCD_Display_a_Byte_FUN(StartAddress_INT8U,Number_INT8U/100+0x30);
           LCD_Send_Command_Or_Data_FUN(LCD_WRITE_DATA_MODE,Number_INT8U%100/10+0x30);
           LCD_Send_Command_Or_Data_FUN(LCD_WRITE_DATA_MODE,Number_INT8U%10+0x30);
	  }else if(Number_INT8U<100&&Number_INT8U>9)
			{
				  LCD_Display_a_Byte_FUN(StartAddress_INT8U,Number_INT8U%100/10+0x30);
                  LCD_Send_Command_Or_Data_FUN(LCD_WRITE_DATA_MODE,Number_INT8U%10+0x30);
			}else
				{
                     LCD_Display_a_Byte_FUN(StartAddress_INT8U,Number_INT8U%10+0x30);
				}
}

/*********************************************************************************************************
** 函数名称: LCD_Send_Command_Or_Data_FUN
** 功能描述: LCD显示一个字符
** 输 入: WriteMode_INT8U:写模式 SendData_INT8U:发送数据
**			
** 输 出:无
** 全局变量: Bitmap_INT8U
** 调用模块: 
**------------------------------------------------------------------------------------------------------
** 作 者: 梁浩荡
** 日 期: 2008年5月27日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

void LCD_Send_Command_Or_Data_FUN(INT8U WriteMode_INT8U,INT8U SendData_INT8U)
{
     INT8U i,sendbyte;
     IO0DIR |= LCD_CS_PIN | LCD_SCLK_PIN | LCD_SID_PIN;
	 	 
     IO0SET = LCD_CS_PIN;
	 IO0CLR = LCD_SCLK_PIN;
	 if(WriteMode_INT8U==1)
	 {
	     sendbyte=0xF8;     //11111 rw=0=w rs=0=instructionbuffer 0
	 }else{
	           sendbyte=0xFA;  //11111 rw=0=w rs=1=databuffer 0
	      }
	 for(i=0;i<8;i++)
	 {
	     if( (sendbyte&Bitmap_INT8U[7-i])!=0 ) IO0SET = LCD_SID_PIN;
        		else IO0CLR = LCD_SID_PIN;
	     DelayNuS(100);
		 IO0SET = LCD_SCLK_PIN;
		 DelayNuS(100);
		 IO0CLR = LCD_SCLK_PIN;
	 }

	 sendbyte=0xF0&SendData_INT8U;  //HSB 0000
	 for(i=0;i<8;i++)
	 {
	     if( (sendbyte&Bitmap_INT8U[7-i])!=0 ) IO0SET = LCD_SID_PIN;
        		else IO0CLR = LCD_SID_PIN;
		 DelayNuS(100);
		 IO0SET = LCD_SCLK_PIN;
		 DelayNuS(100);
		 IO0CLR = LCD_SCLK_PIN;
	 }

	 sendbyte=0x0F&SendData_INT8U;   //0000 LSB
	 sendbyte<<=4;              	//LSB 0000
	 for(i=0;i<8;i++)
	 {
	     if( (sendbyte&Bitmap_INT8U[7-i])!=0 ) IO0SET = LCD_SID_PIN;
        		else IO0CLR = LCD_SID_PIN;
		 DelayNuS(100);
		 IO0SET = LCD_SCLK_PIN;
		 DelayNuS(100);
		 IO0CLR = LCD_SCLK_PIN;
	 }

	 IO0CLR = LCD_CS_PIN;
}

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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