📄 12864lcd.c
字号:
}
/*------------------显示12864图片---------------------------*/
static void Disp_Img(unsigned char code *img)
{
unsigned char j,k;
EA = 0;
for(k=0;k<8;k++)
{
Mcs=1;Scs=0;delay(10);
write_com(Page_Add+k);
write_com(Col_Add+0);
for(j=0;j<64;j++)
write_data(img[k*128+j]);
Mcs=0;Scs=1; delay(10);
write_com(Page_Add+k);
write_com(Col_Add+0);
for(j=64;j<128;j++)
write_data(img[k*128+j]);
}
EA = 1;
}
void LcdRs()
{
Lcd_Rst=0;
Lcd_Rst=1;
Mcs=1;
Scs=1;
write_com(Disp_On);
}
/*------------------初始化LCD屏--------------------------*/
void LcdInit()
{
Lcd_Rst=0;
Lcd_Rst=1;
Mcs=1;
Scs=1;
write_com(Disp_Off);
write_com(Page_Add+0);
write_com(Start_Line+0);
write_com(Col_Add+0);
write_com(Disp_On);
Disp_Img(FirstPage);
}
/*------------------清除内存---------------*/
void CLEAR_SCREEN()
{
uchar j,k;
EA = 0;
Mcs=1;Scs=1;
write_com(Page_Add+0);
write_com(Col_Add+0);
for(k=0;k<8;k++)
{
write_com(Page_Add+k);
for(j=0;j<64;j++)
write_data(0x00);
}
EA = 1;
}
/*---------------------指定位置英文字符和汉字-----------------------*/
void DisplayStr(uchar lcd_x,uchar lcd_y,char *ptr)
{
char c1,c2;
uchar code *asc_ptr;
uint i,j,w,k;
bit flag;
EA = 0;
i=0;
w = lcd_x;
Mcs=1;
Scs=0;
if(lcd_x>=8)
{
lcd_x = lcd_x - 8;
Mcs = 0;
Scs = 1;
}
lcd_y = lcd_y*2;
while(ptr[i] != 0)
{
if(w==8)
{
lcd_x = 0;
Mcs=0;
Scs=1;
}
if(w>15)
break;
c1 = ptr[i];
c2 = ptr[i+1];
SetPos(lcd_x,lcd_y);
if(c1=='\n')
{
lcd_y++;
lcd_y++;
lcd_x = 0;
w = 0;
Mcs=1;
Scs=0;
i++;
c1 = ptr[i];
c2 = ptr[i+1];
SetPos(lcd_x,lcd_y);
}
if(c1 >= 0x20) //// ASCII
{
asc_ptr = ASC_MSK + (c1-0x20)*ASC_CHR_HEIGHT-(16-ASC_CHR_HEIGHT);
for(j=0;j<16;j++) //写16行
{
if(j==8)
{
lcd_y++;
SetPos(lcd_x,lcd_y);
}
write_data(*asc_ptr++);
}
lcd_y--;
}
else // 中文
{
if(w>14)
break;
flag = 0;
for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
break;
for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
{
if(k==8 && flag)
{
flag = 0;
Mcs=1;
Scs=0;
lcd_y++;
lcd_x = 7;
SetPos(lcd_x,lcd_y);
}
else if(k == 8)
{
lcd_y++;
SetPos(lcd_x,lcd_y);
}
if(k==4 && lcd_x==7 && !flag)
{
flag = 1;
lcd_x = 0;
Mcs=0;
Scs=1;
SetPos(lcd_x,lcd_y);
}
if(k==12 && lcd_x==7 && !flag)
{
flag = 1;
lcd_x = 0;
Mcs=0;
Scs=1;
SetPos(lcd_x,lcd_y);
}
if(j < sizeof(GB_16)/sizeof(GB_16[0]))
{
write_data(GB_16[j].Msk[k*2]);
write_data(GB_16[j].Msk[k*2+1]);
}
else // 未找到该字
{
write_data(0);
write_data(0);
}
}
lcd_y--;
if(!flag)
lcd_x++;
w++;
i++;
}
lcd_x++;
w++;
i++;
}
EA = 1;
}
/*-----------------在制定位置显示字符--------------------------*/
void DisplayType(uchar lcdx,uchar lcdy,uchar value)
{
uchar i;
uchar code *asc_ptr;
EA = 0;
if(lcdx>=8)
{
lcdx = lcdx-8;
Mcs=0;
Scs=1;
}else
{
Mcs=1;
Scs=0;
}
lcdy = lcdy*2;
SetPos(lcdx,lcdy);
asc_ptr = ASC_MSK + (value-0x20)*ASC_CHR_HEIGHT-(16-ASC_CHR_HEIGHT);
for(i=0;i<16;i++) //写16行
{
if(i==8)
{
lcdy++;
SetPos(lcdx,lcdy);
}
write_data(*asc_ptr++);
}
EA = 1;
}
/*------------------在制定位置显示'|'-----------------------------*/
void DispRow(uchar lcd_x,uchar lcd_y)
{
EA = 0;
if(lcd_x>=64)
{
lcd_x = lcd_x-64;
Mcs=0;
Scs=1;
}else
{
Mcs=1;
Scs=0;
}
write_com(Col_Add+lcd_x);
write_com(Page_Add+lcd_y);
write_data(0xfe);
write_com(Col_Add+lcd_x);
write_com(Page_Add+lcd_y+1);
write_data(0x7f);
EA = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -