📄 320240最终不带字库子程序.c
字号:
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);
}
//###################函数14。画圆##########################################################################################
//画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2
// 入口参数:(Ox,Oy)为圆心点坐标 px可以超过256
// Rx为半径 半径最大值要根据初始的值进行确定
// 参数 attr attr=1为绘制图形 attr=0为擦除图形
void circle(Uint Ox,Uchar Oy,Uchar Rx,Uchar attr,Uchar qu)
{
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,qu);
col=Ox-xt; //第二象限
Point(col,row,attr,qu);
row=Oy+yt; //第三象限
Point(col,row,attr,qu);
col=Ox+xt; //第四象限
Point(col,row,attr,qu);
/***************45度镜象画另一半***************/
col=Ox+yt; //第一象限
row=Oy-xt;
Point(col,row,attr,qu);
col=Ox-yt; //第二象限
Point(col,row,attr,qu);
row=Oy+xt; //第三象限
Point(col,row,attr,qu);
col=Ox+yt; //第四象限
Point(col,row,attr,qu);
}
}
//#############################################################################################
// 滚动演示程序段 (包含向上,向下,向左,向右四个函数)
// 使用SED1335 等的屏幕滚动功能, 可以实现逐点滚动的显示效果. 这个效果的实现, 在
// 水平方向是依赖于指令HDOT SET的支持. 下面的演示程序中看到HDOT SET指令的使用方法.
// 参数说明:V控制移动的速度。 tt控制移动的幅度
// 横向移动的时候 tt控制移动的字节数目 纵向移动tt控制移动的点行数
//
//################函数15.滚动往左##########################
// 第一显示区向左滚动
//V控制移动的速度。 tt控制移动的幅度 横向移动的时候 tt控制移动的字节数目
void RollLaft( Uchar v,Uchar tt ) {
Uchar tempI,jj=tt;
Uint iTemp=0;
while(jj--) {
for(tempI=0;tempI<8;tempI++) {
WriteCommand( HdotScr ); // 写入HDOT SET 指令
WriteData( tempI ); // 写入参数
DelayMs(v); // 调延时子程序
}
iTemp ++;
}
// WriteCommand( Scroll ); // 设定显示区域起始地址
// WriteData( (Uchar)(iTemp & 0xff) ); // 写入参数
// WriteData( (Uchar)(iTemp /256) ); // 写入参数
}
//#################函数16.滚动往右######################
// 第一显示区向右滚动
//V控制移动的速度。 tt控制移动的幅度 横向移动的时候 tt控制移动的字节数目
void Rollright( Uchar v,Uchar tt ) {
Uchar tempI,jj=tt;
Uint iTemp=24;
// return;
// WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数:
// WriteData( 0x44 ); // 00 00 01 00显示1区开显示,其余层关闭
while(jj--) {
tempI = 8;
WriteCommand( Scroll ); // 显示区域(起点)设置
WriteData( (Uchar)(iTemp & 0xff) ); // 写入参数
WriteData( (Uchar)(iTemp /256) ); // 写入参数
while( tempI-- ) {
WriteCommand( HdotScr ); // 写入HDOT SET 指令
WriteData( tempI ); // 写入参数
DelayMs(v); // 调延时子程序
}
iTemp--;
// WriteCommand( Scroll ); // 设定显示区域起始地址
// WriteData( 0 ); // 写入参数
// WriteData( 0 ); // 写入参数
// DelayMs(30);
}
}
//##################函数17.滚动往下##########################
// 第一显示区向下滚动
//V控制移动的速度。 tt控制移动的幅度 纵向移动tt控制移动的点行数
void RollDown( Uchar v,Uchar tt ) {
Uchar jj = tt; // 演示32次
Uint iTemp=paraP9*50;
// WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数:
// WriteData( 0x44 ); // 00 00 01 00显示1区开显示,其余层关闭
while(jj--) {
iTemp -= paraP9;
WriteCommand( Scroll ); // 设定显示区域起始地址
WriteData( (Uchar)(iTemp & 0xff) ); // 写入参数
WriteData( (Uchar)(iTemp /256) ); // 写入参数
DelayMs(v); // 调延时子程序
}
WriteCommand( Scroll ); // 设定显示区域起始地址
WriteData( 0 ); // 写入参数
WriteData( 0 ); // 写入参数
DelayMs(30);
}
//#####################函数18.向上滚动#########################
// 第一显示区向上滚动
//V控制移动的速度。 tt控制移动的幅度 纵向移动tt控制移动的点行数
void RollUp( Uchar v,Uchar tt ) {
Uint iTemp=0;
Uchar jj = tt; // 演示30次
// WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数:
// WriteData( 0x44 ); // 00 00 01 00显示1区开显示,其余层关闭
while(jj--) {
iTemp += paraP9;
WriteCommand( Scroll ); // 设定显示区域起始地址
WriteData( (Uchar)(iTemp & 0xff) ); // 写入参数
WriteData( (Uchar)(iTemp /256) ); // 写入参数
DelayMs(v); // 调延时子程序
}
WriteCommand( Scroll ); // 设定显示区域起始地址
WriteData( 0 ); // 写入参数
WriteData( 0 ); // 写入参数
DelayMs(30);
}
//################函数19.文本方式下的西文字符串显示################################################
// 西文显示演示程序
// 仅仅用于文本方式下的西文字符串显示,本函数只写入第3显示区
//本函数含有切换到文本模式的代码,要切换到图形模式需有另外的指令,不然会乱码
//参数:OX OY为显示坐标 OX为横向的字母数 OX<320/8 OY为横向的字母数 OY<240/8
// *ptr指向要显示的字符串
//
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( 0x01 ); // 设置参数:显示3区为文本属性,二重xor合成
WriteCommand( DispOn ); // 写入指令DISP ON/OFF代码,后续参数:
WriteData( 0x56 ); // 01 01 01 10显示1~4区开显示,光标闪烁显示
iTemp = (Uint)Oy * paraP9 + Ox; // 光标位置到实际ram地址换算
WriteCommand( CsrDirR ); // 自动右移光标指向
WriteCommand( CsrW ); // 制定光标位置
WriteData( (Uchar)(iTemp &0xff) ); // 设置光标地址CSR
WriteData( (Uchar)(iTemp /256 + BasePart3) ); // 加入显示三区起始地址SAD2H
WriteCommand( mWrite ); // 当前位置写入数据指令
for(ii=0;ii < TexLength;ii++) {
WriteData( ptr[ii] ); // 写入显示字符代码
}
DelayMs(350);
}
//########################函数20.三角形绘制函数#############################################
// 三角形绘制函数
// 入口参数 (X0,Y0),(X1,Y1),(X2,Y2),三角形三个顶点
//
void triangle( Uint X0, Uchar Y0, Uint X1, Uchar Y1,Uint X2, Uchar Y2,Uchar att,Uchar qu )
{
Linexy( X0,Y0,X1,Y1,att,qu);
Linexy( X0,Y0,X2,Y2,att,qu);
Linexy( X1,Y1,X2,Y2,att,qu);
}
//########################################################################################
void Main(void)
{
Uchar i;
Delay(32767); // 足够的延时确保lcm已经准备好
LcmInition();
LcmClear();
WriteCommand( Ovlay ); // 显示合成方式设置.代码0x5b
WriteData( 0x04 ); // 设置参数:显示3区为文本属性,二重xor合
dprintf(8,20, test1,1); // 图形方式下中英文混合字符串的显示
PutCdotInGraph( 5, 15, 4,16,1); //单个汉字写入(图形方式) 16点
PutCdotInGraph(220, 60, 3,24,1); //单个汉字写入(图形方式) 24点
Point(315, 220, 1,1); // 绘点子程序
Linexy(20,40,300,220,1,0); // 绘线程序
Rectangle( 20, 60, 80,100,1,1); //画矩形
circle(100,100,50,1,0); //绘圆
triangle( 100, 100, 200, 200,250, 128,1,1);
// 三角形绘制
RollUp(200,200); // 滚动往上
while(1)
{
;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -