/*
*
*文件名称:
*摘要:读写lcd显现缓冲区
*
*当时版别:v1.0
*作者:laoliu2008
*完结日期:2008年4月12日
*/
#i nclude
unsignedcharxx,yy;//大局刺进点坐标
externconstunsignedcharcharacter_tab[][17];//显现数据库
externconstunsignedcharChinese_characters_tab[][34];//显现数据库
unsignedcharlcd_bit_buffer[8][128];//显现缓冲区
//************************************
//lcd初始化
//7___________________________
//|||
//|||
///|\|||
//||||
//||||
//||||
//Y|_____________|_____________|
//|
//0———–>数学坐标:x127
//
//文字坐标:0_____
//||
//||
//|—–|
//||
//|_____|
//能够在恣意点显现汉字字符
//首要调用w_xx_yy();写入要显现的字符在屏幕方位坐标(文字坐标为左上角)调用dis_buffer();显现一个汉字或英文
//dis_lcd_buffer()显现字符串Y地址主动右移8或16显现字符串能够主动坚持一行
//坐标主动循环例如你在右下角x=119y=7的当地显现一个汉字这个汉字的3/4将会出现在屏幕的左上角
//字库16*16英文16*8文字的坐标参阅点选则左上角即所说的在x=119y=7所说的是字符的左上角坐标
//************************************
//***********************************
//初始化缓冲区
//***********************************
voidlcd_buffer_ini()
{
unsignedcharx,y;
unsignedchartemp;
for(y=8;y>0;y–)//清零缓冲区
for(x=128;x>0;x–)
lcd_bit_buffer[y-1][x-1]=0;
xx=0;
yy=0;
}
//*******************************
//显现输出
//*******************************
voiddis_out_lcd()
{
unsignedcharx0,y0;
unsignedchartemp;
for(y0=8;y0>0;y0–)
{
w_lcd_address(y0-1,0);
for(x0=128;x0>0;x0–)
{
w_lcd_da
}
}
}
//********************************
//到xxyy写一点
//********************************
unsignedcharwb_lcd_bit_buffer()
{
unsignedchartemp;
unsignedchary1,y2;
//xxyy
{
y1=yy%8;//0-7bie
y2=yy>>3;//0-7行
temp=lcd_bit_buffer[y2][xx];
temp|=(1<
}
}
//********************************
//到xxyy擦一点
//********************************
unsignedcharn_wb_lcd_bit_buffer()
{
unsignedchartemp;
unsignedchary1,y2;
//xxyy
if((yy>63))
return0;
y1=yy%8;//0-7bie
y2=yy>>3;//0-7行
temp=lcd_bit_buffer[y2][xx];
temp&=~(1<
}
//********************************
//写显现地址xxyy
//********************************
voidw_xx_yy(unsignedcharx,unsignedchary)
{
xx=x%128;
yy=y%64;
}
//***********************************
//取反一个点
//***********************************
voidcpl_dian()
{
unsignedchartemp;
unsignedchary1,y2;
//xxyy
y1=yy%8;//0-7bie
y2=yy>>3;//0-7行
temp=lcd_bit_buffer[y2][xx];
temp^=(1<
}
//*******************************
//取反一个英文字符
//*******************************
voidcpl_asc()
{
unsignedchari,j;
unsignedcharx_x,y_y;
unsignedchartemp_da
unsignedchartemp;
unsignedchary1,y2;
x_x=xx;
y=y_y=yy;//保存y轴
i=8;//显现字模8*16
while(i–)
{
yy=y;
//————写一个字节—————————
for(j=8;j>0;j–)
{
y1=yy%8;//0-7bie
y2=yy>>3;//0-7行
temp=lcd_bit_buffer[y2][xx];//写一个点不调用函数削减调用糟蹋的体系时刻
temp^=(1<
//yy=(yy+64-1)%64;//批改y地址
yy=(yy+63)%64;//批改y地址
}
//————————————————-
xx=(xx+1)%128;
}
y=yy;//显现下半个字
xx=x_x;//写x_x到xx
i=8;//显现字模8*16
while(i–)
{
yy=y;
//————写一个字节—————————
for(j=8;j>0;j–)
{
y1=yy%8;//0-7bie
y2=yy>>3;//0-7行
temp=lcd_bit_buffer[y2][xx];
temp^=(1<
//yy=(yy+64-1)%64;//批改y地址
yy=(yy+63)%64;//批改y地址
}
//————————————————-
xx=(xx+1)%128;
}
yy=y_y;//恢恢复y轴
}
//********************************
//显现一个英文字符
//********************************
voiddis_char_buffer(constunsignedchar*sp)
{
unsignedchari,j;
unsignedcharx_x,y_y;
unsignedchartemp_da
unsignedchartemp;
unsignedchary1,y2;
x_x=xx;
y=y_y=yy;//保存y轴
i=8;//显现字模8*16
while(i–)
{
temp_da
yy=y;
//————写一个字节—————————
for(j=8;j>0;j–)
{
y1=yy%8;//0-7bie
y2=yy>>3;//0-7行
temp=lcd_bit_buffer[y2][xx];
if(temp_da
temp|=(1<
temp_da
yy=(yy+64-1)%64;//批改y地址
}
//————————————————-
xx=(xx+1)%128;
}
y=yy;//显现下半个字
xx=x_x;//写x_x到xx
i=8;//显现字模8*16
while(i–)
{
temp_da
yy=y;
//————写一个字节—————————
for(j=8;j>0;j–)
{
y1=yy%8;//0-7bie
y2=yy>>3;//0-7行
temp=lcd_bit_buffer[y2][xx];
if(temp_da
temp|=(1<
temp_da
yy=(yy+64-1)%64;//批改y地址
}
//————————————————-
xx=(xx+1)%128;
}
yy=y_y;//恢恢复y轴
}
//********************************
//显现一个汉字
//********************************
voiddis_hz_buffer(constunsignedchar*sp)
{
unsignedchari,j;
unsignedcharx_x,y_y;
unsignedchartemp_da
unsignedchartemp;
unsignedchary1,y2;
x_x=xx;
y=y_y=yy;//保存y轴
i=16;//显现字模8*16
while(i–)
{
temp_da
yy=y;
//————写一个字节—————————
for(j=8;j>0;j–)
{
y1=yy%8;//0-7bie
y2=yy>>3;//0-7行
temp=lcd_bit_buffer[y2][xx];
if(temp_da
temp|=(1<
temp&=~(1<
temp_da
yy=(yy+64-1)%64;//批改y地址
}
//————————————————-
xx=(xx+1)%128;
}
y=yy;//显现下半个字
xx=x_x;//写x_x到xx
i=16;//显现字模16*16
while(i–)
{
temp_da
yy=y;
//————写一个字节—————————
for(j=8;j>0;j–)
{
y1=yy%8;//0-7bie
y2=yy>>3;//0-7行
temp=lcd_bit_buffer[y2][xx];
if(temp_da
temp|=(1<
temp&=~(1<
temp_da
yy=(yy+64-1)%64;//批改y地址
}
//————————————————-
xx=(xx+1)%128;
}
yy=y_y;//恢恢复y轴
}
//*********************************
//显现一个汉字字符
//包括主动查字库
//*********************************
voiddis_buffer(unsignedintda
{
unsignedchartemp,da
unsignedchartemp_h,temp_l;
unsignedchara_temp;
unsignedchari;
if((da
{
//汉字
i=0;
temp_h=(unsignedchar)(da
temp_l=(unsignedchar)(da
while(1)
{
WDR();
if((Chinese_characters_tab[i][0]==0xff)&&(Chinese_characters_tab[i][1]==0xff))//查找失利失利显现黑色方块
break;
if((Chinese_characters_tab[i][0]==temp_h)&&(Chinese_characters_tab[i][1]==temp_l))//查找成功
break;
i++;
}
dis_hz_buffer(&Chinese_characters_tab[i][2]);
}
else//英文
{
i=0;
da
while(1)//查字库
{
WDR();
if(character_tab[i][0]==0xff)//查找失利失利显现黑色方块
break;
if(character_tab[i][0]==da
break;
i++;
}
dis_char_buffer(&character_tab[i][1]);
}
}
//****************************
//显现字符串ram中
//****************************
voiddis_lcd_buffer(unsignedchar*aa)
{
while(*aa)
{
if(*aa>128)
{
dis_buffer(((*aa<<8)|*(aa+1)));
aa+=2;
}
else
{
dis_buffer(*aa);
aa++;
}
}
}
//****************************
//显现字符串Rom中
//****************************
voiddis_lcd_buffer_rom(constunsignedchar*aa)
{
while(*aa)
{
if(*aa>128)
{
dis_buffer(((*aa<<8)|*(aa+1)));
aa+=2;
}
else
{
dis_buffer(*aa);
aa++;
}
}
}
//*********************************************************
———————————————————————————————————–
//字库结构
//汉字
typedefconststruct{
constunsignedcharcha[2];
constunsignedcharda
}character_struct;
character_structChinese_characters_tab[]={
{
{“温”},
{0x08,0x84,0x61,0x0E,0x00,0x7E,0x52,0x52,0x52,0x52,0x52,0x7E,0x00,0x00,0x00,0x00,
0x40,0x7F,0x80,0x02,0xFE,0x82,0x82,0xFE,0x82,0x82,0xFE,0x82,0x82,0xFE,0x02,0x00},
},
{
{“度”},
{0x00,0x00,0x3F,0x20,0x24,0x24,0x3F,0xA5,0x65,0x25,0x3F,0x24,0x24,0x24,0x20,0x00,
0x01,0x06,0xF8,0x01,0x01,0x42,0x62,0x54,0x48,0x48,0x54,0x64,0x42,0x03,0x02,0x00,},
},
//…………………..
//完毕标志
{
{0xff,0xff},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}
},
};
//英文
constunsignedcharcharacter_tab[][17]={
/*–文字:!–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
!,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x0C,0x00,0x00,0x00,
//!,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*–文字:#–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
#,0x02,0x03,0x1E,0x02,0x03,0x1E,0x02,0x00,0x20,0xFC,0x20,0x20,0xFC,0x20,0x20,0x00,
//#,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
/*–文字:%–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
%,0x0F,0x10,0x0F,0x00,0x07,0x18,0x00,0x00,0x00,0x84,0x38,0xC0,0x78,0x84,0x78,0x00,
/*–文字:*–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
*,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,
/*–文字:—*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
-,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
/*–文字:+–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
+,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xF8,0x80,0x80,0x80,0x00,
/*–文字:=–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
=,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
/*–文字:[–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
[,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,
/*–文字:]–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
],0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
/*–文字:?–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
?,0x00,0x0E,0x12,0x10,0x10,0x10,0x0F,0x00,0x00,0x00,0x00,0x0C,0x6C,0x80,0x00,0x00,
/*–文字:/–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
/,0x00,0x00,0x00,0x00,0x01,0x06,0x18,0x20,0x00,0x06,0x18,0x60,0x80,0x00,0x00,0x00,
/*–文字:\–*/
/*–宋体12;此字体下对应的点阵为:宽x高=8×16–*/
0x5c,0x00,0x30,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x1C,0x03,0x00,
/*–文字:空格–*/
/*–NewCenturySchoolbook12;此字体下对应的点阵为:宽x高=8×16–*/
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
//摄氏度符号
0xfe,0x18,0x18,0x03,0x04,0x08,0x08,0x08,0x04,0x00,0x00,0xF0,0x08,0x04,0x04,0x04,0x08,
//完毕标志
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
};