📄 t6963c.c
字号:
//************************************************************************
void image_addr_Pointer_Set(uchar x, uchar y)
{
uint iPos;
uint temp;
iPos =y * 16 + x + grshome;
temp=iPos;
x=iPos>>8;
y=temp&0x00ff;
WRCommandTwo(y,x,0x24);
}
//**************************************************************************
//= 函数原型: void Point(uchar x,uchar y, bit Mode)
//= 功 能: 在指定坐标位置显示一个点
//= 参 数: 坐标,显示点或清除点
//= 返 回 值:
//= 函数性质:私有函数
//= Mode 1:显示 0:清除该点
//**************************************************************************
void Point(uchar x,uchar y, bit Mode)
{
uint Address;
uint temp;
uchar dat;
Address=(uint)y*16 + (x>>3) + grshome; //地址转化
dat=0xF0+7-x%8; //产生位操作命令画点的数据
if(Mode) dat=dat|0x08;
temp=Address;
x=Address>>8;
y=temp&0x00ff;
WRCommandTwo(y,x,0x24); //设置该点所在单元地址
WRCommand(dat); // 利用位操作命令画点
}
//*****************************************************************************
//= 函数原型: void char_wr(uchar x,uchar y, uchar *p,uchar dataa,uchar n)
//= 功 能: 连续写入一个或多个字符
//= 参 数: 坐标,要显示的字符数组,显示的单个字符,要显示的字符个数
//= 返 回 值:
//= 函数性质:私有函数
//当n=0一次性写入一个字符,否则一次性写入多个字符
//*****************************************************************************
void char_wr(uchar x,uchar y, uchar *p,uchar dataa,uchar n)
{
uchar i;
char_addr_Pointer_Set(x,y); //写入地址
if(n==0)
WRCommandOne(dataa,0xc0); //一次写入数据
else
{
WRCommand(0xb0);//进入自动写
for(i=0;i<n;i++)
WRData(p[i]);
WRCommand(0xb2); //退出自动写
}
}
//******************************************************************************
//= 函数原型: void hanzhi(uchar x,uchar y, uchar m,uchar n)
//= 功 能: 连续写入一个或多个汉字
//= 参 数: 坐标,要显示的第一个汉字的位置,连续显示汉字的个数。
//= 返 回 值:
//= 函数性质:私有函数
//当n=1一次性写入一个字符,否则一次性写入多个字符
//*****************************************************************************
void hanzhi(uchar x,uchar y, uchar m,uchar n)
{
uchar i;
uchar CGRam;
CGRam=0x80+4*m; //第m个字符
for(i=0;i<n;i++)
{
char_addr_Pointer_Set(x,y); //汉字左上角写入
WRCommandOne(CGRam,0xc0); //一次写入数据;
CGRam++;
y++;
char_addr_Pointer_Set(x,y); //汉字左下角写入
WRCommandOne(CGRam,0xc0);
CGRam++;
x++;
y--;
char_addr_Pointer_Set(x,y); //汉字右上角写入
WRCommandOne(CGRam,0xc0);
CGRam++;
y++;
char_addr_Pointer_Set(x,y); //汉字右下角写入
WRCommandOne(CGRam,0xc0);
CGRam++;
x++;
y--;
if(x==16)
{
x=0; //写满一行,从第二行开始
y++;
y++;
}
}
}
//******************************************************************************
//= 函数原型: void fill_CGRAM(uchar *p,uchar m,uinit n)
//= 功 能: 填充CGRAM数据
//= 参 数: 字符数组,写入第m个汉字,循环写入的汉字个数
//= 返 回 值:
//= 函数性质:私有函数
//*//**************************************************************************
void fill_CGRAM(uchar *p,uchar m,uint n)
{
uchar xx;
uchar yy;
uint i;
uint ADCGram;
uint temp;
ADCGram=0x1c00+32*m; //确定CGRAM地址
temp=ADCGram;
xx=ADCGram>>8;
yy=temp&0x00ff;
WRCommandTwo(yy,xx,0x24);
n=n*32;
WRCommand(0xb0);
for(i=0;i<n;i++)
WRData(p[i]);
WRCommand(0xb2); //退出自动写
}
//*******************************************************************************
//= 函数原型: void Wr_line(uchar type,uchar x1,uchar y1, uchar Long,uchar mode)
//= 功 能: 画一条横线或一条竖线
//= 参 数: type=1为横线,否则为竖线,(x1,y1)为起始点,Long为长度,mode=1为显示
//= 返 回 值:
//= 函数性质:公有函数
//*******************************************************************************
void Wr_line(uchar type,uchar x1,uchar y1, uchar Long,uchar mode){
uchar i;
if(type==1)
{
for(i=0;i<Long;i++) //画横线
{
if(mode==1)
Point(x1+i,y1,1);
else
Point(x1+i,y1,0);
}
return;
}
else
{
for(i=0;i<Long;i++) //画竖线
{
if(mode==1)
Point(x1,y1+i,1);
else
Point(x1,y1+i,0);
}
return;
}
}
//*****************************************************************************
//= 函数原型: void Show_Image(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
//= 功 能: 填充区域(x1,y1) (x2,y2)
//= 参 数: (x1,y1)为起始点,(x2,y2)为终点 mode=1显示
//= 返 回 值:
//= 函数性质:私有函数
//= 注 意:以点为单位
//*****************************************************************************
void Show_Image(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
{
char temp=x1;
if(mode)
{
for(;y1<=y2;y1++)
for(x1=temp;x1<=x2;x1++)
Point(x1,y1,1);
}
else
{
for(;y1<=y2;y1++)
for(x1=temp;x1<=x2;x1++)
Point(x1,y1,0);
}
}
//**********************************************************************************
//= 函数原型: void image(uchar x1,uchar y1,uchar x2,uchar y2,uchar *p,bit mode)
//= 功 能: 在设定的区域连续写入多个字节,作图形显示用
//= 参 数: (x1,y1)为起始点,(x2,y2)为终点 *po为图形数组,mode=1显示 mode=0清除
//= 返 回 值:
//= 函数性质:私有函数
//= 操作方法:当p=0,mode=1时,连续输入0xff,作反显用,当p=0,mode=0时,连续输入0x00,作
//= 消除反显用,当p!=0时,作输入图像用,此时mode无效
//= 注 意:参数的数据范围
//**********************************************************************************
void image(uchar x1,uchar y1,uchar x2,uchar y2,uchar *p,bit mode)
{
uchar temp=x1;
uint i=0;
for(;y1<=y2;y1++)
{
x1=temp;
image_addr_Pointer_Set(x1,y1); //写入地址
WRCommand(0xb0); //进入自动写
for(;x1<=x2;x1++)
{
if(p==0&&mode==1)
{
WRData(0xff);
}
else if(p==0&&mode==0)
{
WRData(0x00);
}
else
{
WRData(p[i]);
i++; //下一个字节
}
}
WRCommand(0xb2); //退出自动写
}
}
//******************************************************************************
//= 函数原型: void negShow(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
//= 功 能: 反显区域(x1,y1) (x2,y2)
//= 参 数: (x1,y1)为起始点,(x2,y2)为终点 mode=1反显
//= 返 回 值:
//= 函数性质:私有函数
//= 注 意:以字节为单位
//******************************************************************************
void negShow(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
{
if(mode)
{
WRCommand(0x81); //启用内部字符发生器,显示方式是文本与图形逻辑异或
image(x1,y1,x2,y2,0,1);
}
else
{
WRCommand(0x80); //启用内部字符发生器,显示方式是文本与图形逻辑或
image(x1,y1,x2,y2,0,0);
}
}
//******************************************************************************
//= 函数原型: void Show_num(uchar x1,uchar y1,uchar num)
//= 功 能: 在设定的位置显示一个数字
//= 参 数: (x1,y1)为位置,num为数字
//= 返 回 值:
//= 函数性质:公有函数
//= 注 意:以字节为单位
//*****************************************************************************
void Show_num(uchar x1,uchar y1,uchar num)
{
uchar number[10]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};
char_addr_Pointer_Set(x1,y1);
WRCommandOne(number[num],0xc0); //一次写入数据
}
///////////////////////////初始化LCD////////////////////////////////////////////
void Init_LCD()
{
Init_LCD_Graphic();
ClrGraphic();
fill_CGRAM(CCTable,0,22); //将汉字写入CGRAM
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -