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

📄 lcm320240.h

📁 320240
💻 H
📖 第 1 页 / 共 2 页
字号:
        DelayMs(150);                // 调延时子程序 
    } 
} 
//============================== 西文显示演示程序 ============================== 
// 仅仅用于文本方式下的西文字符串显示,本函数只写入第1显示区 

void TextDisp( uchar Ox,uchar Oy, uchar code *ptr ) { 

    uchar TexLength=0,ii; 
    uint  iTemp; 

    while(ptr[TexLength]>0x1f) {TexLength++;};   // 获取字串长度 
    //判断是否为内部的字符码 
    WriteCommand(CsrForm);        // 光标形状设置,代码0x5d 
    WriteData(0x07);                // 设置光标水平点为CSX=8 
    WriteData(0x07);                // 光标为块状形式,垂直点为CSY=8 

    WriteCommand(Ovlay);            // 显示合成方式设置.代码0x5b 
    WriteData(0x04);                // 设置参数:显示1区为文本属性,二重or合成 

    WriteCommand( DispOn );            // 写入指令DISP ON/OFF代码,后续参数: 
//  WriteData( 0x56 );                // 01 01 01 10显示1~4区开显示,光标闪烁显示 
    WriteData( 0x54 );    // 显示 1~4 区开显示,光标关显示,且不闪烁 
  
    iTemp = (uint)Oy * paraP9 + Ox;                // 光标位置到实际ram地址换算 
     
    WriteCommand( CsrDirR );                    // 自动右移光标指向      
    WriteCommand( CsrW );                        // 制定光标位置 
    WriteData( (uchar)(iTemp &0xff) );            // 设置光标地址CSR 
    WriteData( (uchar)(iTemp /256 ) );    // 加入显示三区起始地址SAD2H 

    WriteCommand( mWrite );                        // 当前位置写入数据指令 

    for(ii=0;ii < TexLength;ii++) { 

        WriteData( ptr[ii] );                    // 写入显示字符代码 
    } 
    DelayMs(350); 
} 

//################函数5.延时子程序#########################################
//延时子程序1
//短暂延时参数tt
void Delay( uint tt ) {

 while( tt-- );
}
//################函数6.长延时程序#########################################
// 延时程序2
// 参数:count
// 延时: 1MS *COUNT
   void DelayMs(uint count)
   {
    uint i,j;

    for(i=0;i<count;i++)
       for(j=0;j<120;j++)
              ;
   }

//################函数8. 清显示 32K RAM区(清屏)子程序######################
// 清显示 32K RAM区(清屏)子程序

void LcmClear( void ) {

uint i1=32768;//32K大小RAM清零

 WriteCommand( CsrDirR );    // 光标移动方向定义:自动右移
 WriteCommand( CsrW );    // 光标Locate,定位
 WriteData( 0 );      // 写入参数CSRL设置参数光标指针低8位
 WriteData( 0 );      // 写入参数CSRH设置参数光标指针高8位
 WriteCommand( mWrite );    // 数据写入指令,代码0x42
 while(i1--) {

  WriteData( 0x0 ); // 写入数据0
 }
}
//################函数9.光标位定位###########################################
// 光标位定位,用于在1,2区图形方式下时调用
// 输入参数:x...水平方向字节单位坐标,即可以以半个汉字宽度设定水平坐标(0--39)
//           y...垂直方向以行线定位的坐标,可以定位到点单位.(0--29)
//           attribs=1则指向2区     BasePart2为2区显示缓存的高位   2区显示缓存的低位为0
//           规定左上角约定坐标为( 0, 0 )


void Locatexy(uchar x,uchar y, uchar attribs) 
{
  uint temp;
  temp = (uint)y*paraP9+x;
  if(attribs==1)temp+=BasePart2;
  if(attribs==2)temp+=BasePart3;
  WriteCommand( CsrW );    // 光标Locate,定位
  WriteData( (uint)(temp & 0xff) ); // 写入参数CSRL设置参数光标指针低8位
  WriteData( (uint)(temp /256)); // 写入参数CSRH设置参数光标指针高8位
}
//################函数7.单个汉字写入子程序(图形方式)########################
// 汉字写入子程序(图形方式)。每次调用输出一个汉字
// 支持图形方式使用,完成汉字点阵码的输出。
// 携入参数: Ox,Oy....写入显示的左上角坐标,Ox是以字节单位,Oy以行扫描线单位
//           DotWidth为汉字点数选择   这里提供16点和24点两种选择
//           cnumber 为字码表中的位置即第几个字
//           att 为写入区位选择,为0选择第一区,为1选择第二区
//需要显示24点的汉字要在程序里建24点字库表

void PutCdotInGraph( uint Ox, uchar Oy,uchar Cnumber,uchar DotWidth,uchar att )
 {
 uint tempPtr,Optr;
 uchar tempCount1,tempCount2,nByte;
        
 Optr = (uint)Oy * paraP9 + Ox;//将Y轴地址转换为RAM的地址值
 nByte = DotWidth/8;          //计算有多少个字节
 WriteCommand( CsrDirD );      // 自动右移。
 tempPtr = (uint)Cnumber * DotWidth*nByte;//计算指针要偏移多少个字节
        
  if(att)Optr += BasePart2;
        
  for (tempCount1=0;tempCount1<nByte;tempCount1++) {

  WriteCommand( CsrW );      // 光标定位指令
  WriteData( (uchar)(Optr &0xff) );  // 设置光标地址CSR
  WriteData( (uchar)(Optr /256 ));
  WriteCommand( mWrite );      // ram写指令

  switch(DotWidth){
   case 8 : for(tempCount2=0;tempCount2<DotWidth;tempCount2++){
   	         WriteData(nAsciiDot[tempPtr]);
   	         tempPtr++;
   	        }break;

   case 16: for(tempCount2=0;tempCount2<DotWidth;tempCount2++) {  
      WriteData( Cdotlib[Cnumber].Msk[tempCount2*2+tempCount1] );  // 写入数据
      }//先写入左半字 ,后写的右半字
      break;
   case 24: for(tempCount2=0;tempCount2<DotWidth;tempCount2++) {
      WriteData( Cdot24lib[tempPtr] );  // 写入数据
      tempPtr += nByte;
      }//将一个字分成3个左中右三个部分,分三次写完
      break;
  }
  tempPtr = Cnumber * DotWidth*nByte + tempCount1 + 1;
  Optr++;
 }
}
//#######################函数11。绘点子程序##########################################################################
//  绘点子程序,携入参数X坐标的最高位决定写或擦点
//  入口参数:(px,py)为点坐标 px可以超过256
//              参数 attr  attr=1为绘制图形 attr=0为擦除图形

void Point(uint Px, uchar Py, uchar attr,uchar qu ) {

uint tempPtr;
uchar tempD,tempP;

 tempPtr = (uint)Py * paraP9 + Px/8; // 去除最高位(显示属性)

  if(qu)tempPtr += BasePart2; // 如果需要就指向第二区,加上第二区首地址

  WriteCommand( CsrDirR );      // CSRDIR 代码(光标自动下移)
  WriteCommand( CsrW );       // 设置光标地址
  WriteData( (uchar)(tempPtr & 0xff));
  WriteData( (uchar)(tempPtr /256));
  WriteCommand( mRead );       // 读显示ram指令
  tempD = ReadDataLcm();       // 读取当前显示数据
  tempP = 1<<(uchar)(7-Px & 0x0007);
// 根据预定属性决定写点或擦除
  if( attr )tempD |= tempP; // 画点
 else tempD &= ~tempP;    // 消点

WriteCommand( CsrW );      // 重新设置光标地址
WriteData( (uchar)(tempPtr & 0xff) );
WriteData( (uchar)(tempPtr /256) );
WriteCommand( mWrite );      // 代码0x42,数据写入指令
WriteData( tempD );       // 写入合成数据

}

//##########################函数12。画线###################################################
//*画线。任意方向的斜线,直线数学方程 aX+bY=1
//入口参数:初始点(X0,Y0)  X0 Y0为初始点的点坐标   x0为整形可大于256
//          终点  (xt,yt)    Xt Yt为终点的点坐标   xt为整形可大于256
//          参数 att  att=1为绘制图形 att=0为擦除图形
//          参数 qu  qu=1为2区 qu=0为1区

void Linexy(uint x0,uchar y0,uint xt,uchar yt,uchar att,uchar qu)
{
 register uint t;
 int xerr=0,yerr=0,delta_x,delta_y,distance;
 int incx,incy;
 uint row,col;
 delta_x = xt-x0;       //计算坐标增量
 delta_y = yt-y0;
 col = x0;
 row = y0;
 if(delta_x>0) incx=1;      //设置单步方向
 else
    {
     if( delta_x==0 ) incx=0;    //垂直线
  else {incx=-1;delta_x=-delta_x;}
 }
 if(delta_y>0) incy=1;
 else
    {
     if( delta_y==0 ) incy=0;    //水平线
  else {incy=-1;delta_y=-delta_y;}
 }
 if( delta_x > delta_y ) distance=delta_x; //选取基本增量坐标轴
 else distance=delta_y;

 for( t=0;t <= distance+1; t++ )
 {           //画线输出
  Point((uint)col,row,att,qu);    //画点
  xerr += delta_x ;
  yerr += delta_y ;

  if( xerr > distance )
  {
   xerr-=distance;
   col+=incx;
  }
  if( yerr > distance )
  {
   yerr-=distance;
   row+=incy;
  }
 }
}
//#####################函数13。矩形绘制函数############################################################################
//矩形绘制函数
//入口参数:
// X0 Y0为左上角的点 (x0,y0)   为点的坐标   x0为整形可大于256
// WIDE HIGHT分别为宽度和高    WIDE为整形可大于256
// att为绘制或者擦除矩形  att=1为绘制图形
void Rectangle( uint X0, uchar Y0, uint wide,uchar hight,uchar att,uchar qu)
{
                uint ra0,ra1,ra2,ra3;
                uchar rb0,rb1,rb2,rb3;
                ra0=X0;
                rb0=Y0;
                ra1=X0+wide;
                rb1=Y0;
                ra2=X0;
                rb2=Y0+hight;
                ra3=X0+wide;
                rb3=Y0+hight;

                Linexy( ra0,rb0,ra1,rb1,att,qu);
  Linexy( ra0,rb0,ra2,rb2,att,qu);
  Linexy( ra2,rb2,ra3,rb3,att,qu);
  Linexy( ra1,rb1,ra3,rb3,att,qu);
}




⌨️ 快捷键说明

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