导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→使用的是TIANMA公司的TM128×32AD P1-1的图[龙胜]

 *第27532篇: 使用的是TIANMA公司的TM128×32AD P1-1的图形液晶显示器,我这样写驱动可以吗?请各位大侠指教一下哦!

  
楼 主:龙胜 2004年11月14日07:42
 使用的是TIANMA公司的TM128×32AD P1-1的图形液晶显示器,我这样写驱动可以吗?请各位大侠指教一下哦!
/*************************************************************
文件明.Lcd.c
                 实现液晶的驱动,提供显示的基本功能 

  使用的是TIANMA公司的TM128×32AD P1-1的图形液晶显示器
  驱动器为HD61202U

 **************************************************************/
//**********包含头文件***************
#include  <PublicHead.h>  
#include   <Lcd.h>  
//*************端口定义**********************

sbit LCD12832_DI = P3 ^ 4;  //数据或命令危  
//为1表示要显示的数据,为0表示控制数据
sbit LCD12832_RW = P3 ^ 3;  //读写
//为1表示读出,为0表示写入
sbit LCD12832_E = P3 ^ 2;     //使能端,wei0 you xiao
sbit LCD12832_CS = P3 ^ 7;  //片选,wei 1 you xiao//一下订正同此
#define LCD12832_DATA P2  //数据口

void ClearScreen( UNCHAR, UNCHAR, UNCHAR );     //清屏操作
UNCHAR StatusRead();      //读液晶当前状态
void SetX( UNCHAR );      //设置x轴位置,以字符行8个点管理
void SetY( UNCHAR );      //设置y轴位置
void SetStartLine( UNCHAR );      //设置StartLine轴位置
void WriteDisplayData( UNCHAR );  //向RAM写要求显示的数据
UNCHAR ReadDisplayData( UNCHAR );//从RAM读出显示的数据
void SetDisplayOn( void );        //设置显示开
void SetDisplayOff( void );     //设置显示关

/**************************************/

//******设置内部RAM地址指令********
//************************************************
//******设置x轴位置
void SetX( x )                //设置x轴位置,要求W/R=0,D/I=0以字符行管理
UNCHAR x;
{
  UNCHAR h;
  h = StatusRead();         //检测状态
  while ( h & 0x80 );       //此时的wr=1,di=0
  LCD12832_RW = 0;            //此时的wr=0,di=0
  LCD12832_DATA = ( x * 8 ) & 0x0BF;    //写入参数,乘8==>  这样便于以字符行管理
  LCD12832_CS = 1;    //片选,wei 0 you xiao
  LCD12832_E = 0;     //使能端,wei0 you xiao
}
//************************************************
//******设置y轴位置
void SetY( y )                  //设置y轴位置,要求W/R=0,D/I=0
UNCHAR y;
{
  UNCHAR h;
  h = StatusRead();         //检测状态
  while ( h & 0x80 );
  LCD12832_RW = 0;            //此时的wr=0,di=0
  LCD12832_DATA = y & 0x7F;       //写入参数        //写入参数
  LCD12832_CS = 1;    //片选,wei 0 you xiao
  LCD12832_E = 0;     //使能端,wei0 you xiao
}
//************************************************
//******设置开始行
void SetStartLine( StartLine )   //设置StartLine轴位置,要求W/R=0,D/I=0
UNCHAR StartLine;
{
  UNCHAR h;
  h = StatusRead();         //检测状态
  while ( h & 0x80 );
  LCD12832_RW = 0;            //此时的wr=0,di=0
  LCD12832_DATA = StartLine & 0x0FF;  //写入参数  //写入参数
  LCD12832_CS = 1;    //片选,wei 0 you xiao
  LCD12832_E = 0;     //使能端,wei0 you xiao
}
//******设置内部RAM数据读写指令********
//************************************************
//******写液晶,一次一个字节
void WriteDisplayData( W_DisplayData )  //向RAM写要求显示的数据
UNCHAR W_DisplayData;
{
  UNCHAR h;      
  h = StatusRead();         //检测状态
  while ( h & 0x80 );   //此时的wr=0,di=0
  LCD12832_RW = 0;
  LCD12832_DI = 1;        //此时的wr=0,di=1
  LCD12832_DATA = W_DisplayData;  //写入参数
  LCD12832_CS = 1;    //片选,wei 0 you xiao
  LCD12832_E = 0;     //使能端,wei0 you xiao
}
//************************************************
//******读液晶,一次一个字节
UNCHAR ReadDisplayData( R_RAM_Address ) //从RAM读出显示的数据,要求W/R=1,D/I=1
UNCHAR R_RAM_Address;
{
  UNCHAR RAM_data, h;
  h = StatusRead();         //检测状态
  while ( h & 0x80 );   //此时的wr=0,di=0
  LCD12832_RW = 1;
  LCD12832_DI = 1;        //此时的wr=0,di=1
  RAM_data = LCD12832_DATA;
  LCD12832_CS = 1;    //片选,wei 0 you xiao
  LCD12832_E = 0;     //使能端,wei0 you xiao
  return RAM_data;
}
//******其他类型指令********
//************************************************
//******读液晶当前状态
UNCHAR StatusRead()        //读液晶当前状
{
  UNCHAR statuOfYj;
  LCD12832_CS = 0;    //片选,wei 0 you xiao
  LCD12832_E = 1;     //使能端,we1 you xiao
  LCD12832_RW = 1;  //读写
  //为1表示读出,为0表示写入
  LCD12832_DI = 0;  //数据或命令危  
  //为1表示要显示的数据,为0表示控制数据
  LCD12832_DATA = 0xff;     //数据口,读前置全1
  statuOfYj = LCD12832_DATA;  //读出液晶状态
  return statuOfYj;       //返回
}
//************************************************
//******设置关屏幕
void SetDisplayOff( void )
{
  UNCHAR h;
  h = StatusRead();     //检测状态
  while ( h & 0x80 );
  LCD12832_DATA = 0x3E; //写入参数
  LCD12832_CS = 1;    //片选,wei 0 you xiao
  LCD12832_E = 0;     //使能端,wei0 you xiao
}
//************************************************
//******设置开屏幕
void SetDisplayOn( void )
{
  UNCHAR h;
  h = StatusRead();     //检测状态
  while ( h & 0x80 );
  WriteDisplayData( 0x3F ); //写入参数
  LCD12832_CS = 1;    //片选,wei 0 you xiao
  LCD12832_E = 0;     //使能端,wei0 you xiao
}
//************************************************
//******清屏
void ClearScreen( x, y, no )     //清屏操
UNCHAR x, y, no;
{
  UNCHAR addressX, addressY;
  UNINT i;
  addressX = x;
  addressY = y;
  i = no;      
  //*暂时关闭显示*/
  SetDisplayOff();       //设置显示开/关 ---即关闭一切显示
  //设置开始清除的首地址
  SetX( addressX ); //设置x
  SetY( addressY ); //设置y
  for ( i = 0; i   < 0x0200; i++ )    //0x0200=128*32/8
  {
    WriteDisplayData( 0x00 );       //*写入一个数据或命令参数,每小次清除8个点点
  }
  //*开启显示*/
  SetDisplayOn();   //设置显示开/关
}

//**********************************
//           汉字或ASCII码的显示   *
//**********************************

//****显示一个汉字8×16,ch为编号
void putChar16( UNCHAR ch, UNCHAR x, UNCHAR y )//ch表示字符在 字库里面的编号,
x,y为他的地?
{
  UNINT offInHZK;
  UNCHAR i = 0;
  //*计算汉字在汉字库的位置*/
  offInHZK = ( ch - 1 ) * 32;
  offInHZK = offInHZK + 0xd000;     //0xd000
  while ( i   < 16 )
  {
    ch = CBYTE[offInHZK++];
    SetX( x );      //设置x轴位置
    SetY( y );      //设置y轴位置
    WriteDisplayData( ch );  //向RAM写要求显示的数据
    i++;
  }
}


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:关于Protel   DXP  的汉化

[下一篇主题]:大家进来看看