📄 smg19264e_z_exsample_c51.c
字号:
XPOS=6;
YPOS=52;
point(1);
exdelay(); //延时约600mS
//7.绘图测试: LINE(6,52)-(95,63),画线.
line(6,52,95,63,1);
exdelay(); //延时约600mS
//8.绘图测试: lineto(186,52),画线.
lineto(186,52,1);
exdelay(); //延时约600mS
//9.绘图测试: lineto(6,52),画线.
lineto(6,52,1);
exdelay(); //延时约600mS
//13.全屏测试: 所有坐标点全部显示.
lcdfill(0xff); //全显
exdelay(); //延时约600mS
}
void exdelay(void) //演示延时子程序
{ unsigned char i,j,k; //延时约600mS
for(i=0;i<60;i++)
for(j=0;j<64;j++)
for(k=0;k<51;k++);
}
//-------------------------------------------------------------------------------
//以下putchar为字符对象的基本子程序,putstr为字符对象的扩充子程序,getchinesecodepos,
//getenglishcodepos为字符对象的辅助子程序.
//-------------------------------------------------------------------------------
//子程序名称:void putchar(unsigned int c).
//功能:在(XPOS,YPOS)位置写单个字符点阵,若c>128 表示为中文字符,否则为西文字符
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void putchar(unsigned int c) //定位写字符子程序
{ if(c>128)
putsizeimage(CHINESECHARSIZE,CHINESECHARSIZE,getchinesecodepos(c));
else
putsizeimage(ENGLISHCHARSIZE,CHINESECHARSIZE,getenglishcodepos(c));
}
//-------------------------------------------------------------------------------
//子程序名称:void putstr(unsigned char code *s).
//功能:写字符串点阵,若*s=0 表示字符串结束.
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void putstr(unsigned char code *s) //显示字符串子程序,字符码为0时退出
{ unsigned int c;
while(1)
{ c=*s;
s++;
if(c==0) break;
if(c<128)
putchar(c);
else
{ putchar(c*256+*s);
s++;
}
}
}
//-------------------------------------------------------------------------------
//子程序名称:unsigned char code *getchinesecodepos(unsigned char ac).
//功能:根据当前中文字符码查表后计算得到当前中文字符码的字库点阵位置.
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
unsigned char code *getchinesecodepos(unsigned int ac)
{ unsigned int min,max,mid,midc;
min=0;
max=CHINESECHARNUMBER-1;
while(1)
{ if(max-min<2)
{ if(ChineseCode[min]==ac)
mid=min;
else if(ChineseCode[max]==ac)
mid=max;
else
mid=0;
break;
}
mid=(max+min)/2;
midc=ChineseCode[mid];
if(midc==ac)
break;
else if(midc>ac)
max=mid-1;
else
min=mid+1;
}
return ChineseCharDot+mid*CHINESECHARDOTSIZE;
}
//-------------------------------------------------------------------------------
//子程序名称:unsigned char code *getenglishcodepos(unsigned char ac).
//功能:根据当前ASCII字符码查表后计算得到当前ASCII字符码的字库点阵位置.
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
unsigned char code *getenglishcodepos(unsigned char ac)
{ unsigned char min,max,mid,midc;
min=0;
max=ENGLISHCHARNUMBER-1;
while(1)
{ if(max-min<2)
{ if(EnglishCode[min]==ac)
mid=min;
else if(EnglishCode[max]==ac)
mid=max;
else
mid=0;
break;
}
mid=(max+min)/2;
midc=EnglishCode[mid];
if(midc==ac)
break;
else if(midc>ac)
max=mid-1;
else
min=mid+1;
}
return EnglishCharDot+mid*ENGLISHCHARDOTSIZE;
}
//-------------------------------------------------------------------------------
//以下putsizeimage为图形对象的基本子程序,putimage为图形对象的扩充子程序
//-------------------------------------------------------------------------------
//子程序名称:void putsizeimage(unsigned char XSIZE,unsigned YSIZE,
// unsigned char code *s)
//功能:在(XPOS,YPOS)位置绘制XSIZE列及YISZE行点阵的图形*S.
//修改日期:2009.8.31
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void putsizeimage(unsigned char XSIZE,unsigned char YSIZE,unsigned char code *s)
{ unsigned char k,lx,ly,a1,a2,y,Lcd_Mask;
k=YPOS&0x7;
YSIZE+=k;
y=YPOS;
s--;
for(lx=0;lx<XSIZE;lx++,XPOS++)
{ for(YPOS=y,ly=k;ly<YSIZE;)
{ unsigned char p;
a1=*s;
s++;
a2=*s;
if(CharImageReverse)
{ a1=~a1;
a2=~a2;
}
for(p=0;p<k;p++)
{ a2>>=1;
if((a1&0x1)==1)
a2+=0x80;
a1>>=1;
}
if((k==0) && (YSIZE<ly+8))
{ lcdpos();
ly+=8;
YPOS+=8;
}
else
{ lcdpos();
a1=lcdrd();
lcdpos();
ly+=8;
YPOS+=8;
Lcd_Mask=0xff;
p=YSIZE&0x7;
while(p>0)
{ Lcd_Mask>>=1;
YPOS--;
p--;
}
p=0xff;
while(YSIZE<ly)
{ ly--;
YPOS--;
p<<=1;
}
Lcd_Mask&=p;
a2&=Lcd_Mask;
a2|=a1&(~Lcd_Mask);
}
lcdwd(a2);
}
if((k!=0) && (YSIZE&0x7 != 0) && (k >= YSIZE&0x7)) s--;
}
YPOS=y;
}
//-------------------------------------------------------------------------------
//子程序名称:void putimage(unsigned char code *s).
//功能:在(XPOS,YPOS)位置绘制XSIZE[*s]列及YISZE[*(s+1)]行点阵的图形[*(s+2)].
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void putimage(unsigned char code *s) //显示图形子程序
{ unsigned char XSIZE,YSIZE;
XSIZE=*s;
s++;
YSIZE=*s;
s++;
putsizeimage(XSIZE,YSIZE,s);
}
//-------------------------------------------------------------------------------
//以下point为绘图操作的基本子程序,line,lineto,rect为绘图操作的扩充子程序.
//-------------------------------------------------------------------------------
//子程序名称:void point(bit b).
//功能:按b的数据在(XPOS,YPOS)位置绘制点.
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void point(bit b)
{ unsigned char i,Lcd_Mask,j;
Lcd_Mask=0x01;
i=YPOS&0x7;
while(i>0)
{ Lcd_Mask<<=1;
i--;
}
lcdpos();
j=lcdrd();
lcdpos();
if(b)
lcdwd(j|Lcd_Mask);
else
lcdwd(j&(~Lcd_Mask));
}
//-------------------------------------------------------------------------------
//子程序名称:void line(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,bit b)
//功能:按b的数据绘制(x0,y0)-(x1,y1)的直线
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void line(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,bit b)
{ unsigned char dx,dy;
unsigned int dk;
XPOS=x0;
YPOS=y0;
point(b);
dx=(x1>=x0)?x1-x0:x0-x1;
dy=(y1>=y0)?y1-y0:y0-y1;
if(dx==dy)
{ while(XPOS!=x1)
{ if(x1>x0) XPOS++;else XPOS--;
if(y1>y0) YPOS++;else YPOS--;
point(b);
}
}
else if (dx>dy)
{ dk=dy;
dy=0;
while(XPOS!=x1)
{ if(x1>x0) XPOS++;else XPOS--;
dy++;
if(y1>y0) YPOS=y0+(dk*dy+dx/2)/dx;else YPOS=y0-(dk*dy+dx/2)/dx;
point(b);
}
}
else
{ dk=dx;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -