📄 1335c51.c.bak
字号:
WriteCommand( Scroll ); //设定显示区域起始地址
for (i=0;i<10;i++) {
WriteData( ParaScrTableA[i] );
}
WriteCommand( HdotScr ); // 写入点位移指令代码
WriteData( 0 ); // 写入P1参数
WriteCommand( Ovlay ); // 显示合成方式设置
WriteData( 0x08 ); // 0000 0100 显示一区文本,二区图形属性,二重"或"合成
WriteCommand( DispOn ); // 写入指令代码
WriteData( 0x54 ); // 显示 1~4 区开显示,光标关显示
LcmClear();
BuildCgram(0,15); //
}
#if 0
/*============================================
建立 cgram,将显示字符送入cgram中
入口参数约定:Base.... 起始
=============================================*/
void BuildCgram( uchar Base, uchar EndlCode )
{
uchar iCgram,ii,ij;
WriteCommand( CgramAdr ); // CGRAMADR 代码
WriteData( 0 ); // 设置SAG=07000H
WriteData( 0x70 ); // 汉字模在cgram中的编码0x70~0x73
WriteCommand( CsrW ); // CSRW 代码,光标指针设置
WriteData( 0 ); // 设置CSR=07400H(字符代码=80H)
WriteData( 0x74 ); // 汉字模在cgram中的编码0x70~0x73
WriteCommand( CsrDirR ); // CSRDIR 代码
WriteCommand( mWrite ); // 代码0x42,数据写入指令
for (ii=0;ii<EndlCode;ii++)
{
for (ij=0;ij<2;ij++)
{
for (iCgram=0;iCgram<32;iCgram+=2)
WriteData( Cdotlib[(Base+ii)*32+ij+iCgram] ); // 将制定的数据块写入 cgram
}
}
}
#endif
/*============================================================================
汉字写入子程序(文本方式)
在文本方式下显示汉字, 首先要建立汉字Cgram, 要定义汉字代码.
在文本方式下写汉字需要写入4 个代码以组成一个汉字
每8字节组成一个点阵Ascii小区,4个小区组合成一个汉字所以需要4个代码
============================================================================*/
void PutCdotInAlpha( uchar Ox, uchar Oy, uchar Cnumber )
{
uint tempPtr;
uchar tempCount;
tempPtr = (uint)Oy * paraP9 + Ox;
WriteCommand( CsrDirD ); // CSRDIR 代码(下移)
for(tempCount=0;tempCount<2;tempCount++)
{
WriteCommand( CsrW ); // CSRW 代码,光标指针设置
WriteData( (uchar)(tempPtr &0xff) ); // 设置光标地址CSR
WriteData( tempPtr /256 + BasePart1 );
WriteCommand( mWrite ); // 代码0x42,数据写入指令
WriteData( Cnumber++ ); // 写入汉字代码
WriteData( Cnumber++ ); // 写入汉字代码
tempPtr++; // 修正光标地址
}
}
/*====================================================
; 绘点子程序,携入参数attr决定写或擦点
====================================================*/
void Point(uint Px, uchar Py, uchar attr )
{
uint tempPtr;
uchar tempD,tempP;
tempPtr = (uint)Py * paraP9 + (Px / 8); // 计算地址
WriteCommand( CsrDirD ); // CSRDIR 代码(光标自动下移)
WriteCommand( CsrW ); // 设置光标地址
WriteData( (uchar)(tempPtr & 0xff) );
WriteData( (uchar)(tempPtr /256 +BasePart2) );
WriteCommand( mRead ); // 读显示ram指令
tempD = ReadDataLcm(); // 读取当前显示数据
//tempP = 1<<(uchar)(7-Px & 0x0007);
tempP = Px - ((Px / 8) * 8);
tempP = (0x80 >> tempP);
// 根据预定属性决定写点或擦除
if( attr )
{
tempD |= tempP; // 画点
}
else
{
tempD &= ~tempP; // 消点
}
WriteCommand( CsrW ); // 重新设置光标地址
WriteData( (uchar)(tempPtr & 0xff) );
WriteData( (uchar)(tempPtr /256+BasePart2) );
WriteCommand( mWrite ); // 代码0x42,数据写入指令
WriteData( tempD ); // 写入合成数据
}
/*======================== 清显示 32K RAM区(清屏)子程序 ======================*/
void LcmClear( void )
{
uint i1=32768;
WriteCommand( CsrDirR ); // 光标移动方向定义:自动右移
WriteCommand( CsrW ); // 光标Locate,定位
WriteData( 0 ); // 写入参数CSRL设置参数光标指针低8位
WriteData( 0 ); // 写入参数CSRH设置参数光标指针高8位
WriteCommand( mWrite ); // 数据写入指令,代码0x42
while(i1--)
{
WriteData( 0x0 ); // 写入数据0
}
}
#if 0
/*======================== 清显示 图形 RAM区(清屏)子程序 ======================*/
void LcmClear_G( void )
{
uint i1=0x3400;
WriteCommand( CsrDirR ); // 光标移动方向定义:自动右移
WriteCommand( CsrW ); // 光标Locate,定位
WriteData( 0xff ); // 写入参数CSRL设置参数光标指针低8位
WriteData( 0x3f ); // 写入参数CSRH设置参数光标指针高8位
WriteCommand( mWrite ); // 数据写入指令,代码0x42
while(i1--)
{
WriteData( 0x0 ); // 写入数据0
}
}
/*============================================================================
光标位定位,用于在1区图形方式下。
输入参数约定: x...水平方向字节单位坐标,即可以以半个汉字宽度设定水平坐标。
y...垂直方向以行线定位的坐标,可以定位到点单位。
左上角约定坐标为( 0, 0 )
============================================================================*/
void Locatexy(uchar x,uchar y, uchar attribs)
{
uint temp;
temp = (uint)y*paraP9+x;
if(attribs)temp += BasePart2*256; // 如果需要就指向第二区,加上第二区首地址
WriteCommand( CsrW ); // 光标Locate,定位
WriteData( (uchar)(temp & 0xff) ); // 写入参数CSRL设置参数光标指针低8位
WriteData( (uchar)(temp /256 ) ); // 写入参数CSRH设置参数光标指针高8位
}
#endif
#if 0
/************************************************/
/*画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
/************************************************/
void circle(uint Ox,uchar Oy,uchar Rx,uchar attr)
{
uint xx,rr,xt,yt,rs,col,row;
yt=Rx;
rr=Rx*Rx+1; //补偿 1 修正方形
rs=(yt+(yt>>1))>>1; //(*0.75)分开1/8圆弧来画
for (xt=0;xt<=rs;xt++)
{
xx=xt*xt;
while ((yt*yt)>(rr-xx))yt--;
col=Ox+xt; //第一象限
row=Oy-yt;
Point(col,row,attr);
col=Ox-xt; //第二象限
Point(col,row,attr);
row=Oy+yt; //第三象限
Point(col,row,attr);
col=Ox+xt; //第四象限
Point(col,row,attr);
/***************45度镜象画另一半***************/
col=Ox+yt; //第一象限
row=Oy-xt;
Point(col,row,attr);
col=Ox-yt; //第二象限
Point(col,row,attr);
row=Oy+xt; //第三象限
Point(col,row,attr);
col=Ox+yt; //第四象限
Point(col,row,attr);
}
}
#endif
//显示BMP图片
void BmpDisp( uint Ox, uchar Oy, uchar width, uchar height, uchar code *pbmp )
{
uint Optr;
uchar tempCount1,tempCount2;
Optr = (uint)Oy * paraP9 + Ox;
WriteCommand( CsrDirR ); // 自动右移。
for (tempCount1=0;tempCount1<height;tempCount1++)
{
WriteCommand( CsrW ); // 光标定位指令
WriteData( (uchar)(Optr &0xff) ); // 设置光标地址CSR
WriteData( Optr /256 +BasePart2 );
WriteCommand( mWrite ); // ram写指令
for(tempCount2=0;tempCount2<width/8;tempCount2++)
{
WriteData(pbmp[tempCount1*20+tempCount2]); // 写入数据
}
Optr+=paraP9;
}
}
/*==============================================================================
; 汉字写入子程序(图形方式)。每次调用输出一个汉字
; 支持图形方式使用,完成汉字点阵码的输出。
; 携入参数: Ox,Oy....写入显示的左上角坐标,Ox是以字节单位,Oy以行扫描线单位
Ptr......汉字码,库内的排列编码,大型程序时请改用unsigned int类型
; 无返回数据。
==============================================================================*/
void PutCdotInGraph( uint Ox, uchar Oy, uchar DotWidth, uchar code *Disp)
{
uint Optr;
uchar tempCount1,tempCount2,nByte;
Optr = (uint)Oy * paraP9 + Ox;
nByte = DotWidth/8;
WriteCommand( CsrDirD ); // 自动下移
for (tempCount1=0;tempCount1<nByte;tempCount1++)
{
WriteCommand( CsrW ); // 光标定位指令
WriteData( (uchar)(Optr &0xff) ); // 设置光标地址CSR
WriteData( Optr /256 +BasePart2 );
WriteCommand( mWrite ); // ram写指令
switch(DotWidth)
{
case 16: for(tempCount2=0;tempCount2<DotWidth;tempCount2++)
{
WriteData( *Disp ); // 写入数据
Disp++;
}
break;
case 24: for(tempCount2=0;tempCount2<DotWidth;tempCount2++)
{
WriteData( *Disp ); // 写入数据
Disp++;
}
break;
}
Optr++;
}
}
//设置光标闪烁/不显示
void SurFlash(uchar x0,uchar y0,uchar att)
{
uint iTemp;
iTemp = (uint)y0/8 * paraP9 + x0/8; // 光标位置到实际ram地址换算
WriteCommand( CsrDirR ); // 自动右移光标指向
WriteCommand( CsrW ); // 制定光标位置
WriteData( (uchar)(iTemp &0xff) ); // 设置光标地址CSR
WriteData( (uchar)(iTemp /256 + BasePart1) );
WriteCommand( CsrForm ); // 光标形状设置,代码0x5d
WriteData( 0x05 ); // 设置光标水平点为CSX=8
WriteData( 0x87 ); // 光标为块状形式,垂直点为CSY=8
WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数:
if(att==1)
WriteData( 0x57 ); // 01 01 01 10显示1~4区开显示,光标闪烁显示
else
WriteData( 0x54 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -