?? lcd1.h
字號:
#include<at89x52.h>
sbit RS = P1^5;
sbit RW = P1^6;
sbit E = P1^7;
//sbit RES = P1^6;
sbit PSB = P1^4;
#define Lcd_Bus P3
//#define FIRST_ADDR 0 //定義字符/漢字顯示起始位置
/*unsigned char code zk[]={
0x08,0x20,0x1c,0x10,0x1c,0x1c,0xff,0x9e,0x7f,0x1e,0x1c,0x1f,0x3e,0x1f,0x3e,0x1f,
0x77,0x1f,0x41,0x3f,0x00,0x7e,0x00,0xfe,0x83,0xfc,0x7f,0xf8,0x3f,0xf0,0x0f,0xc0,
}; */
unsigned char code BMP1[]={
/*-- 一幅圖像 KISS- 正向取模,字節正序*/
/*-- 寬度x高度=128x64 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0x9F,0x00,0x00,0x0F,0x0E,0x00,0x00,0x00,0x00,0x19,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xBF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFD,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xF3,0xE0,0x00,0x00,0x1F,0xFD,0x80,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFA,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xF0,0x00,0x00,0x00,0x03,0xF8,0x01,0xFF,0xFF,0xE0,0x00,0x07,0xFF,0xFF,
0x00,0x00,0x00,0x0F,0xFF,0xFC,0x00,0xF0,0x3F,0xFF,0xFF,0xFE,0x00,0x30,0x00,0x00,
0x00,0x00,0x00,0x7F,0xFF,0xFF,0x80,0x41,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,
0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xF0,0x02,0x7F,0xFF,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,
0x00,0x00,0x03,0xFF,0xFF,0xFF,0xF8,0x04,0x3F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,
0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFC,0x08,0x73,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,
0xFF,0xE4,0x3F,0x7F,0xFF,0xFF,0xFF,0x30,0x2F,0xFF,0xFF,0xFF,0xFE,0x00,0x7F,0xFF,
0x00,0x00,0xFE,0x9F,0xFF,0xFF,0xFF,0xB0,0x1D,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,
0x00,0x00,0xFF,0x7F,0xFF,0xFF,0xFF,0xC2,0x23,0x3F,0xFF,0xFE,0x1F,0x80,0x00,0x00,
0xFF,0xE1,0xFF,0xFF,0xFF,0xFF,0xFC,0xC5,0x92,0xFF,0xB7,0xB8,0xC9,0x80,0x7F,0xFF,
0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFC,0x4F,0xEF,0x3F,0xC8,0x1A,0x20,0xC0,0x00,0x00,
0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0x75,0x86,0xF6,0xC0,0x00,0x00,
0xFF,0x03,0xEF,0x9F,0xFB,0xFF,0xF8,0x7F,0xFF,0xFF,0xFB,0xDF,0xFE,0xC0,0x7F,0xFF,
0x00,0x07,0xDE,0x7F,0xC7,0xFF,0xF0,0x7E,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
0x00,0x07,0x1C,0xF7,0x9F,0xDF,0xF0,0x7E,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
0xFC,0x07,0x00,0x8C,0x1F,0xBF,0xE7,0x3C,0x3F,0xFF,0xFF,0xFF,0xFF,0xC0,0x7F,0xFF,
0x00,0x07,0x00,0x08,0x1C,0x3F,0x88,0x3C,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
0x00,0x06,0x0C,0x08,0x98,0x7F,0x80,0x0D,0x9F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
0xFC,0x06,0x1C,0xE3,0x99,0xFF,0x00,0x0C,0x0F,0xFF,0xFF,0xFF,0xFF,0xC0,0x5F,0xFF,
0x00,0x06,0xF1,0xE3,0x83,0xFE,0x00,0x08,0x03,0xDF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
0x00,0x06,0xF1,0xF7,0xC7,0xFE,0x00,0x08,0x01,0xCF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
0xFC,0x06,0xF3,0xF7,0xC7,0xFC,0x03,0x08,0x00,0x01,0xFF,0xFF,0xFF,0xC0,0xBF,0xFF,
0x00,0x07,0xF3,0xFF,0xE7,0xF0,0x03,0x09,0x80,0x00,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
0x00,0x07,0xFF,0xFF,0xFF,0xE0,0x03,0x09,0x80,0x00,0x3F,0xFF,0xFF,0x80,0x00,0x00,
0xFC,0x07,0xFF,0xFF,0xFF,0xC0,0x03,0x09,0x80,0x00,0x0F,0xFF,0xFF,0x83,0xFF,0xFF,
0x00,0x07,0xFF,0xE0,0xFE,0x00,0x03,0x09,0x80,0x00,0x07,0xFF,0xFF,0x80,0x00,0x00,
0x00,0x07,0xFF,0x80,0x7C,0x00,0x07,0xB1,0x80,0x00,0x07,0x83,0xFF,0x00,0x00,0x00,
0xFF,0x07,0xFF,0x0C,0x00,0x00,0x7F,0xB3,0xC0,0x00,0x06,0x01,0xFE,0x03,0xFF,0xFF,
0x00,0x07,0xFF,0x03,0x00,0x00,0x1F,0x43,0xFC,0x00,0x06,0x38,0xFE,0x00,0x00,0x00,
0x00,0x07,0xFF,0x03,0x00,0x00,0x00,0x81,0xF0,0x00,0x04,0x40,0xF8,0x00,0x00,0x00,
0xFC,0x87,0xFF,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x04,0x40,0xF0,0x07,0xFF,0xFF,
0x00,0x07,0xFF,0x80,0x00,0x2C,0x00,0x80,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
0x00,0x07,0xFF,0x80,0x00,0x52,0x00,0x40,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,
0xFF,0x83,0xFF,0xF0,0x80,0x2C,0x00,0x40,0x00,0x00,0x00,0x01,0xC0,0x7F,0xFF,0xFF,
0x00,0x03,0xFF,0xFF,0x80,0x00,0x00,0x30,0x00,0x00,0x01,0x86,0x00,0x00,0x00,0x00,
0x00,0x03,0xFF,0xFF,0x80,0x00,0x00,0x38,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x00,
0xFF,0xA3,0xFF,0xFF,0x80,0x00,0x00,0x44,0x00,0x00,0x01,0xFF,0x00,0x7F,0xFF,0xFF,
0x00,0x03,0xFF,0xFF,0x80,0x00,0x03,0x82,0x00,0x00,0x01,0xC0,0xC0,0x00,0x00,0x00,
0x00,0x03,0xFF,0xFF,0x80,0x00,0x1C,0x01,0xC0,0x00,0x00,0x78,0xC0,0x00,0x00,0x00,
0xFF,0x81,0xFF,0xFF,0xC0,0x3F,0xE0,0x00,0x3C,0x00,0x07,0x80,0x20,0x7F,0xFF,0xFF,
0x00,0x01,0xFF,0xFF,0xE0,0x40,0x00,0x00,0x03,0xFE,0x78,0x00,0x20,0x00,0x00,0x00,
0x00,0x01,0xFF,0xFF,0xF8,0x40,0x00,0x00,0x00,0x21,0x80,0x00,0x10,0x00,0x00,0x00,
0xFF,0xC1,0xFF,0xFF,0xFC,0x40,0x00,0x00,0x00,0x2E,0x00,0x00,0x10,0x4F,0xFF,0xFF,
0x00,0x01,0xFF,0xFF,0xFE,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,
0x00,0x00,0xFF,0xFF,0xFF,0xA0,0x00,0x00,0x00,0xC0,0x00,0x01,0xF8,0x00,0x00,0x00,
0xFF,0xE0,0xFF,0xFF,0xFB,0xE0,0x00,0x00,0x00,0xC0,0x00,0x03,0xFE,0x07,0xFF,0xFF,
0x00,0x00,0xFF,0xFF,0xFD,0xE0,0x00,0x00,0x00,0xC0,0x00,0x1F,0xFF,0x00,0x00,0x00,
0x00,0x00,0xFF,0xFF,0xFE,0x70,0x00,0x00,0x01,0xE0,0x00,0x3F,0xFF,0x80,0x00,0x00,
0xFF,0xC0,0xFF,0xFF,0xFF,0xB0,0x00,0x00,0x01,0xE0,0x00,0x7F,0xFF,0xC0,0x3F,0xFF,
0x00,0x00,0xFF,0xFF,0xFF,0xDC,0x00,0x00,0x03,0xF7,0x81,0xFF,0xFF,0xF0,0x00,0x00,
0x00,0x01,0xFF,0x80,0x7F,0xDC,0x00,0x00,0x0F,0xFF,0xC3,0xFF,0xFF,0xF8,0x00,0x00,
0xFF,0x01,0xFF,0x00,0x1F,0xEE,0x00,0x00,0x13,0xFF,0xF7,0xFF,0xFF,0xFC,0x07,0xFF,
0x00,0x01,0xFE,0x00,0x07,0xEF,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x01,0xFC,0x00,0x03,0xF3,0x00,0x00,0x13,0xFF,0xBF,0xFF,0xFF,0xFF,0x80,0x00,
0xFF,0x01,0xFC,0x00,0x01,0xF3,0x80,0x00,0x1F,0xFF,0xBF,0xFF,0xFF,0xFF,0x83,0xFF,
0x00,0x01,0xF0,0x00,0x01,0xFD,0x80,0x00,0x0F,0xFF,0x7F,0xFF,0xFF,0xFF,0xC0,0x00,
0x00,0x03,0xF0,0x00,0x00,0x72,0xE0,0x00,0x03,0xFE,0xFF,0xFF,0xFF,0xFF,0xC0,0x00
};
/*------------------檢查忙位-----------------------------*/
void chk_busy()
{ RS=0;
RW=1;
E=1;
Lcd_Bus=0xff;
while((Lcd_Bus&0x80)==0x80);
E=0;
}
/*------------------延時子程序-----------------------------*/
void lcddelay(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;
lcddelay(5);////////////////////在數據寫入的時候加入適當的延時
E=0;
lcddelay(5);
}
/*-------------------寫數據到LCD----------------------------*/
void write_data(unsigned char Dispdata)
{
chk_busy();
RS=1;
RW=0;
E=1;
Lcd_Bus=Dispdata;
lcddelay(5);///////////////////在數據寫入的時候加入適當的延時
E=0;
lcddelay(5);
}
/*------------------初始化LCD屏--------------------------*/
void lcdreset()
{ lcddelay(2000);
write_com(0x30);
lcddelay(10); //選擇基本指令集
write_com(0x30); //選擇8bit數據流
lcddelay(5);
write_com(0x0c); //開顯示(無游標、不反白)
lcddelay(10);
write_com(0x01); //清除顯示,并且設定地址指針為00H
lcddelay(500);
write_com(0x06); //指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位
lcddelay(0);
}
/*------------------自定義一個字符代碼(一個星星和月亮)--------------------------*/
/*void CGRAM()
{ int i;
write_com(0x30);
write_com(0x40);
for(i=0;i<16;i++)
{write_data(zk[i*2]);
write_data(zk[i*2+1]);
}
} */
/*------------------顯示字符串--------------------------*/
void hzkdis(unsigned char code *s)
{ while(*s>0)
{ write_data(*s);
s++;
lcddelay(50);
}
}
/*------------------首屏顯示--------------------------*/
void ceshi()
{write_com(0x01);//清除顯示,并且設定地址指針為00H
lcddelay(5);
write_com(0x81);//第一行(如果是地址是:80H,即LCD的第一行的第一個位置顯示)
hzkdis("第一代時鐘");
write_com(0x91);//第二行(如果是地址是:90H,即LCD的第二行的第一個位置顯示)
hzkdis("51單片機實驗 ");
write_com(0x89);//第三行(如果是地址是:88H,即LCD的第二行的第一個位置顯示)
hzkdis("QQ:381879760");
write_com(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一個位置顯示)
hzkdis("MADE BY XIAOSONG");
}
/*------------------顯示圖片------------------------*/
void Disp_Img(unsigned char code *img)
{ unsigned int j=0;
unsigned char x,y,i;
for(i=0;i<9;i+=8)
for(y=0;y<32;y++)/*原來 為 y<26 ,上下兩個半屏不能正常對接顯示,導致顯示的圖片中間有空隙*/
for(x=0;x<8;x++)
{ write_com(0x36);//功能設置---8BIT控制界面,擴充指令集
write_com(y+0x80); //行地址
write_com(x+0x80+i); //列地址
write_com(0x30);
write_data(img[j++]); //寫數據還要回到基本指令集
write_data(img[j++]);
}
}
/*------------------清整個GDRAM空間----------------------------*/
void clrgdram()
{
unsigned char x,y;
for(y=0;y<64;y++)
for(x=0;x<16;x++)
{
write_com(0x34);
write_com(y+0x80); //行地址
write_com(x+0x80); //列地址
write_com(0x30);
write_data(0x00);
write_data(0x00);
}
}
/*------------------清屏命令--------------------------*/
void clrscreen()
{
write_com(0x01);
lcddelay(10);
}
/*------------------整屏寫入數據:全亮,或者豎條-----------------------------*/
/*void lcdfill(unsigned char disdata)
{ unsigned char x,y;
for(y=0;y<32;y++)
for(x=0;x<16;x++)
{ write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x80); //列地址
write_com(0x30);
write_data(disdata);
write_data(disdata);
}
write_com(0x34);
write_com(0x36);
} */
/*------------------顯示橫-----------------------------*/
/*void Disp_H_Line()
{ unsigned char x,y;
unsigned char k=0x00;
for(y=0;y<32;y++)
{ k=~k;
for(x=0;x<16;x++)
{ write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x80); //列地址
write_com(0x30);
write_data(k);
write_data(k);
};
}
write_com(0x34);
write_com(0x36);
} */
/*------------------顯示邊框-------------------------------*/
/*void Frame() /////////////////////////////////////////////////////////////////////////////////////////////////
{unsigned char x,y;
lcdfill(0x00);
for(x=0;x<9;x+=8)
for(y=0;y<32;y++)
{ write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x80); //列地址
write_com(0x30);
write_data(0x80);
write_data(0x00);
write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x87); //列地址
write_com(0x30);
write_data(0x00);
write_data(0x01);
}
for(y=0;y<2;y++)
for(x=0;x<8;x++)
{write_com(0x36);
write_com(y*31+0x80); //行地址
write_com(x+0x80+8*y); //列地址
write_com(0x30);
write_data(0xff);
write_data(0xff);
}
write_com(0x34);
write_com(0x36);
} */
/*------------------在第7列的位置加入兩條豎線--------------------------*/
/*void shuxian()
{ unsigned char x,y;
for(x=0;x<9;x+=8) ////////////////////////////////////////////////////////////////////////////////
for(y=0;y<32;y++)
{ write_com(0x36);
write_com(y+0x80); //行地址
write_com(x+0x86); //列地址
write_com(0x30);
write_data(0x00);
write_data(0x14);
};
} */
/*------------------唐詩《靜夜思》--------------------------*/
/*void gushi_display()
{ write_com(0x30);
clrscreen();
write_com(0x80+FIRST_ADDR);
hzkdis("白日依山盡,");
write_com(0x90+FIRST_ADDR);
hzkdis("黃河入海流。");
write_com(0x88+FIRST_ADDR);
hzkdis("欲窮千里目,");
write_com(0x98+FIRST_ADDR);
hzkdis("更上一層樓。");
write_com(0xb3+FIRST_ADDR);
hzkdis("登鸛雀樓");
write_com(0xaa+FIRST_ADDR);
hzkdis("( 唐 )王之煥"); //////////////////////////////////////////////////////////////////////////////////////
} */
/*main()
{ unsigned char i;
while(1)
{
PSB=0;
lcddelay(300);
PSB=1;
RW=0;
lcdreset(); //初始化LCD屏
CGRAM(); //調用自定義的CGRAM的代碼
ceshi(); //顯示測試字樣
lcddelay(2000);
clrgdram();
clrscreen(); //清屏
Disp_Img(BMP); //調入一幅圖畫
lcddelay(30000);
Disp_Img(BMP1); //調入一幅圖畫
lcddelay(20000);
lcdfill(0xff); //顯示全開
lcddelay(2000);
Disp_H_Line(); //顯示橫條
lcddelay(2000);
lcdfill(0xaa); //顯示豎條
lcddelay(2000);
Frame(); //顯示邊框
lcddelay(2000);
gushi_display(); //顯示唐詩
clrgdram();
write_com(0x87);
write_data(0x00);
write_data(0x00);
lcddelay(400);
shuxian(); //加入兩條豎線
lcddelay(8000);
write_com(0x30);
lcddelay(2000);
gushi_display();
lcddelay(6000);
for(i=0;i<8;i++) //字符循環左移
{write_com(0x18);
lcddelay(2000);}
gushi_display();
lcddelay(6000);
write_com(0x36);
write_com(0x04); //第一行反白顯示
lcddelay(6000);
write_com(0x04); //第一行恢復正常
lcddelay(6000);
write_com(0x05); //第二行反白顯示
lcddelay(6000);
write_com(0x05); //第二行恢復正常
lcddelay(6000);
write_com(0x03); //垂直滾動屏幕的內容 /////注意這里可以用
write_com(0x60);
lcddelay(6000);
}
} */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -