LCD 240*128 T6963C C51程序
/**********************************
//= 函数原型: void ShowChar(uchar row,uchar col)
//= 功 能: 在指定行列反显一个字符8*16
//= 参 数: 行,列
//= 返 回 值:
//= 函数性质:公有函数
**********************************/
void negative_showchar(uchar col,uchar row,uchar n,bit attribute)
{
uint Addr;
uchar line,dat,i;
row/=8;col/=8;
dat=0;//不反显数据
if (attribute)dat=0xff;//反显数据
for(i=0;i
// for(line=0;line<16;line++)
for(line=1;line<15;line++)
{
Addr=(uint)(row*8+line)*30 + col+i+grhome;//一row占8line,一line30个字节.一列1字节图
wr_cmd_2(LC_ADD_POS,Addr);//设置白线开始地址
wr_data(dat);//画一条白线
wr_cmd_0(LC_UNCHANGED_WR);
}
}
}
/**********************************
//= 函数原型: void fill_CGRAM(void)
//= 功 能: 填充CGRAM数据
//= 参 数:
//= 返 回 值:
//= 函数性质:私有函数
**********************************/
void fill_CGRAM(void)
{
uint i,char_sequence_number;
uint hz_adder;
uchar code *p;
//处理ASCII点阵
for (char_sequence_number=0;ASCII_SUB_INDEX[char_sequence_number]!= ;char_sequence_number++)
{
for(i=0;ASCII_LIB_INDEX[i]!= ;i++)//从总表中定位要显示字符的位置
{
if (ASCII_SUB_INDEX[char_sequence_number]==ASCII_LIB_INDEX[i])
{
break;
}
}
if(ASCII_LIB_INDEX[i]== ){i=1;}//字符不存在,则装载第一字符,非0个
i=i*16;//每个ASCII字符16个字节
p = &ASCII_DOT_LIB[i];
wr_cmd_2(LC_ADD_POS,CGRAMSTART+char_sequence_number*16);//设置CGRAM开始地址
wr_cmd_0(LC_AUT_WR);
for(i=0;i<16;i++)
{
awr_data(*p++); // 写数据
}
wr_cmd_0(LC_AUT_OVR); // 自动写结束
}
hz_adder = CGRAMSTART+char_sequence_number*16;
//处理汉字点阵
for (char_sequence_number=0;HZ_SUB_INDEX[char_sequence_number]!= ;char_sequence_number+=2)
{
for(i=0;HZ_LIB_INDEX[i]!= ;i+=2)//从总表中定位要显示字符的位置
{
if ((HZ_SUB_INDEX[char_sequence_number]==HZ_LIB_INDEX[i])&&(HZ_SUB_INDEX[char_sequence_number+1]==HZ_LIB_INDEX[i+1]))
{
break;
}
}
if(HZ_LIB_INDEX[i]== ){i=0;}
i=i*16;//每个hz占32个字节
p = &HZ_DOT_LIB[i];
wr_cmd_2(LC_ADD_POS,hz_adder+char_sequence_number*16);//设置CGRAM开始地址
wr_cmd_0(LC_AUT_WR);
for(i=0;i<32;i++)
{
awr_data(*p++); // 写数据
}
wr_cmd_0(LC_AUT_OVR); // 自动写结束
}
}
评论