標(biāo)題:
st7565主控的12864液晶驅(qū)動(dòng)程序
[打印本頁(yè)]
作者:
azubieke
時(shí)間:
2017-1-2 08:42
標(biāo)題:
st7565主控的12864液晶驅(qū)動(dòng)程序
st7565主控的12864液晶驅(qū)動(dòng)程序,全部分享。
0.png
(63.97 KB, 下載次數(shù): 110)
下載附件
2017-1-5 22:31 上傳
下載地址:
st7565r-并口.rar
(59.11 KB, 下載次數(shù): 62)
2017-1-2 08:42 上傳
點(diǎn)擊文件名下載附件
12864驅(qū)動(dòng)程序
下載積分: 黑幣 -5
部分源碼預(yù)覽:
/*************************************************************************
Module name : CH12864F(128*64 dots) COG產(chǎn)品
Driver IC : ST7565R
interface : 6800 for 8 bit mcu interface
************************************************************************/
#include<REG52.H>
#include<INTRINS.H>
#include"int/ascii0816x.c"
#include"int/ascii0508x.c"
#include"int/hanzi1616.c"
#include"int/photo.c"
#define uchar unsigned char
#define uint unsigned int
#define data P1
sbit cs = P3^0;
sbit rst = P3^1;
sbit di = P3^2;
sbit wr = P3^3;
sbit rd = P3^4;
// Delay microsecond less than 255us
void delayUs(uint Tus)
{
// If Tus >= 18, the delay is precise, otherwise not!
if (Tus > 17)
{
Tus = Tus/2 - 9;
if (Tus != 0)
while(--Tus != 0);
}
}
// Delay Tms ms
void delayMs(uint Tms)
{
uint i;
while(Tms-- != 0)
{
i = 4;
while(i-- != 0)
delayUs(250);
}
}
/****************************reset IC for start****************************/
void LCD_Reset()
{
IE = 0x00;
rst = 0;
delayMs(50);
rst = 1;
delayMs(50);
}
//-----------------寫(xiě)指令或者數(shù)據(jù)--------------------
void write_cmd_dat(uchar cmda,uchar com)
{
cs=0;
di=cmda;
rd=1;
wr=0;
data=com;
delayUs(2);
wr=1;
delayUs(2);
}
// set Column address
void SetCA(uchar Caddr)
{
write_cmd_dat(0,Caddr & 0x0F); // Lower 4-bit
write_cmd_dat(0,(Caddr >> 4) | 0x10); // Higher 4-bit
}
// set page address
void SetPA(uchar Paddr)
{
write_cmd_dat(0,0xb0+Paddr);
}
//--------------向某頁(yè)某列寫(xiě)數(shù)據(jù)----------------------------
void write_data(uint com,uchar page,uchar clum)
{
SetPA(page);
SetCA(clum);
write_cmd_dat(1,com);
}
// Display data RAM page and column address
void GotoXY(uchar Paddr, uchar Caddr)
{
SetPA(Paddr);
SetCA(Caddr);
}
//----------------------組裝測(cè)試-------------------------
void display_test(uchar fst,uchar snd)
{
uchar i,j;
for(j=0;j<8;j++)
{
GotoXY(j,0);
for(i=0;i<128/2;i++)
{
write_cmd_dat(1,fst);
write_cmd_dat(1,snd);
}
}
}
// Clear LCD screen
void Clear(void)
{
display_test(0x00,0x00);
delayUs(4);
}
// Wait some time and clear the screen
void wait_and_clear(void)
{
delayMs(200);
Clear();
}
void lcd_test()
{
uchar i;
uchar code tdata[][2]=
{
{0xff,0xff}, // All
{0x00,0x00}, // None
{0x00,0xFF}, // Virtical
{0xff,0x00}, // Virtical
{0xAA,0xAA}, // Horizontal
{0x55,0x55}, // Horizontal
{0xAA,0x55}, // Stars
{0x55,0xaa}, // Stars
};
for(i=0;i<8;i++)
{
display_test(tdata[i][0],tdata[i][1]);
wait_and_clear();
}
}
//------------------顯示方框-----------------------
void lcd_kuang(void)
{
uchar i,j;
for(i=0;i<8;i++)
{
for(j=0;j<128;j++)
{
if((j==0)||(j==127)) { GotoXY(i,j); write_cmd_dat(1,0xff);}
if(i==0)
{
if((j>0)&&(j<127)) { GotoXY(i,j); write_cmd_dat(1,0x01);}}
if(i==7)
{
if((j>0)&&(j<127)) { GotoXY(i,j); write_cmd_dat(1,0x80);}}
}
}
}
//------------------顯示8X16點(diǎn)陣字符串-------------------------
void disp_ascii0816(uchar *ptrAscii, uchar startP, uchar startC)
{
uchar i,xclum;
uint index;
GotoXY(startP,startC);
while((*ptrAscii) != '\0')
{
index = ((*ptrAscii)-0x20)*16;
for(i=0;i<16;i++)
{
if(i%8==0)
{
xclum=startC;
}
write_data(AsciiDot0816[index++],startP+i/8,xclum++);
}
startC+=8;
ptrAscii++;
// if((128-xclum)<8)
// {
// startP+=2;
// startC=0;
//if(startP<8)
// {Gotoxy(startP,startC);}
// }
}
}
//------------------顯示5X8點(diǎn)陣字庫(kù)串-------------------------
void disp_ascii0508(uchar *ptrAscii, uchar startP, uchar startC)
{
uchar i;
uint index;
GotoXY(startP,startC);
while((*ptrAscii) != '\0')
{
index = ((*ptrAscii) - 0x20)*5;
for (i=0;i<5;i++)
{
write_data(AsciiDot0508[index++],startP,startC++);
}
ptrAscii++;
if((128-startC)<6)
{
startP++;
startC=0;
if(startP<8)
{GotoXY(startP,startC);}
}
}
}
//------------------顯示一個(gè)漢字-------------------------
void display_hanzi(uchar *p,uchar startP, uchar startC)
{
uchar i,j;
for(i=0;i<2;i++)
{
GotoXY(startP+i,startC);
for(j=0;j<16;j++)
{write_cmd_dat(1,*p++);}//發(fā)送數(shù)據(jù)
}
}
//------------------顯示一個(gè)反白漢字-------------------------
void display_hanzi_fan(uchar *p,uchar startP, uchar startC)
{
uchar i,j;
for(i=0;i<2;i++)
{
GotoXY(startP+i,startC);
for(j=0;j<16;j++)
{write_cmd_dat(1,~*p++);}//發(fā)送數(shù)據(jù)
}
}
//-------------顯示一副128X32點(diǎn)陣的圖片------------------------------
void display_photo(uchar *p,uchar startP,uchar startC)
{
uchar i,j;
GotoXY(startP,startC);
for(i=0;i<4;i++)
{
for(j=0;j<128;j++)
{
write_data(*p++, startP+i, startC+j);
}
}
}
void Init_IC()
{
cs = 0;
P1 = 0xFF;
LCD_Reset();
write_cmd_dat(0,0xE2); //initialize interal function
write_cmd_dat(0,0xA2); //LCD Bias selection(1/65 Duty,1/9Bias)
write_cmd_dat(0,0xA0); //ADC selection(SEG0->SEG128) //改變SEG掃描方向
write_cmd_dat(0,0xC8); //SHL selection(COM64->COM0) //改變COM掃描方向
write_cmd_dat(0,0x2F); //power control(VB,VR,VF=1,1,1)
write_cmd_dat(0,0x25); //Regulator resistor select 110 內(nèi)部電位器調(diào)節(jié)
write_cmd_dat(0,0x81); //set reference voltage mode
write_cmd_dat(0,0x50); //set reference voltage //改變此值可以改變效果
write_cmd_dat(0,0x40); //Initial Display Line
write_cmd_dat(0,0xAF); //Display on
Clear();
}
void main()
{
uint i;
Init_IC();
while(1)
{
lcd_kuang();
delayMs(500);
Clear();
lcd_test(); // lcd 組裝測(cè)試
display_hanzi(shen,0,0); //顯示16X16點(diǎn)陣漢字
display_hanzi(zhen,0,16);
display_hanzi(chuan,0,32);
display_hanzi(hang,0,48);
display_hanzi(dian,0,64);
display_hanzi(zi,0,80);
display_hanzi(ke,0,96);
display_hanzi(ji,0,112);
disp_ascii0816("CH12864F-COG",2,0);
display_hanzi(gong,2,96);
display_hanzi(yi,2,112);
disp_ascii0816("st7565r-",4,0);
display_hanzi(bing,4,64);
display_hanzi(kou,4,80);
display_hanzi(chuan1,4,96);
display_hanzi(kou,4,113);
display_hanzi_fan(ci,6,0);
display_hanzi_fan(chun,6,16);
disp_ascii0816(":",6,32);
disp_ascii0508("54.0 x 50.0 x 7",6,48);
disp_ascii0508("44.0 x 29.0 mm",7,48);
delayMs(500);
Clear();
display_hanzi(shen,0,0); //顯示16X16點(diǎn)陣漢字
display_hanzi(zhen,0,16);
display_hanzi(chuan,0,32);
display_hanzi(hang,0,48);
display_hanzi(dian,0,64);
display_hanzi(zi,0,80);
display_hanzi(ke,0,96);
display_hanzi(ji,0,112);
disp_ascii0816("CH12864F-COG",2,0);
display_hanzi(gong,2,96);
display_hanzi(yi,2,112);
display_photo(tupian,4,0); //顯示一副128X32點(diǎn)陣的圖片
delayMs(500);
Clear();
}
}
復(fù)制代碼
作者:
vectorxu
時(shí)間:
2019-11-8 15:46
好東西,正需要,謝謝樓主
作者:
vectorxu
時(shí)間:
2019-11-8 15:56
樓主,有沒(méi)有串口的?就是SPI方式的。謝謝!
作者:
秋爽
時(shí)間:
2020-3-2 21:08
有沒(méi)有分左右片的
作者:
waxkj
時(shí)間:
2021-6-16 21:00
很想看看程序啊,可惜幣不夠
作者:
咯家
時(shí)間:
2022-1-22 10:58
不錯(cuò)不錯(cuò),頂一下,哪個(gè)96*32的1寸屏驅(qū)動(dòng)啊
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1