📄 9632lcd.c
字号:
/*LCD LM19264KBC显示验证程序,静态显示0x0f,即横条纹,AT89S52、11.0592MHZ晶振 090119v2*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char//变量类型的宏定义
#define uint unsigned int//变量类型的宏定义
#define LCD_BUS P0 //DB0-DB7(9-16) databus line=P0
sbit _RST=P2^7;
sbit E1=P2^6;
sbit E2=P2^5;
sbit R_W=P2^4;
sbit A0=P2^3;
sbit LED=P1^2;
//num[10][5]="-",num[11][5]=".",num[12][5]="c",num[13][5]="+",
uchar code num[14][5]={{0xff,0x81,0x81,0xff,0x00},{0x81,0x81,0xff,0x01,0x00},{0x9f,0x91,0x91,0xf1,0x00},{0x91,0x91,0x91,0xff,0x00},{0xf8,0x08,0x7f,0x08,0x00},{0xf1,0x91,0x91,0x9f,0x00},{0xff,0x91,0x91,0x9f,0x00},{0x80,0x80,0x80,0xff,0x00},{0xff,0x91,0x91,0xff,0x00},{0xf0,0x90,0x90,0xff,0x00},{0x10,0x10,0x10,0x10,0x00},{0x00,0x06,0x06,0x00,0x00},{0x80,0x3c,0xc3,0x81,0x81},{0x10,0x10,0xff,0x10,0x10}};
uchar code time_1[11][8]={{0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00},{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00},{0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00},{0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00},{0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00},{0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00},{0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00},{0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00},{0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00},{0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00},{0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00}};
uchar code time_2[11][8]={{0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00},{0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00},{0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00},{0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00},{0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00},{0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00},{0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00},{0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00},{0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00},{0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00},{0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00}};
uchar time[8]={0,0,0x0a,0,0,0x0a,0,0};
uchar date[10]={2,0,0,9,0x0a,0,1,0x0a,0,1};
uchar temp[7]={0x0d,0,2,5,0x0b,5,0x0c};
//sbit CS1=P3^4;
//sbit CS2=P3^3;
//sbit CS3=P3^1;
//sbit E=P3^7;
//sbit RS=P3^6;
//-------------
//延时子程序
//-------------
void delay(uint t)
{
uint i;
uint j;
for(j=0;j<t;j++);
for(i=0;i<200;i++);
_nop_();
}
//-------------
//E1写命令到LCD
//-------------
void CmdWrite_E1(uchar cmdcode)
{
A0=0;
R_W=0;
delay(5);
E1=1;
LCD_BUS=cmdcode;
delay(5);
E1=0; //E从高到低下降沿将命令送入显示器
E1=1;
}
//-------------
//E1写数据到LCD
//-------------
void DataWrite_E1(uchar dispdata)
{
A0=1;
R_W=0;
delay(5);
E1=1;
LCD_BUS=dispdata;
delay(5);
E1=0; //E从高到低下降沿将数据送入显示器
E1=1;
}
//-------------
//E2写命令到LCD
//-------------
void CmdWrite_E2(uchar cmdcode)
{
A0=0;
R_W=0;
delay(5);
E2=1;
LCD_BUS=cmdcode;
delay(5);
E2=0; //E从高到低下降沿将命令送入显示器
E2=1;
}
//-------------
//E2写数据到LCD
//-------------
void DataWrite_E2(uchar dispdata)
{
A0=1;
R_W=0;
delay(5);
E2=1;
LCD_BUS=dispdata;
delay(5);
E2=0; //E从高到低下降沿将数据送入显示器
E2=1;
}
//-------------
//初始化
//-------------
void init9632(void)
{
_RST=0;
delay(300);
_RST=1;
delay(100);
CmdWrite_E1(0xa4);
CmdWrite_E2(0xa4);//正常显示
CmdWrite_E1(0xa9);
CmdWrite_E2(0xa9);//选择占空比1/32
CmdWrite_E1(0xa1);
CmdWrite_E2(0xa1);//选择ADC counterclockwise output
CmdWrite_E1(0xc0);
CmdWrite_E2(0xc0);//选择起始行
CmdWrite_E1(0xaf);
CmdWrite_E2(0xaf);//显示开
}
//-------------
//清屏,参数可选
//-------------
void Clearscr(uchar w)
{
uchar i,j;
for(i=0;i<4;i++) //显示器存储空间(页/行)选择设置.i<4
{
CmdWrite_E1(0xb8+i); //E1页地址设置
CmdWrite_E2(0xb8+i); //E2页地址设置
CmdWrite_E1(0x20); //E1列地址设置 列地址从32开始(0x20),到4F,共48列
CmdWrite_E2(0x20); //E2列地址设置 列地址从32开始(0x20),到4F,共48列
for(j=0;j<48;j++)
{
DataWrite_E1(w);
DataWrite_E2(w);
}
}
}
//-------------
//写E1屏幕
//-------------
//定位数据需要写到哪一位置,后续数据若接着往下写则直接调用WriteScreen_E1()
void WriteScreen_E1_position(uchar i,uchar j) //i:页地址(行),i<4;j列地址.
{
CmdWrite_E1(0xb8+i); //E1页地址设置
CmdWrite_E1(0x20+j); //E1列地址设置
}
//写数据
void WriteScreen_E1(uchar **w,uchar x,uchar y) //**w数据指针数组, x:数组一维第x个数,指代数字1-9;y:数组二维个数
{
uchar h;
for(h=0;h<y;h++)
{
DataWrite_E1(*((uchar *)w + x*y + h)); //写数据
}
}
//-------------
//写E2屏幕
//-------------
//定位数据需要写到哪一位置,后续数据若接着往下写则直接调用WriteScreen_E1()
void WriteScreen_E2_position(uchar i,uchar j) //i:页地址(行),i<4;j列地址.
{
CmdWrite_E2(0xb8+i); //E1页地址设置
CmdWrite_E2(0x20+j); //E1列地址设置
}
//写数据
void WriteScreen_E2(uchar **w,uchar x,uchar y) //**w数据指针数组, x:数组一维第x个数,指代数字1-9;y:数组二维个数
{
uchar h;
for(h=0;h<y;h++)
{
DataWrite_E2(*((uchar *)w + x*y + h)); //写数据
}
}
/*
//---------------------------------
//显示第二行信息:时:分:秒
//---------------------------------
void display(void)
{
}
*/
//-------------
//主程序
//-------------
void main()
{
uchar i;
E1=0;
E2=0;
for(i=0;i<=20;i++)
{
LED=0;
delay(3000);
LED=1;
delay(3000);
}
init9632();
// while(1)
// {
Clearscr(0xff);
LED=1;
delay(9000);
Clearscr(0xf0);
LED=0;
delay(9000);
LED=1;
Clearscr(0x0f);
delay(9000);
LED=0;
Clearscr(0x55);
LED=1;
delay(9000);
LED=0;
Clearscr(0x00);
delay(9000);
LED=1;
while(1)
{
WriteScreen_E1_position(0,0);
WriteScreen_E1((uchar **)num,0x09,0x05); //
LED=0;
delay(9000);
WriteScreen_E2_position(0,0);
WriteScreen_E2((uchar **)num,0x09,0x05); //
LED=1;
delay(9000);
WriteScreen_E2_position(3,3);//显示第一行日期、温度信息
for(i=0;i<9;i++)
{
WriteScreen_E2((uchar **)num,date[i],0x05);
}
WriteScreen_E1_position(3,0);
WriteScreen_E1((uchar **)num,date[9],0x05);
WriteScreen_E1_position(3,12);
for(i=0;i<7;i++)
{
WriteScreen_E1((uchar **)num,temp[i],0x05);
}
WriteScreen_E2_position(2,16);//显示第二行信息:时:分:秒
for(i=0;i<4;i++)
{
WriteScreen_E2((uchar **)time_1,time[i],0x08);
}
WriteScreen_E2_position(1,16);
for(i=0;i<4;i++)
{
WriteScreen_E2((uchar **)time_2,time[i],0x08);
}
WriteScreen_E1_position(2,0);//显示第二行信息:时:分:秒
for(i=4;i<8;i++)
{
WriteScreen_E1((uchar **)time_1,time[i],0x08);
}
WriteScreen_E1_position(1,0);
for(i=4;i<8;i++)
{
WriteScreen_E1((uchar **)time_2,time[i],0x08);
}
}
}
/*
//-------------
//写E1屏幕
//-------------
void WriteScreen_E1(uchar i,uchar j,uchar **w,uchar x,uchar y) //i:页地址(行),i<4;j列地址;w:数据 ,uchar w x:数组一维个数;y:数组二维个数
{
uchar n,h;
CmdWrite_E1(0xb8+i); //E1页地址设置
CmdWrite_E1(0x20+j); //E1列地址设置
for(n=0;n<x;n++)
{
for(h=0;h<y;h++)
{
DataWrite_E1(*((uchar *)w + n*y + h)); //写数据
}
}
}
*/
/*
//-------------
//写E1屏幕
//-------------
void WriteScreen_E1(uchar i,uchar j,uchar w[][5],uchar x,uchar y) //i:页地址(行),i<4;j列地址;w:数据 ,uchar w x:数组一维个数;y:数组二维个数
{
uchar n,h;
CmdWrite_E1(0xb8+i); //E1页地址设置
CmdWrite_E1(0x20+j); //E1列地址设置
for(h=0;h<5;h++)
{
DataWrite_E1(w[n][h]); //写数据
}
}
*/
/*
//-------------
//写E1屏幕
//-------------
void WriteScreen_E1(uchar i,uchar j,uchar w[][5],uchar x,uchar y) //i:页地址(行),i<4;j列地址;w:数据 ,uchar w x:数组一维个数;y:数组二维个数
{
uchar n,h;
CmdWrite_E1(0xb8+i); //E1页地址设置
CmdWrite_E1(0x20+j); //E1列地址设置
for(n=0;n<x;n++)
{
for(h=0;h<y;h++)
{
DataWrite_E1(w[n][h]); //写数据
}
}
}
*/
/*
//-------------
//写E1屏幕
//-------------
void WriteScreen_E1(uchar i,uchar j,uchar (*w)[5],uchar x,uchar y) //i:页地址(行),i<4;j列地址;w:数据 ,uchar w x:第x个数字;y:数组二维个数
{
uchar h;
CmdWrite_E1(0xb8+i); //E1页地址设置
CmdWrite_E1(0x20+j); //E1列地址设置
for(h=0;h<y;h++)
{
DataWrite_E1(*(*(w+n)+h)); //写数据
}
}
*/
/*
//-------------
//写E2屏幕
//-------------
void WriteScreen_E2(uchar k,uchar m,uchar v) //k:页地址(行),k<4;m列地址;v:数据
{
uchar p;
CmdWrite_E2(0xb8+k); //E2页地址设置
CmdWrite_E2(0x20+m); //E2列地址设置
for(p=0;p<8;p++)
{
DataWrite_E2(v); //写数据
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -