LPC2294-LCD调试例程
[ 2007-4-26 7:49:00 | By: CANopen ]
 
/* YM12864I整屏显示一幅128×64的图像,图像取模数据必须纵向取模、字节倒序,且图像数据必须以const标识;高速ARM核对低速LCD操作,读写前必须查询LCD设备状态寄存器Busy位,待Busy=0时方可继续读写,否则LCD将显示乱码。
***************************************************************************************************
** 模 块 名:Main.c
** 功能描述:驱动芯片KS0108或兼容芯
** 创建日期:  by:CANopen
** 修改日期:  by:
***************************************************************************************************
*/
#i nclude "Config.h"
#i nclude "LCD_Data.c"

/*************************************************
    模块级变量申明                
*************************************************/
//static void  LCD_SetX(int8u pageX);
//static void  LCD_SetY(int8u colY);
//static void  LCD_WriteCmd(int8u cmd);
//static void  LCD_WriteDat(int8u dat);
//
//static void  LCD_SetStartRow(int8u startRow);


/*************************************************
    子函数定义                 
*************************************************/
/*
***************************************************************************************************
*** 函 数 名:LCD_WriteCmd
*** 功能描述:写入命令字
*** 输入输出:
*** 创建日期:  by:CANopen
*** 修改日期:  by:
***************************************************************************************************
*/
static void LCD_WriteCmd(int8u lr,int8u cmd)
{
 if(LCDL == lr)   //;是否对左屏幕操作
  {
   while((LcdStatusAddr_L & 0x80));   // 查询Busy位
   LcdCmdAddr_L = cmd;
   }
 else
  {
   while((LcdStatusAddr_R & 0x80));   // 查询Busy位
   LcdCmdAddr_R = cmd;
   }  
 }

/*
***************************************************************************************************
*** 函 数 名:LCD_WriteDat
*** 功能描述:向DDRAM写入数据
*** 输入输出:
*** 创建日期:  by:CANopen
*** 修改日期:  by:
***************************************************************************************************
*/
static void LCD_WriteDat(int8u lr,int8u dat)
{
 if(LCDL == lr)   //;是否对左屏幕操作
  {
   while((LcdStatusAddr_L & 0x80));    // 查询Busy位
   LcdDatWriteAddr_L = dat;
   }
 else
  {
   while((LcdStatusAddr_R & 0x80));    // 查询Busy位
   
LcdDatWriteAddr_R = dat;
   }  
 }

/*******************************************************************************
*** 函 数 名: static void LCD_SetX(int8u pageX)
*** 功能描述: 设置页面地址,对应屏幕上的行地址
*** 全局变量: NO !
*** 输   入: pageX;
*** 输    出: NO !
*** 创 建 人:huangtiexiong     日期:2006-11-28
*** 修 改 人:         日期:2006-11-28
*** 函数说明:
******************************************************************************/
static void LCD_SetX(int8u lr,int8u pageX)
{
 pageX %= 8;
 LCD_WriteCmd(lr,pageX | 0xb8);
 }

/*
***************************************************************************************************
*** 函 数 名:LCD_SetY
*** 功能描述:设置列地址
*** 输入输出:
*** 创建日期:  by:CANopen
*** 修改日期:  by:
***************************************************************************************************
*/
static void LCD_SetY(int8u lr,int8u colY)
{
 colY %= 64;
 LCD_WriteCmd(lr,colY | 0x40);
 }

/*
***************************************************************************************************
*** 函 数 名:LCD_SetStartRow
*** 功能描述:设首行地址
*** 输入输出:
*** 创建日期:  by:CANopen
*** 修改日期:  by:
***************************************************************************************************
*/
static void LCD_SetStartRow(int8u lr,int8u startRow)
{
 LCD_WriteCmd(lr,startRow | 0xc0);
 }

/*
***************************************************************************************************
*** 函 数 名:LCD_Clear
*** 功能描述:整屏清零
*** 输入输出:
*** 创建日期:  by:CANopen
*** 修改日期:  by:
***************************************************************************************************
*/
extern void LCD_Clear(void)
{
 int8u i,j;
 for(i=0;i<8;i++)
 {
  LCD_SetX(0,i);     //设置页地址
  LCD_SetY(0,0);
  LCD_SetX(1,i);     //设置列地址
  LCD_SetY(1,0);
  for(j=0;j<64;j++)
  {
   LCD_WriteDat(0,0x00); //显示RAM清零
   LCD_WriteDat(1,0x00);
   }
  }
 }
/*
***************************************************************************************************
*** 函 数 名:LCD_BL_Set
*** 功能描述:打开/关闭背光backlight,由P1.23引脚接驱动电路设置
*** 输入输出:
*** 创建日期:  by:CANopen
*** 修改日期:  by:
***************************************************************************************************
*/
void LCD_BL_Set(int8u val)
{
 if(TRUE == val)
  IO1CLR = IO1CLR | (__1 << 23);
 else
  IO1SET = IO1SET | (__1 << 23);
}

/*
***************************************************************************************************
*** 函 数 名:Delay_ms
*** 功能描述:延时函数,单位:ms
*** 输入输出:
*** 创建日期:2007-4-24 5:18  by:CANopen
*** 修改日期:2007-4-24 5:18  by:
***************************************************************************************************
*/
void Delay_ms(int32u ms)
{
 int32u tmp = ( Fcclk / 1000 ) * ms / 2 ;

 while(tmp--);  //本语句编译后为两条汇编指令
}

/*
***************************************************************************************************
*** 函 数 名:LCD_Init
*** 功能描述:LCD YM12864I初始化
*** 输入输出:
*** 创建日期:  by:CANopen
*** 修改日期:  by:
***************************************************************************************************
*/
extern void  LCD_Init(void)
{
 LCD_WriteCmd(0,0x3F);  // 开显示,指令码:0x3f
 LCD_WriteCmd(1,0x3F);
 Delay_ms(100);
 while(LcdStatusAddr_L & 0x20) // 是否打开显示
 {
  LCD_WriteCmd(0,0x3F);
  }
 while(LcdStatusAddr_R & 0x20)
 {
  LCD_WriteCmd(1,0x3F);
  }
 
 LCD_BL_Set(1);   // 1:打开背光
 LCD_Clear();    // 清屏
   LCD_SetStartRow(0,0x00); // 设置首行
   LCD_SetStartRow(1,0x00); // 设置首行
 }

/*
***************************************************************************************************
*** 函 数 名:LCD_DisplayPic
*** 功能描述:整屏显示一副图像128×64
*** 输入输出:
*** 创建日期:  by:CANopen
*** 修改日期:  by:
***************************************************************************************************
*/
extern void LCD_DisplayPic(const int8u *pic_dat)
{
 int8u i,j;
 //int32u cnt=0;
 for(j=0;j<8;j++)
 {
  LCD_SetX(0,j);
    LCD_SetY(0,0);
  for(i=0;i<64;i++)
  {
   LCD_WriteDat(0,pic_dat[j*128+i]); 
   //cnt = cnt + 1; 
   }
  LCD_SetX(1,j);
    LCD_SetY(1,0);
  for(i=0;i<64;i++)
  {
   LCD_WriteDat(1,pic_dat[j*128+64+i]); // 64+i:是因为图像数据取模时确定的
   //cnt = cnt + 1;
   }
  }
 }

/*
***************************************************************************************************
*** 函 数 名:Main
*** 功能描述:应用程序入口函数
*** 输入输出:
*** 创建日期:  by:
*** 修改日期:  by:
***************************************************************************************************
*/
int Main(void)
{
 int8u row = 0;
 TargetInit();
 LCD_Init();
 /*--------------------------------
  应用程序代码
 --------------------------------*/
 LCD_DisplayPic(pic);
 while(1)
 {
  LCD_SetStartRow(0,row);
  LCD_SetStartRow(1,row++);
  Delay_ms(100);
  if(row == 0x40)
   row = 0;
  }
 return 0; 
 }

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

 
发表评论:

时 间 记 忆
最 新 评 论

专 题 分 类
最 新 日 志
最 新 留 言
搜 索
用 户 登 录
友 情 连 接
博 客 信 息


Powered by Oblog.