Createdon:2012-10-17Author:zhangbin
本文引用地址:http://cafeforensic.com/article/201611/322855.htm
學習筆記
forMC9S12XS128lcd12864ser_2_pin
redesignedbyzhangbin
2012-10-17
versions:V-0.1
AllRightsReserved
Ser_12864.h文件如下注釋的比較詳細:
#ifndefSER_12864_H_
#defineSER_12864_H_
//設定wr為PA0
//設定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;ifor(j=0;j<16;j++)
;
}
voiddelay_ms(intdelaytime)
{//軟件延時,16M總線頻率時延時時間約為1ms
inti;
for(i=0;idelay_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ù)意思是移動光標到此
wr_lcd(dat,data);//寫入這個數(shù)據(jù)dat和comm是1,0的標志
}
////
{
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)!=