?? lcd.c
字號:
#include <reg51.h>
#include<ziku.h>
#define uint unsigned int
#define DISP_ON 0x3f
#define DISP_OFF 0x3e
#define COL 0x40 //列地址
#define PAGE 0xb8 //行地址
#define START_LINE 0xc0
#define LCD_BUS P1
sbit CS2=P3^3; // CS2
sbit CS1=P3^4; // CS1
sbit E=P3^0; //Enable
sbit DI=P3^5; //Data or Instrument Select
sbit RW=P3^6; //Write or Read
sbit s0=P2^0;
sbit s1=P2^1;
uchar state=0;
uchar cnt0,move=0,m=0,n=32,d=0,ii=0;
//******************************子函數*****************************************
//void cpl_disp_str(uchar page,uchar col,uchar code *str,uchar n); //反顯
//void cpl_disp_ascII(uchar page,uchar col,uchar code *english,uchar n);//反顯
void disp_str(uchar page,uchar col,uchar code *str,uchar n);
//void disp_ascII(uchar page,uchar col,uchar code *english,uchar n);
void display(uchar page,uchar col,uchar code *str,uchar n);
void displaye(uchar page,uchar col,uchar code *english,uchar n);
void delay(uint); //延時程序
void write_cmd(uchar); //寫命令操作字
void write_data(uchar); //寫數據
void cls(); //清屏程序
void init(); //初始化程序
uchar read_data(); //讀數據
uchar key();
void point(uchar x,uchar y);
void screen0();
void screen1();
void screen2();
void screen3();
void screen4();
void screen5();
void screen6();
void screen7();
void screen71();
void screen72();
void screen73();
void screen74();
void rectangle(x,y);
void rectangleb(x,y);
void pointb(uchar x,uchar y);
/*
void sceen8();
void sceen9();
*/
//********************************主程序*******************************************
main()
{
uchar i=0;
init();
cls();
for(i=0;i<6;i++)
{
display(0,16*(i+1),str1,i);
}
for(i=0;i<3;i++)
{
display(6,16*i,str2,i);
display(6,(80+16*i),str2,i+3);
}
while(1)
{
switch(state)
{
case 0: screen0();break; //中國移動通信
case 1: screen1();break; //通話記錄
case 2: screen2();break; //文本信息
case 3: screen3();break; //語音功能
case 4: screen4();break; //鈴聲設定
case 5: screen5();break; //設置
case 6: screen6();break; //管理目錄
//////////////////////////////////////////////////
case 7: screen7();break; //游戲
case 71:screen71();break;
case 72:screen72();break;
case 73:screen73();break;
case 74:screen74();break;
//////////////////////////////////////////////////
default:screen0();break;
}
}
}
//********************************** 延時子程序***************************
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++);
}
//*******************************寫命令到LCD***************************
void write_cmd(uchar cmd)
{
DI=0; RW=0;
LCD_BUS=cmd;
E=1;
E=0;
}
//************************寫數據到LCD******************************
void point(uchar x,uchar y)
{
uchar y1,y2,pp;
uchar datain;
pp=1;
y1=y>>3;
y2=y%8;
pp=pp<<y2;
if (x<64)
{
CS2=1;
CS1=0;
write_cmd(PAGE+y1);
write_cmd(COL+x);
datain=read_data();
write_cmd(PAGE+y1);
write_cmd(COL+x);
delay(10);
datain=read_data();
write_cmd(PAGE+y1);
write_cmd(COL+x);
datain=datain|pp;
write_data(datain);
}
else
{
CS2=0;
CS1=1;
write_cmd(PAGE+y1);
write_cmd(COL+x-64);
datain=read_data();
write_cmd(PAGE+y1);
write_cmd(COL+x-64);
delay(10);
datain=read_data();
write_cmd(PAGE+y1);
write_cmd(COL+x-64);
datain=datain|pp;
write_data(datain);
}
}
void pointb(uchar x,uchar y)
{
uchar y1,y2,pp;
uchar datain;
pp=1;
y1=y>>3;
y2=y%8;
pp=~(pp<<y2);
if (x<64)
{
CS2=1;
CS1=0;
write_cmd(PAGE+y1);
write_cmd(COL+x);
datain=read_data();
write_cmd(PAGE+y1);
write_cmd(COL+x);
delay(10);
datain=read_data();
write_cmd(PAGE+y1);
write_cmd(COL+x);
datain=datain&pp;
write_data(datain);
}
else
{
CS2=0;
CS1=1;
write_cmd(PAGE+y1);
write_cmd(COL+x-64);
datain=read_data();
write_cmd(PAGE+y1);
write_cmd(COL+x-64);
delay(10);
datain=read_data();
write_cmd(PAGE+y1);
write_cmd(COL+x-64);
datain=datain&pp;
write_data(datain);
}
}
void write_data(uchar dout)
{
DI=1; RW=0;
LCD_BUS=dout;
E=1;
E=0;
}
//***************************讀LCD數據**********************************
uchar read_data()
{
uchar din;
LCD_BUS=0xff;
DI=1; RW=1;
E=0;
E=0;
E=1;
E=1;
E=1;
din=LCD_BUS;
return din;
}
//****************************清除內存******************************************
void cls()
{
uchar j,k;
CS2=1;CS1=0;
for(k=0;k<8;k++)
{
write_cmd(PAGE+k);
write_cmd(COL); //列地址0
for(j=0;j<64;j++) //列地址自動加一
write_data(0x00);
}
CS2=0;CS1=1;
for(k=0;k<8;k++)
{
write_cmd(PAGE+k);
write_cmd(COL); //列地址0
for(j=0;j<64;j++) //列地址自動加一
write_data(0x00);
}
}
void display(uchar page,uchar col,uchar code *str,uchar n)
{
uchar j=0,i=0;
if(col<64)
{
CS2=1;CS1=0;
}
else
{
CS2=0;CS1=1;
col=col-64;
}
for(j=0;j<2;j++)
{
write_cmd(PAGE+page+j); write_cmd(COL+col);
for (i=0;i<16;i++)
write_data(str[n*32+16*j+i]);
}
}
/*
//*******************************指定位置顯示漢字16*16****************************
void disp_str(uchar page,uchar col,uchar code *str,uchar n)
{
uchar j=0,i=0;
for(j=0;j<2;j++)
{
write_cmd(PAGE+page+j); write_cmd(COL+col);
for (i=0;i<16;i++)
write_data(str[n*32+16*j+i]);
}
}
//**********************************反顯程序**************************************
void cpl_disp_str(uchar page,uchar col,uchar code *str,uchar n)
{
uchar j=0,i=0;
for(j=0;j<2;j++)
{
write_cmd(PAGE+page+j); write_cmd(COL+col);
for (i=0;i<16;i++)
write_data(~str[n*32+16*j+i]);
}
}
//*******************************顯示ASCII碼程序**********************************
void disp_ascII(uchar page,uchar col,uchar code *english,uchar n)
{
uchar j,i;
for(j=0;j<2;j++)
{
write_cmd(PAGE+page+j);write_cmd(COL+col);
for(i=0;i<8;i++)
write_data(english[n*16+8*j+i]);
}
}
*/
//**************************************************************************
void displaye(uchar page,uchar col,uchar code *english,uchar n)
{
uchar j,i;
if(col<64)
{
CS2=1;CS1=0;
}
else
{
CS2=0;CS1=1;
col=col-64;
}
for(j=0;j<2;j++)
{
write_cmd(PAGE+page+j);write_cmd(COL+col);
for(i=0;i<8;i++)
write_data(english[n*16+8*j+i]);
}
}
/*
void cpl_disp_ascII(uchar page,uchar col,uchar code *english,uchar n)
{
uchar j,i;
for(j=0;j<2;j++)
{
write_cmd(PAGE+page+j);write_cmd(COL+col);
for(i=0;i<8;i++)
write_data(~english[n*16+8*j+i]);
}
}
*/
//***************************初始化LCD屏*************************************
void init()
{
delay(100);
CS2=1; CS1=0;
delay(100);
write_cmd(DISP_OFF);
write_cmd(PAGE);
write_cmd(START_LINE);
write_cmd(COL);
write_cmd(DISP_ON);
CS2=0; CS1=1;
delay(100);
write_cmd(DISP_OFF);
write_cmd(PAGE);
write_cmd(START_LINE);
write_cmd(COL);
write_cmd(DISP_ON);
}
uchar key()
{
uchar temp,key_value;
P2=0xff;
temp=0x0f&P2;
if(temp!=0x0f)
{
delay(100);
temp=0x0f&P2;
if(temp!=0x0f)
{
if(temp==0x0e)
key_value=0; //LEFT
else if(temp==0x0d)
key_value=1; //DOWN
else if(temp==0x0b)
key_value=2; //UP
else if(temp==0x07)
key_value=3; //RIGHT
}
}
while((P2&0x0f)!=0x0f);
return key_value;
}
void screen0() //state=0
{
uchar i,temp;
//cls();
for(i=0;i<6;i++)
display(0,16+16*i,str1,i);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -