📄 lcd.c
字号:
/*---------------判LCM忙子函数---------------*/
void lcd_busy(void)
{
uchar val;
RS_0;_NOP();_NOP();
RW_1;_NOP();_NOP();
DataPort=0x00;
while(1)
{
EN_1;_NOP();_NOP();
DDRA=0x00;
val=PINA;
if(val<0x80) break;
EN_0;_NOP();_NOP();
}
DDRA=0xff;
EN_0;_NOP();_NOP();
}
/*--------------写指令到LCM子函数---------------*/
void wcode(uchar c,uchar sel_l,uchar sel_r)
{
if(sel_l==1)CS1_1;
else CS1_0;
_NOP();_NOP();
if(sel_r==1)CS2_1;
else CS2_0;
_NOP();_NOP();
lcd_busy();
RS_0;_NOP();_NOP();
RW_0;_NOP();_NOP();
DataPort=c;
EN_1;_NOP();_NOP();
EN_0;_NOP();_NOP();
}
/*---------------写数据到LCM子函数-------------*/
void wdata(uchar c,uchar sel_l,uchar sel_r)
{
if(sel_l==1)CS1_1;
else CS1_0;
_NOP();_NOP();
if(sel_r==1)CS2_1;
else CS2_0;
_NOP();_NOP();
lcd_busy();
RS_1;_NOP();_NOP();
RW_0;_NOP();_NOP();
DataPort=c;
EN_1;_NOP();_NOP();
EN_0;_NOP();_NOP();
}
/*根据x、y地址定位,将数据写入LCM左半屏或右半屏的子函数*/
void lw(uchar x, uchar y, uchar dd)
{
if(x>=64)
{set_xy(x-64,y);
wdata(dd,0,1);}
else
{set_xy(x,y);
wdata(dd,1,0);}
}
/*---------------设定起始行子函数--------------*/
void set_startline(uchar i)
{
i=0xc0+i;
wcode(i,1,1);
}
/*---------------定位x方向、y方向的子函数--------------*/
void set_xy(uchar x,uchar y)
{
x=x+0x40;
y=y+0xb8;
wcode(x,1,1);
wcode(y,1,1);
}
/*---------------屏幕开启、关闭子函数--------------*/
void dison_off(uchar o)
{
o=o+0x3e;
wcode(o,1,1);
}
/*---------------复位子函数---------------*/
void reset(void)
{
RST_0;
Delay_nms(10);
RST_1;
Delay_nms(10);
}
/*--------------LCM初始化子函数-------------*/
void lcd_init(void)
{uchar x,y;
reset();
set_startline(0);
dison_off(0);
for(y=0;y<8;y++)
{
for(x=0;x<128;x++)lw(x,y,0);
}
dison_off(1);
}
/*---------------显示一个汉字子函数--------------*/
void display_hz(uchar xx, uchar yy, uchar n, uchar fb,uchar const *p)
{
uchar i,dx;
for(i=0;i<16;i++)
{dx=p[2*i+n*32];
if(fb)dx=255-dx;
lw(xx*8+i,yy,dx);
dx=p[(2*i+1)+n*32];
if(fb)dx=255-dx;
lw(xx*8+i,yy+1,dx);
}
}
/******************************************/
void display_chinese(void)
{
uchar loop;
for(loop=0;loop<8;loop++)
{display_hz(2*loop,0,loop,1,chinese);}
/****************************************/
for(loop=0;loop<8;loop++)
{display_hz(2*loop,2,loop+8,1,chinese);}
/**************************************/
for(loop=0;loop<8;loop++)
{display_hz(2*loop,4,loop+16,1,chinese);}
/*******************************************/
for(loop=0;loop<8;loop++)
{display_hz(2*loop,6,loop+24,1,chinese);}
}
/****************************************/
/* 一个字串的输出 */
/****************************************/
void Putstr(uchar const *puts,uchar i)
{
uchar j,X;
for (j=0;j<i;j++)
{
X = puts[j];
Putedot(X-0x20); /*ascii码表从0x20开始*/
}
}
/****************************************/
/* 半角字符点阵码数据输出 */
/****************************************/
void Putedot(uchar Order)
{
uchar i,bakerx,bakery; /*共定义4个局部变量 */
int x; /*偏移量,字符量少的可以定义为UCHAR */
bakerx = col; /*暂存x,y坐标,已备下半个字符使用 */
bakery = row;
x=Order*16; /*半角字符,每个字符16字节 */
/*上半个字符输出,8列 */
for(i=0;i<8;i++)
{
cbyte = Ezk[x]; /*取点阵码,rom数组 */
lw(col,row,cbyte); /*写输出一字节 */
x++;
col++;
if (col==128){col=0;row++;row++;}; /*下一列,如果列越界换行*/
if (row>7) row=0; /*如果行越界,返回首行 */
} /*上半个字符输出结束 */
col = bakerx; /*列对齐 */
row = bakery+1; /*指向下半个字符行 */
/*下半个字符输出,8列 */
for(i=0;i<8;i++)
{
cbyte = Ezk[x]; /*取点阵码 */
lw(col,row,cbyte); /*写输出一字节 */
x++;
col++;
if (col==128){col=0;row=row+2;}; /*下一列,如果列越界换行*/
if (row>7) row=1; /*如果行越界,返回首行 */
} /*下半个字符输出结束 */
row=bakery;
} /*整个字符输出结束 */
/******************************************************/
/*---------------显示一幅图片的子函数--------------*/
/******************************************************/
void display_tu(uchar fb)
{
uchar i,dx,n;
for(n=0;n<8;n++)
{
for(i=0;i<128;i++)
{dx=tu[i+n*128];
if(fb)dx=255-dx;
lw(i,n,dx);
}
}
}
/****************************************/
/* 定义ASCII字库8列*16行 */
/****************************************/
uchar const Ezk[]={
/*-文字: --0x20 */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-文字:!--0x21 */
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x00,
/*-文字:"--0x22 */
0x00,0x08,0x04,0x02,0x08,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-文字:#--0x23 */
0x40,0x40,0xF8,0x40,0x40,0xF8,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,
/*-文字:$--0x24 */
0x00,0x70,0x88,0xFC,0x08,0x08,0x30,0x00,0x00,0x1C,0x20,0xFF,0x21,0x22,0x1C,0x00,
/*-文字:%--0x25 */
0xF0,0x08,0xF0,0x80,0x70,0x08,0x00,0x00,0x00,0x31,0x0E,0x01,0x1E,0x21,0x1E,0x00,
/*-文字:&--0x26 */
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x18,0x16,0x20,0x00,
/*-文字:'--0x27 */
0x20,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-文字:(--0x28 */
0x00,0x00,0x00,0x00,0xC0,0x30,0x08,0x04,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x20,
/*-文字:)--0x29 */
0x04,0x08,0x30,0xC0,0x00,0x00,0x00,0x00,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,
/*-文字:*--0x2a */
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,
/*-文字:+--0x2b */
0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,0x00,
/*-文字:,--0x2c */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
/*-文字:---0x2d */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
/*-文字:.--0x2e */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
/*-文字:/--ox2f */
0x00,0x00,0x00,0x00,0x00,0xE0,0x18,0x04,0x00,0x40,0x30,0x0C,0x03,0x00,0x00,0x00,
/*-文字:0--0x30 */
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-文字:1--0x31 */
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-文字:2--0x32 */
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*-文字:3--0x33 */
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-文字:4--0x34 */
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*-文字:5--0x35 */
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*-文字:6--0x36 */
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-文字:7--0x37 */
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*-文字:8--0x38 */
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*-文字:9--0x39 */
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
/*-文字::-- */
0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
/*-文字:/-- */
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,
/*-文字:<-- */
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,
/*-文字:=-- */
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
/*-文字:>-- */
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,
/*-文字:?-- */
0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x00,
/*-文字:@-- */
0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x28,0x27,0x28,0x07,0x00,
/*-文字:A-- */
0x00,0x00,0xE0,0x18,0x18,0xE0,0x00,0x00,0x30,0x0F,0x04,0x04,0x04,0x04,0x0F,0x30,
/*-文字:B-- */
0xF8,0x08,0x08,0x08,0x08,0x90,0x60,0x00,0x3F,0x21,0x21,0x21,0x21,0x12,0x0C,0x00,
/*-文字:C-- */
0xE0,0x10,0x08,0x08,0x08,0x10,0x60,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0C,0x00,
/*-文字:D-- */
0xF8,0x08,0x08,0x08,0x08,0x10,0xE0,0x00,0x3F,0x20,0x20,0x20,0x20,0x10,0x0F,0x00,
/*-文字:E-- */
0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x20,0x00,
/*-文字:F-- */
0xF8,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x3F,0x01,0x01,0x01,0x01,0x01,0x00,0x00,
/*-文字:G-- */
0xE0,0x10,0x08,0x08,0x08,0x10,0x60,0x00,0x0F,0x10,0x20,0x20,0x21,0x11,0x3F,0x00,
/*-文字:H-- */
0x00,0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x3F,0x01,0x01,0x01,0x01,0x3F,0x00,
/*-文字:I-- */
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*-文字:J-- */
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x1C,0x20,0x20,0x20,0x20,0x1F,0x00,
/*-文字:K-- */
0x00,0xF8,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x3F,0x01,0x00,0x03,0x04,0x18,0x20,
/*-文字:L-- */
0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
/*-文字:M-- */
0xF8,0xE0,0x00,0x00,0x00,0xE0,0xF8,0x00,0x3F,0x00,0x0F,0x30,0x0F,0x00,0x3F,0x00,
/*-文字:N-- */
0x00,0xF8,0x30,0xC0,0x00,0x00,0xF8,0x00,0x00,0x3F,0x00,0x01,0x06,0x18,0x3F,0x00,
/*-文字:O-- */
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-文字:P-- */
0xF8,0x08,0x08,0x08,0x08,0x10,0xE0,0x00,0x3F,0x02,0x02,0x02,0x02,0x01,0x00,0x00,
/*-文字:Q-- */
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x2C,0x10,0x2F,0x00,
/*-文字:R-- */
0xF8,0x08,0x08,0x08,0x08,0x90,0x60,0x00,0x3F,0x01,0x01,0x01,0x07,0x18,0x20,0x00,
/*-文字:S-- */
0x60,0x90,0x88,0x08,0x08,0x10,0x20,0x00,0x0C,0x10,0x20,0x21,0x21,0x12,0x0C,0x00,
/*-文字:T-- */
0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -