|
//c51驅(qū)動(dòng)中文字庫(kù)12864液晶顯示
#include <stdio.h>
#include <reg52.h>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
uchar code LCD_data1[];
uchar code LCD_data2[];
uchar code LCD_picture1[];
uchar code LCD_picture2[];
/*sbit RS = P3^0; //2051
sbit RW = P3^1;
sbit EN = P3^2;
sbit PSB = P3^3;
sbit RES = P3^4; */
/*sbit RS = P2^4;
sbit RW = P2^5;
sbit EN = P2^6;
sbit PSB = P2^1;
sbit RES = P2^3;
sbit Dataport = P0;//l-1定義數(shù)據(jù)端口
sbit Busyport = P0^7;
void delay_ms(unsigned int n) //延時(shí)10*N毫秒
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<2000;j++);
}
void delay(unsigned int m) //延時(shí)1u秒
{
unsigned int i,j;
for(i=0;i<m;i++)
for(j=0;j<10;j++);
}
void check_LCD_busy (void) //判斷LCM忙子程序
{
Dataport = 0xff;
RS = 0;
RW = 1;
EN = 1;
while (Busyport);
EN = 0;
}
void write_com(uchar Command) //寫(xiě)命令子程序
{
check_LCD_busy();
RW=0;
RS=0;
delay(1);
P0=Command;
EN=1;
delay(1);
EN=0;
}
void write_data(uchar Data) //寫(xiě)數(shù)據(jù)子程序
{
check_LCD_busy();
RW=0;
RS=1;
delay(1);
P0=Data;
EN=1;
delay(1);
EN=0;
}
void lcdClear (void) //LCM清屏子函數(shù)
{
write_com(0x01);
}
void reset () //LCm復(fù)位子函數(shù)
{
RES=0;// 復(fù)位
delay(1);
RES=1;//復(fù)位置高
delay(10);
}
void dispString (uchar X, Y,uchar*msg) //顯示漢字,X為哪一行,y為哪一列 ,msg為漢字
{
if(X==0) X = 0x80; //第一行,漢字顯示坐標(biāo)
else if(X==1) X = 0x90; // 第2行,漢字顯示坐標(biāo)
else if(X==2) X = 0x88; //第3行
else X = 0x98; //第4行
//Y = X + Y; //去掉+Y,顯示從第一格開(kāi)始
Y = X ; //y為一往右邊移動(dòng) 一位
write_com(Y); //寫(xiě)入坐標(biāo)
while (*msg) //
{
write_data(*msg++);//顯示漢字
}
}
void disppicture(uchar code*adder) //顯示圖像
{
uint i,j;
for(i=0;i<32;i++) //上半屏32個(gè)列地址
{
write_com(0x80 + i); //set垂直地址VERTICALADD
write_com(0x80); //set水平地址HORIZONTALADD
for(j=0;j<16;j++)
{
write_data(*adder);
adder++;
}
}
for(i=0;i<32;i++)//顯示下半屏內(nèi)容設(shè)置
{
write_com(0x80 + i); //set垂直地址VERTICALADD
write_com(0x88); //set水平地址HORIZONTALADD
for(j=0;j<16;j++)
{
write_data(*adder);
adder++;
}
}
}
void lcdinit_str(void)//lcd字庫(kù)初始化程序
{
delay(40); //大于40MS延時(shí)
PSB=1; //設(shè)置為8BIT并口工作模式
delay(1);
reset(); //復(fù)位
write_com(0x30);
delay(100);
write_com(0x30);
delay(37);
write_com(0x08);
delay(100);
write_com(0x10);
delay(100);
write_com(0x0C);
delay(100);
write_com(0x01);
delay(10);
write_com(0x06); // 光標(biāo)從右向左加1 位移動(dòng)
delay(100);
}
void lcdinit_pic(void)//lcd圖片(擴(kuò)展 )初始化函數(shù)
{
delay(40);
PSB=1;//設(shè)置為8BIT并口工作模式
delay(1);
reset();
write_com(0x36);
delay(100);
write_com(0x36);
delay(37);
write_com(0x3E);
delay(100);
write_com(0x01);
delay(100);
}
void main()
{
while(1)
{
lcdinit_str();
delay_ms(10);
dispString(0, 1,"鐘山風(fēng)雨起蒼黃,");
delay_ms(10);
dispString(1, 1,"百萬(wàn)雄師過(guò)大江。");
delay_ms(10);
dispString(2, 1,"虎踞龍盤(pán)今勝昔,");
delay_ms(10);
dispString(3, 1,"天翻地覆慨而慷");
delay_ms(200);
delay_ms(200);
lcdClear();
delay_ms(10);
dispString(0, 1,"宜將剩勇追窮寇,");
delay_ms(10);
dispString(1, 1,"不可沽名學(xué)霸王。");
delay_ms(10);
dispString(2, 1,"天若有情天亦老,");
delay_ms(10);
dispString(3, 1,"人間正道是滄桑。");
delay_ms(200);
delay_ms(200);
delay_ms(10);
dispString(1, 1,"萬(wàn)水千山只等閑。");
delay_ms(10);
dispString(2, 1,"五嶺逶迤騰細(xì)浪,");
delay_ms(10);
dispString(3, 1,"烏蒙磅礴走泥丸。");
delay_ms(200);
delay_ms(200);
delay_ms(10);
dispString(0, 1,"金沙水拍云崖暖,");
delay_ms(10);
dispString(1, 1,"大渡橋橫鐵索寒。");
delay_ms(10);
dispString(2, 1,"更喜民山千里雪,");
delay_ms(10);
dispString(3, 1,"三軍過(guò)后盡開(kāi)顏。");
delay_ms(200);
delay_ms(200);
lcdinit_pic();
lcdClear();
delay_ms(10);
disppicture(LCD_picture1);
delay_ms(300);
delay_ms(300);
}
} */
這里發(fā)一個(gè)51單片機(jī)驅(qū)動(dòng)中文字庫(kù)12864液晶顯示代碼,大家一起學(xué)習(xí)。中文字庫(kù)12864液晶用起來(lái)比較簡(jiǎn)單。
|
評(píng)分
-
查看全部評(píng)分
|