头文件略-----------------
程序段1:(这些位定义都有什么用??)
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
sbit RES = P2^3;
sbit PSB = P2^1;
sbit PAUSE = P3^0;
延时子程序略-------------------
程序段2:(忙位检测是什么原理,为什么要有这段程序??)
void Check_Busy() //忙位检测
{
RS=0;
RW=1;
E=1;
DataPort=0xff;
while((DataPort&0x80)==0x80);//忙则等待???
E=0;
}
程序段3:(为什么要有写命令,写数据,都是什么意思)
void Write_order(unsigned char order) // 写命令
{
Check_Busy();
RS=0;
RW=0;
E=1;
DataPort=order;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
void Write_Data(unsigned char Data) //写数据
{
Check_Busy();
RS=1;
RW=0;
E=1;
DataPort=Data;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
程序段4:(如何实现所谓的初始化的??)
void Init_ST7920() //屏幕初始化
{
DelayMs(40);
PSB=1; //设置为8BIT并口工作模式
DelayMs(1);
RES=0; //复位
DelayMs(1);
RES=1; //复位置高
DelayMs(10);
Write_order(0x30); //选择基本指令集
DelayUs2x(50);
Write_order(0x30); //选择8bit数据流
DelayUs2x(20);
Write_order(0x0c); //开显示(无游标、不反白)
DelayUs2x(50);
Write_order(0x01); //清除显示,并且设定地址指针为00H
DelayMs(15);
Write_order(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动
DelayUs2x(50);
}
程序段5:(定义格式是什么原理实现的?)
void Admin() //自定义显示的字符 格式
{
int i;
Write_order(0x30);
Write_order(0x40);
for(i=0;i<16;i++)
{
Write_Data(user16x16[i*2]);
Write_Data(user16x16[i*2+1]);
}
}
程序段6:(x,y的坐标是如何产生的?为什么这么定义)
void DisplayAdmin(unsigned char x,unsigned char y) // 显示用户自定义字符
{
switch(y)
{
case 1: Write_order(0x80+x);break;
case 2: Write_order(0x90+x);break;
case 3: Write_order(0x88+x);break;
case 4: Write_order(0x98+x);break;
default:break;
}
Write_Data(00);
Write_Data(00);
}
while(*s>0)
{
Write_Data(*s);
s++;
DelayUs2x(50);
}
}
程序段7:(为何要分上,下屏显示??)
//显示图片
void LCD_PutGraphic(unsigned char code *img)
{
int i,j;
//显示上半屏内容设置
for(i=0;i<32;i++)
{
Write_order(0x80 + i); //SET 垂直地址 VERTICAL ADD
Write_order(0x80); //SET 水平地址 HORIZONTAL ADD
for(j=0;j<16;j++)
{
Write_Data(*img);
img++;
}
}
//显示下半屏内容设置
for(i=0;i<32;i++)
{
Write_order(0x80 + i); //SET 垂直地址 VERTICAL ADD
Write_order(0x88); //SET 水平地址 HORIZONTAL ADD
for(j=0;j<16;j++)
{
Write_Data(*img);
img++;
}
}
主程序(略)------------