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

📄 bsp.c

📁 ucos+ucgui+proteus仿真lpc2138.非常强大的例子。用keil for arm 编译。值得下载。强烈推荐。
💻 C
📖 第 1 页 / 共 3 页
字号:
*********************************************************************************************************
* Function: LCD_Delay()
* Description:return the status of LCD controller.
*             Accroding to the cpu clock,the delay value need to be changed.
*********************************************************************************************************
*/
void LCD_Delay(CPU_INT16U delay)
{
   volatile CPU_INT16U i;
   
   for(i = 0; i < delay; i++);
}
/*
*********************************************************************************************************
* Function: LCD_GET_STATUS()
* Description:return the status of LCD controller
*关于T6963C的状态位说明:
*                                             STA0是否可以继续执行命令:1可以0不可以;
*                                             STA1是否可以读写数据:        1可以0不可以;
*
*                                             STA2是否可以自动读数据:1可以0不可以;
*                                             STA3是否可以自动写数据:1可以0不可以;
*                                             
*                                            STA4没有使用
*
*                                            STA5控制器操作状态:1使能0禁止
*                                            STA6屏幕读和屏幕复制命令执行结果:1错误0无错
*                                            STA7光标闪烁状态;1闪烁0没有
*********************************************************************************************************
*/
CPU_INT08U LCD_Get_Status(void)
{
  CPU_INT32U T6963C_STATUS;
  IO0DIR  = 0x700;  
  IO0SET |= GPIO0_LCD_CD;/* CD=1                     */
  LCD_Delay(1);  
  IO0CLR |= GPIO0_LCD_RD;/* RD=0                    */
  LCD_Delay(1);
  T6963C_STATUS = IO0PIN;/* 读数据                 */
  IO0SET |= GPIO0_LCD_RD;/* RD=1                    */ 
  IO0DIR  = 0x7ff;  
  return (CPU_INT08U)(T6963C_STATUS);/* 返回状态字节     */
}
/*
*********************************************************************************************************
* Function: LCD_Command_Data_OK()
* Description:return the status of LCD controller
*关于T6963C的状态位说明:
*                                             STA2是否可以自动读数据:1可以0不可以;
*********************************************************************************************************
*/
static void LCD_Command_Data_OK(void)
{
  while((LCD_Get_Status()&0x03)!=0x03);
}

/*
*********************************************************************************************************
* Function: LCD_WRITE_COMMAND()
* Description:WRITE A COMMAND TO THE LCD controller
*********************************************************************************************************
*/
 void LCD_Write_Command(CPU_INT08U cmd) 
 {
   IO0SET|=GPIO0_LCD_CD;/*CD=1*/
   LCD_Delay(1);
   IO0CLR|=GPIO0_LCD_DATA;/*将数据端口清零*/    
   IO0SET|=((CPU_INT32U)(cmd));/*数据出现在端口*/
   IO0CLR|=GPIO0_LCD_WR;/*WR=0*/   
   LCD_Delay(1);
   IO0SET|=GPIO0_LCD_WR;/*WR=1*/   
 }
/*
********************************************************************************************************
**函数名称:LCD_WriteCommand1()
**函数功能:写双参数命令子程序。会先判断LCM状态字。
**入口参数:command  	要写入LCM的命令字
**说    明:发送命令字
********************************************************************************************************
*/
static void  LCD_WriteCommand1(CPU_INT08U cmd)
{  
   LCD_Command_Data_OK();
   LCD_Write_Command(cmd);              // 发送命令字
}

/*
********************************************************************************************************
**函数名称:LCD_WriteCommand3()
**函数功能:写双参数命令子程序。会先判断LCM状态字。
**入口参数:command  	要写入LCM的命令字
*                     dat1		参数1
*                     dat2		参数2
**说    明:先发送两字节参数据数据,再发送命令字
********************************************************************************************************
*/
static void  LCD_WriteCommand3(CPU_INT08U cmd, CPU_INT08U dat1, CPU_INT08U dat2)
{  
   LCD_NormalWrite_Data(dat1);			// 发送数据1   
   LCD_NormalWrite_Data(dat2);			// 发送数据2    
   LCD_WriteCommand1(cmd);		        // 发送命令字
}
/*
*********************************************************************************************************
* Function: LCD_WRITE_DATA()
* Description:WRITE A DATA TO THE  LCD controller
*********************************************************************************************************
*/
void LCD_Write_Data(CPU_INT08U data)
{
  IO0CLR|=GPIO0_LCD_CD;/*CD=0*/
  LCD_Delay(1);
  IO0CLR|=GPIO0_LCD_DATA;/*将数据端口清零*/
  IO0SET|=GPIO0_LCD_DATA&(((CPU_INT32U)(data)));/*数据出现在端口*/
  IO0CLR|=GPIO0_LCD_WR;/*WR=0*/  
  LCD_Delay(1);
  IO0SET|=GPIO0_LCD_WR;/*WR=1*/ 
  IO0SET|=GPIO0_LCD_CD;/*CD=1*/
}
/*
*********************************************************************************************************
* Function: LCD_NormalWrite_Data()
* Description:WRITE A DATA TO THE  LCD controller normally
*********************************************************************************************************
*/
static void LCD_NormalWrite_Data(CPU_INT08U data)
{
  LCD_Command_Data_OK();
  LCD_Write_Data(data);
}

/*
*********************************************************************************************************
* Function: LCD_Read_Data()
* Description:READ A DATA TO THE  LCD controller
*********************************************************************************************************
*/
CPU_INT08U LCD_Read_Data(void)
{
  CPU_INT32U data;
  IO0DIR = 0x700;
  IO0CLR|=GPIO0_LCD_CD;/*CD=0*/
  LCD_Delay(1);  
  IO0CLR|=GPIO0_LCD_RD;/*RD=0*/  
  LCD_Delay(1);
  data=IO0PIN;
  IO0SET|=GPIO0_LCD_RD;/*RD=1*/ 
  IO0SET|=GPIO0_LCD_CD;/*CD=1*/
  IO0DIR = 0x7ff;
  return (CPU_INT08U)(data);
}

/*
*********************************************************************************************************
* Function: LCD_Initialize_Controller()
* Description:WRITE A DATA TO THE  LCD controller
*********************************************************************************************************
*/
void LCD_Initialize_Controller(void)
{
 
 /*设置文本显示起始位置*/
 LCD_WriteCommand3(LCD_TXT_STP, 0x00, 0x00);
 
 /*设置文本显示宽度*/
 LCD_WriteCommand3(LCD_TXT_WID, 30, 0x00);
 
 /*设置图形显示起始位置*/
 LCD_WriteCommand3(LCD_GRH_STP, 0x00, 0x10); 
 
 /*设置图形显示宽度*/
 LCD_WriteCommand3(LCD_GRH_WID, 30, 0x00); 
 
 /*光标形状设置*/
 LCD_WriteCommand1(LCD_CUR_SHP|CUR_SHP_8_LINE);
 
 /*设置模式:或显示,CGROM*/ 
 LCD_WriteCommand1(LCD_MOD_SET|MODE_OR|MODE_CGROM);
 
 /*设置显示开关控制:文字显示,显示图形*/
 LCD_WriteCommand1(LCD_DIS_SW|DIS_SW_GRAPHIC_ON|DIS_SW_CRUSOR_ON|DIS_SW_BLINK_ON|DIS_SW_TEXT_ON); 
}

/*
*********************************************************************************************************
*                                             LED_Init()
*
* Description : Setup the I/O for the LEDs.
*
* Argument(s) : none.
*
* Return(s)   : none.
*********************************************************************************************************
*/

static void  LED_Init (void)
{
    LED_Off(0);                                                 /* Turn OFF all the LEDs                                    */
}


/*
*********************************************************************************************************
*                                             LED_On()
*
* Description : Turn ON any or all the LEDs on the board.
*
* Argument(s) : led     The ID of the LED to control:
*
*                       0    turn ON all LEDs on the board
*                       1    turn ON LCD backlight
*
* Return(s)   : none.
*********************************************************************************************************
*/

void  LED_On (CPU_INT08U led)
{
  switch (led) 
    {
        case 0:
             IO1CLR = GPIO1_LEDS;
             break;

        case 1:
             IO1CLR = GPIO1_LED1;
             break;

        case 2:
             IO1CLR = GPIO1_LED2;
             break;

        case 3:
             IO1CLR = GPIO1_LED3;
             break;

        case 4:
             IO1CLR = GPIO1_LED4;
             break;

        case 5:
             IO1CLR = GPIO1_LED5;
             break;

        case 6:
             IO1CLR = GPIO1_LED6;
             break;

        case 7:
             IO1CLR = GPIO1_LED7;
             break;

        case 8:
             IO1CLR = GPIO1_LED8;
             break;

        default:
             break;
    } 
}


/*
*********************************************************************************************************
*                                             LED_Off()
*
* Description : Turn OFF any or all the LEDs on the board.
*
* Argument(s) : led     The ID of the LED to control:
*
*                       0    turn OFF all LEDs on the board
*                       1    turn OFF LCD backlight
*

⌨️ 快捷键说明

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