新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 串行2_pin 12864液晶移植到s12

串行2_pin 12864液晶移植到s12

作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
Createdon:2012-10-17

Author:zhangbin

本文引用地址:http://2s4d.com/article/201611/322855.htm

學(xué)習(xí)筆記

forMC9S12XS128lcd12864ser_2_pin

redesignedbyzhangbin

2012-10-17

versions:V-0.1

AllRightsReserved

Ser_12864.h文件如下注釋的比較詳細(xì):

#ifndefSER_12864_H_

#defineSER_12864_H_

//設(shè)定wr為PA0

//設(shè)定en為PA1

//在main()中開輸出

/

#include"derivative.h"

/

//2空函數(shù)

#definenop()_NOP();

//3*數(shù)據(jù)輸入口給各個口加了定義可以直接從位的引腳讀出0/1的狀態(tài)

#defineip10(P1IN&0x01)/0x01

#defineip11(P1IN&0x02)/0x02

#defineip12(P1IN&0x04)/0x04

#defineip13(P1IN&0x08)/0x08

#defineip14(P1IN&0x10)/0x10

#defineip15(P1IN&0x20)/0x20

#defineip16(P1IN&0x40)/0x40

#defineip17(P1IN&0x80)/0x80

#defineip20(P2IN&0x01)/0x01

#defineip21(P2IN&0x02)/0x02

#defineip22(P2IN&0x04)/0x04

#defineip23(P2IN&0x08)/0x08

#defineip24(P2IN&0x10)/0x10

#defineip25(P2IN&0x20)/0x20

#defineip26(P2IN&0x40)/0x40

#defineip27(P2IN&0x80)/0x80

/

voiddelay_us(intdelaytime)

{//軟件延時,16M總線頻率時延時時間約為10us

//系統(tǒng)的晶振為16M的,沒有使用PLL倍頻

inti;unsignedcharj;

for(i=0;i

for(j=0;j<16;j++)

;

}

voiddelay_ms(intdelaytime)

{//軟件延時,16M總線頻率時延時時間約為1ms

inti;

for(i=0;i

delay_us(100);

}

voidinit_lcd(void)/

//--------position為任一位置的起始地址--*/

//--length為長度,取值為1-64---/若只清一行最大為16//

voidclr_lcd(ucharx,uchary0,ucharlength)//

{//要寫的數(shù)據(jù)

uchara,i,j;

delay_us(50);

a=content;

LCD_SCLK0;//en=0;

LCD_SID1;//wr=1

for(i=0;i<5;i++)//數(shù)據(jù)時序*****************8

{

LCD_SCLK1;

LCD_SCLK0;

}

LCD_SID0;//wr=0

LCD_SCLK1;//en=1

LCD_SCLK0;//en=0

if(dat_comm)LCD_SID1;

elseLCD_SID0;

LCD_SCLK1;

LCD_SCLK0;

LCD_SID0;

LCD_SCLK1;

LCD_SCLK0;

for(j=0;j<2;j++)//

{

ucharpos=0;

switch(y0)

{

case0:pos=0x80+x;break;

case1:pos=0x90+x;break;

case2:pos=0x88+x;break;

case3:pos=0x98+x;break;

default:break;

}

wr_lcd(comm,pos);

}

//

{

ucharpos=0;

switch(y0)

{

case0:pos=0x80+x;break;

case1:pos=0x90+x;break;

case2:pos=0x88+x;break;

case3:pos=0x98+x;break;

default:break;

}

wr_lcd(comm,pos);//comm為零。函數(shù)意思是移動光標(biāo)到此

wr_lcd(dat,data);//寫入這個數(shù)據(jù)dat和comm是1,0的標(biāo)志

}

////

{

ucharpos=0;//初始化

ucharcnt=0;//傳遞過來的是指針,cnt為偏移量,然后一個字符一個字符的寫入。

switch(y0)

{

case0:pos=0x80+x;break;

case1:pos=0x90+x;break;

case2:pos=0x88+x;break;

case3:pos=0x98+x;break;

default:break;

}

wr_lcd(comm,pos);//寫地址

while(*(p+cnt)!=