📄 19264.c
字号:
#include<reg51.h>
#include<stdio.h>
#define uchar unsigned char
uchar data Column;/*定义列*/
uchar data Page;/*定义页*/
uchar *p;/*建立数组指针*/
uchar data i,j,k,Disp_Page;
uchar data z;/*汉字数组的页,为实际点阵列数除以8*/
uchar data y;/*汉字数组的列,为实际点阵行数*/
uchar q;/*判忙*/
sbit E=P3^0;/*读写使能信号,1有效*/
sbit R_W=P3^1;/*读写选择信号;1为读选通,0为写选通*/
sbit RS=P3^2;
sbit D_I=P3^2;/*数据指令选择信号;1为数据操作,0为写指令或读状态*/
sbit CSB=P3^3;
sbit CSA=P3^4;/*芯片片选信号*/
char code Hanzi[126][3]= /*汉字数组*/
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,
0x7E,0x00,0x20,0x7E,0x00,0x60,0x07,0x00,0xF1,0x2F,0x00,0xFF,0x7F,0x00,0xFF,0xFF,
0x01,0xFE,0xFF,0x01,0xD8,0xFF,0x00,0xD8,0xD7,0x01,0x88,0xF0,0x01,0x80,0xFF,0x01,
0x80,0x7F,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x80,0x03,0x00,0xC0,0xC3,
0x03,0xE0,0xC9,0x03,0xE0,0xDC,0x00,0xF0,0xCE,0x01,0xFE,0x5F,0x01,0xFE,0xFF,0x03,
0xFC,0xFF,0x03,0xFC,0x27,0x00,0x70,0xA7,0x00,0x30,0xE0,0x01,0x00,0xC0,0x01,0x00,
0x80,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,0x3F,0x00,0xE0,0x7F,0x00,
0xE0,0xE3,0x00,0xC8,0xF7,0x00,0xEC,0xFE,0x00,0xEC,0xBF,0x00,0xEC,0xBF,0x01,0xEC,
0xBF,0x01,0x04,0x9F,0x01,0x1C,0xC7,0x01,0xF8,0xFF,0x01,0xF0,0xFF,0x00,0x80,0x7F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x80,0x01,0x00,0x98,0x01,0x78,
0xB8,0x01,0xF8,0xD9,0x00,0xF0,0xFD,0x00,0xFE,0xFF,0x00,0xFE,0xF7,0x00,0xFE,0xFF,
0x00,0xFA,0xFF,0x00,0x7E,0xCE,0x00,0x3C,0xCE,0x00,0x18,0xC0,0x00,0x00,0xC0,0x01,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x80,0x1F,0x00,0x80,0x3F,0x00,0xC0,0x3E,
0x00,0xCC,0x3F,0x00,0xFE,0x7F,0x00,0xFC,0xFF,0x00,0xF8,0xDF,0x00,0x20,0xDF,0x00,
0x20,0xDF,0x00,0xE0,0xC7,0x00,0xE0,0xC3,0x00,0xC0,0x01,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,0x1C,0x00,0x30,0x3E,0x00,
0x3C,0x6E,0x00,0x3E,0xC7,0x00,0xFC,0x83,0x01,0xF6,0x81,0x01,0xFF,0xFF,0x01,0xDF,
0xFF,0x01,0x8E,0x7F,0x00,0x86,0x03,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void WCom_L(uchar);/*写左半屏指令*/
void WCom_M(uchar);/*写中半屏指令*/
void WCom_R(uchar);/*写右半屏指令*/
void Clearlcd();/*清屏*/
void Imim();/*初始化*/
void Dat_L(uchar);/*送左半屏显示*/
void Dat_M(uchar);/*送中半屏显示*/
void Dat_R(uchar);/*送右半屏显示*/
void Delay();/*延时*/
void W_byte();/*写一个字节*/
void Hanz();/*写汉字*/
/********************主程序********************/
void main()
{
Delay();
Delay();
Delay();/*延时*/
Imim();/*初始化*/
p=Hanzi;/*指针指向数组的首地址*/
Page=2; /*自定义,液晶上显示汉字的起始页*/
Column=25;/*自定义,液晶上显示汉字的起始列*/
y=126;
z=3;
Hanz();/*写汉字程序*/
loop:goto loop;
}
/********************写左半屏指令子程序********************/
void WCOM_L(uchar d) /*写指令程序*/
{
CSA=0;
CSB=0;/*左半屏片选*/
R_W=1;
D_I=0;/*读状态指令*/
Loop:
P1=0xFF;
E=1;/*使能有效*/
q=P1;/*将p1口状态读入*/
E=0;/*关闭使能信号*/
if(q&0x80)/*判断左半屏是否忙*/
{
goto Loop;/*若忙,循环等待*/
}
R_W=0;/*写数据指令*/
P1=d;/*将数据送入p1口*/
E=1;
E=0;
CSA=1;
CSB=1;/*屏处于未选状态*/
}
/********************写中半屏指令子程序********************/
void WCOM_M(uchar d) /*写指令程序*/
{
CSA=0;
CSB=1;/*中半屏片选*/
R_W=1;
D_I=0;/*读状态指令*/
Loop1:
P1=0xFF;
E=1;/*使能*/
q=P1;
E=0;
if(q&0x80)
{
goto Loop1;
}/*判断中半屏是否忙*/
R_W=0;/*写数据*/
P1=d;
E=1;
E=0;
CSA=1;
CSB=1;/*屏处于未选状态*/
}
/********************写右半屏指令子程序********************/
void WCOM_R(uchar d) /*写指令程序*/
{
uchar q;
CSA=1;
CSB=0;/*右半屏片选*/
R_W=1;
D_I=0;
Loop2:
P1=0xFF;
E=1;/*使能*/
q=P1;
E=0;
if(q&0x80)
{
goto Loop2;
}/*判断右半屏是否忙*/
R_W=0;/*写数据*/
P1=d;
E=1;
E=0;
CSA=1;
CSB=1;/*屏处于未选状态*/
}
/********************送左半屏显示字符子程序********************/
void Dat_L(uchar d)
{
CSA=0;
CSB=0;/*左半屏片选*/
R_W=1;
D_I=0;/*读状态指令*/
Loop:
P1=0xFF;
E=1;/*使能*/
q=P1;
E=0;
if(q&0x80)
{
goto Loop;
}/*判忙*/
D_I=1;
R_W=0;/*写数据指令*/
P1=d;
E=1;
E=0;
CSA=1;
CSB=1;
}
/********************送中半屏显示字符子程序********************/
void Dat_M(uchar d)
{
CSA=0;
CSB=1;/*中半屏片选*/
R_W=1;
D_I=0;
Loop1:
P1=0xFF;
E=1;/*使能*/
q=P1;
E=0;
if(q&0x80)
{
goto Loop1;
}/*判忙*/
D_I=1;
R_W=0;/*写数据指令*/
P1=d;
E=1;
E=0;
CSA=1;
CSB=1;
}
/********************送右半屏显示字符子程序********************/
void Dat_R(uchar d)
{
CSA=1;
CSB=0;/*右半屏片选*/
R_W=1;
D_I=0;
Loop2:
P1=0xFF;
E=1;/*使能*/
q=P1;
E=0;
if(q&0x80)
{
goto Loop2;
}/*判忙*/
D_I=1;
R_W=0;/*写数据指令*/
P1=d;
E=1;
E=0;
CSA=1;
CSB=1;
}
/********************初始化子程序********************/
void Imim()
{
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
CSA=1;
CSB=1; /*屏幕处于未选状态*/
E=0;
Delay();
WCOM_L(0x3E);/*关显示指令*/
WCOM_M(0x3E);/*关显示指令*/
WCOM_R(0x3E);/*关显示指令*/
WCOM_L(0xC0);/*设置起始行*/
WCOM_M(0xC0);
WCOM_R(0xC0);
Clearlcd();
WCOM_L(0x3F);/*开显示指令*/
WCOM_M(0x3F);/*开显示指令*/
WCOM_R(0x3F);/*开显示指令*/
}
/********************延时子程序********************/
void Delay()
{
uchar data i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
/********************清屏子程序********************/
void Clearlcd()
{
for(i=0;i<8;i++)
{
Disp_Page=i|0xb8;/*设置页地址*/
WCOM_L(Disp_Page);/*送入左半屏*/
WCOM_L(0x40);/*设置列地址*/
for(j=0;j<64;j++)
{Dat_L(0x00);}
} /*左半屏清屏*/
for(i=0;i<8;i++)
{
Disp_Page=i|0xb8;/*设置页地址*/
WCOM_M(Disp_Page);/*送入中半屏*/
WCOM_M(0x40);/*设置列地址*/
for(j=0;j<64;j++)
{Dat_M(0x00);}
} /*中半屏清屏*/
for(i=0;i<8;i++)
{
Disp_Page=i|0xb8;/*设置页地址*/
WCOM_R(Disp_Page);/*送入右半屏*/
WCOM_R(0x40);/*设置列地址*/
for(j=0;j<64;j++)
{Dat_R(0x00);}
} /*右半屏清屏*/
}
/********************汉字主程序********************/
void Hanz()
{
uchar data i;
uchar data j;
char *p1;
uchar data Column1;
uchar data Page1;
p1=p; /*建立指针,使其与数组指针相对应*/
Column1=Column;/*与全局变量列相对应*/
Page1=Page; /*与全局变量页相对应*/
for(i=0;i<z;i++) /*页循环*/
{
for(j=0;j<y;j++) /*列循环*/
{
W_byte(); /*写一列*/
Column=Column++;
p=p+z;
}
Page++; /*下一页*/
p1=p1++;
p=p1; /*指针对应数组下一首地址*/
Column=Column1;/*将列量送回*/
}
}
/********************汉字子程序********************/
void W_byte ()/*在page和column位置写一字节*/
{
char idata wbyte;
uchar num_col;
uchar num_page;
wbyte=*p; /*送进数组头地址*/
if(Column<64) /*判断对哪一个屏进行操作*/
{
num_page=Page|0xb8;
WCOM_L(num_page);/*设置页地址*/
num_col=Column|0x40;
WCOM_L(num_col);/*设置列地址*/
Dat_L(wbyte); /*写入数据*/
}
else if(Column<128)
{
num_page=Page|0xb8;
WCOM_M(num_page);/*设置页地址*/
num_col=(Column-64)|0x40;
WCOM_M(num_col);/*设置列地址*/
Dat_M(wbyte);
}
else if(Column<192)
{
num_page=Page|0xb8;
WCOM_R(num_page); /*设置页地址*/
num_col=(Column-128)|0x40;
WCOM_R(num_col);/*设置列地址*/
Dat_R(wbyte);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -