#include "reg51.h"
#include "intrins.h"
#define LCD_DB P0 //LCD12864显示数据接口定义
typedef unsigned char u8;
typedef unsigned int u16;
sbit LCD_RS=P3^7; //定义LCD12864使用的IO口
sbit LCD_RW=P3^6;
sbit LCD_EN=P3^5;
sbit DSdat=P3^4;
void display();
void clrgdram(void);
code char dis[]={
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,
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,
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,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0X00,0X00,0X1F,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XE0,0X00,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XF8,0X03,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFE,0X0F,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XBF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XFF,0X8F,0XFF,0XFF,0XFE,0X3F,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XFC,0X03,0XFF,0XFF,0XF0,0X07,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XF8,0X00,0XFF,0XFF,0XE0,0X07,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XF8,0X00,0X3F,0XFF,0X80,0X03,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XFC,0X00,0X7F,0XFF,0XC0,0X07,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XFC,0X01,0XFF,0XFF,0XF0,0X0F,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X07,0XFF,0X07,0XFF,0XFF,0XFC,0X1F,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X07,0XFF,0XC7,0XFF,0XFF,0XF8,0X7F,0XFC,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X03,0XFF,0XE1,0XFF,0X1F,0XF1,0XFF,0XF8,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0XFF,0XF8,0X7C,0X0F,0XC3,0XFF,0XE0,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X10,0X03,0X0F,0XFF,0XC0,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0X00,0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X7E,0X00,0X00,0X07,0XFF,0XC0,0X00,0X7F,0XFC,0X00,0X00,0X0F,0X80,0X00,
0X00,0X07,0XFF,0XF0,0X00,0X63,0XFF,0XF0,0X01,0XFF,0XF0,0XC0,0X01,0XFF,0XFC,0X00,
0X00,0X3F,0XFF,0XFC,0X01,0XF8,0XFF,0XF8,0X07,0XFF,0XE3,0XF0,0X07,0XFF,0XFF,0X00,
0X00,0X7F,0XFF,0XFF,0X07,0XFC,0X3F,0XFE,0X0F,0XFF,0X87,0XFC,0X1F,0XFF,0XFF,0XC0,
0X01,0XFF,0XFF,0XFF,0XDF,0XFF,0X1F,0XFF,0XBF,0XFE,0X1F,0XFE,0X7F,0XFF,0XFF,0XE0,
0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0X07,0XFF,0XFF,0XFC,0X1F,0XFF,0XFF,0XFF,0XFF,0XF0,
0X03,0XFF,0X81,0XFF,0XFF,0XFC,0X01,0XFF,0XFF,0XF0,0X07,0XFF,0XFF,0XE0,0X3F,0XF8,
0X07,0XFF,0X00,0X7F,0XFF,0XF0,0X00,0XFF,0XFF,0XC0,0X01,0XFF,0XFF,0XC0,0X1F,0XF8,
0X07,0XFE,0X00,0X1F,0XFF,0XC0,0X00,0X3F,0XFF,0X80,0X00,0XFF,0XFF,0X00,0X0F,0XF8,
0X07,0XFE,0X00,0X1F,0XFF,0XC0,0X00,0X3F,0XFF,0X80,0X00,0XFF,0XFF,0X00,0X0F,0XF8,
0X03,0XFF,0X00,0X7F,0XFF,0XF0,0X00,0XFF,0XFF,0XE0,0X01,0XFF,0XFF,0XC0,0X1F,0XF8,
0X03,0XFF,0X81,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XF8,0X07,0XFF,0XFF,0XF0,0X7F,0XF8,
0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0X07,0XFF,0XFF,0XFC,0X1F,0XFF,0XFF,0XFF,0XFF,0XF0,
0X00,0XFF,0XFF,0XFF,0X8F,0XFE,0X1F,0XFF,0X3F,0XFF,0X1F,0XFE,0X7F,0XFF,0XFF,0XE0,
0X00,0X7F,0XFF,0XFE,0X03,0XFC,0X7F,0XFE,0X0F,0XFF,0XC7,0XF8,0X1F,0XFF,0XFF,0XC0,
0X00,0X1F,0XFF,0XFC,0X01,0XF0,0XFF,0XF8,0X07,0XFF,0XE1,0XE0,0X07,0XFF,0XFF,0X00,
0X00,0X07,0XFF,0XE0,0X00,0X43,0XFF,0XE0,0X01,0XFF,0XF8,0XC0,0X00,0XFF,0XF8,0X00,
0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XC0,0X00,0X7F,0XFC,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0X00,0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X30,0X03,0X0F,0XFF,0XC0,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X01,0XFF,0XF8,0XFC,0X0F,0XC3,0XFF,0XE0,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X03,0XFF,0XE1,0XFF,0X3F,0XF1,0XFF,0XF8,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X07,0XFF,0X87,0XFF,0XFF,0XF8,0X7F,0XFC,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XFF,0X07,0XFF,0XFF,0XFC,0X1F,0XFC,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XFC,0X01,0XFF,0XFF,0XF0,0X0F,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X7F,0XFF,0XC0,0X07,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X1F,0XF8,0X00,0X7F,0XFF,0X80,0X03,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XF8,0X00,0XFF,0XFF,0XE0,0X07,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XFC,0X03,0XFF,0XFF,0XF0,0X0F,0XFE,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X0F,0XFF,0X9F,0XFF,0XFF,0XFE,0X7F,0XFC,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFC,0X0F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XF8,0X03,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XE0,0X00,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X00,0X00,0X1F,0XFC,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,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,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};
void delay_12864(u16 del) //LCD12864延时函数
{
u16 i;
for(i = 0; i < del; i++);
}
/***********************************************************************/
/**********12864初始化********************************************/
/***********************************************************************/
u8 busy() //忙判断函数
{
u8 s;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delay_12864(50);
s=P0;
delay_12864(50);
LCD_EN=0;
return s;
}
void LCD_write_command(u8 command) //LCD12864写指令函数
{
while((busy()&&0x80)==0x80);
LCD_EN=0;
LCD_RS=0; //写指令
LCD_RW=0; //写入
LCD_DB=command;//赋值给D0-D7对应的IO引脚
delay_12864(50);
LCD_EN=1; //允许
delay_12864(50);
LCD_EN=0;
}
void LCD_write_data(u8 dat) //LCD12864写数据函数
{
while((busy()&&0x80)==0x80);
LCD_EN=0;
LCD_RS=1; //写数据
LCD_RW=0; //写入
LCD_DB=dat;//赋值给D0-D7对应的IO引脚
delay_12864(50);
LCD_EN=1; //允许
delay_12864(50);
LCD_EN=0;
}
void LCD_init(void) //初始化LCD12864显示设置函数
{
DSdat=1;
delay_12864(10000);
LCD_write_command(0x30);//功能设置
delay_12864(20);
LCD_write_command(0x30);//功能设置
delay_12864(20);
LCD_write_command(0x0c);//显示开关控制
delay_12864(20);
LCD_write_command(0x01);//显示清除
delay_12864(120);
LCD_write_command(0x06);//显示清除
delay_12864(50);
}
void clrgdram(void) // 清整个GDRAM空间
{
char i,j;
LCD_write_command(0x34);
LCD_write_command(0x34);
for(j=0;j<32;j++)
{
LCD_write_command(0x80+j);
LCD_write_command(0x80);
for(i=0;i<16;i++)
{
LCD_write_data(0x00);
}
}
for(j=0;j<32;j++)
{
LCD_write_command(0x80+j);
LCD_write_command(0x88);
for(i=0;i<16;i++)
{
LCD_write_data(0x00);
}
}
LCD_write_command(0x36);
LCD_write_command(0x30);
}
/*************************************************************************/
/**************************************************************************/
void LCD_SHOW1(char*p) //图形显示函数
{
char i,j;
clrgdram();
LCD_write_command(0x34);
LCD_write_command(0x34);
for(j=0;j<32;j++)
{
LCD_write_command(0x80+j);
LCD_write_command(0x80);
for(i=0;i<16;i++)
{
LCD_write_data(*p);
p++;
}
}
for(j=0;j<32;j++)
{
LCD_write_command(0x80+j);
LCD_write_command(0x88);
for(i=0;i<16;i++)
{
LCD_write_data(*p);
p++;
delay_12864(10);
}
}
LCD_write_command(0x36);
LCD_write_command(0x30);
}
void main() //主函数
{
LCD_init();
while(1)
{
LCD_SHOW1(dis);
}
}
|