/*---2010 PAST LCD测试小板通过显示---12:3------*/
/*----S1按下显示-蔡沁钰小朋友--------*/
/*----S2按下显示-百草园小学校--------*/
#include <reg51.h>
#include <intrins.h>
/*定义管脚*/
sbit RS = P1^7;
sbit RW = P1^6;
sbit E = P1^5;
sbit RES = P0^6;
sbit PSB = P0^7;
sbit RED = P3^4;
sbit GREEN= P3^5;
sbit S1= P3^2;
sbit S2= P3^3;
#define Lcd_Bus P2 //MCU P2<------> LCM
/*------------------检查忙位-----------------------------*/
void chk_busy()
{
RS=0;
RW=1;
E=1;
Lcd_Bus=0xff;
while((Lcd_Bus&0x80)==0x80);
E=0;
}
/*------------------延时子程序-----------------------------*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
/*------------------写命令到LCD------------------------------*/
void write_com(unsigned char cmdcode)
{
chk_busy();
RS=0;
RW=0;
E=1;
Lcd_Bus=cmdcode;
delay(5);在数据写入的时候加入适当的延时
E=0;
delay(5);
}
/*-------------------写数据到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
chk_busy();
RS=1;
RW=0;
E=1;
Lcd_Bus=Dispdata;
delay(5);///在数据写入的时候加入适当的延时
E=0;
delay(5);
}
/*------------------初始化LCD屏--------------------------*/
void lcdreset()
{
PSB=0;
delay(300);
PSB=1;
RW=0;
delay(2000);
write_com(0x30);
delay(10); //选择基本指令集
write_com(0x30); //选择8bit数据流
delay(5);
write_com(0x0c); //开显示(无游标、不反白)
delay(10);
write_com(0x01); //清除显示,并且设定地址指针为00H
delay(500);
write_com(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
delay(0);
}
/*------------------显示1-蔡沁钰小朋友---*/
void display1()
{
delay(2000);
write_com(0x80);
write_data(0xB2);
write_data(0xCC);/*---------*/
write_com(0x81);
write_data(0xC7);
write_data(0xDF);/*---------*/
write_com(0x82);
write_data(0xEE);
write_data(0xDA);/*---------*/
write_com(0x83);
write_data(0xD0);
write_data(0xA1);/*---------*/
write_com(0x84);
write_data(0xC5);
write_data(0xF3);/*---------*/
write_com(0x85);
write_data(0xD3);
write_data(0xD1);/*---------*/
delay(30);
}
/*------------------显示2--百草园小学校-----------*/
void display2()
{
delay(2000);
write_com(0x80);
write_data(0xB0);
write_data(0xD9);/*---------*/
write_com(0x81);
write_data(0xB2);
write_data(0xDD);/*---------*/
write_com(0x82);
write_data(0xD4);
write_data(0xB0);/*---------*/
write_com(0x83);
write_data(0xD0);
write_data(0xA1);/*---------*/
write_com(0x84);
write_data(0xD1);
write_data(0xA7);/*---------*/
write_com(0x85);
write_data(0xD0);
write_data(0xA3);/*---------*/
}
/*------------------主循环程序--------------------------*/
void main()
{
lcdreset();
while(1)
{
RED=0;
GREEN=1;
//初始化LCD屏
if(!S1)
{
display1();
}
delay(6000);
if(!S2)
{
display2();
}
RED=1;
GREEN=0;
delay(6000);
}
}