Created
on:
2012-10-17
Author:zhangbin
学习笔记
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空函数
#definenop()_NOP();
//3*数据输入口给各个口加了定义可以直接从位的引脚读出0/1的状态
#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
//系统的晶振为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)//
{//要写的数据
uchara,i,j;
delay_us(50);
a=content;
LCD_SCLK0;//en=0;
LCD_SID1;//wr=1
for(i=0;i<5;i++)//数据时序*****************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为零。函数意思是移动光标到此
wr_lcd(dat,data);//写入这个数据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)!=)
{
wr_lcd(dat,*(p+cnt));//写数据
cnt++;
};
}
/
Mian()函数如下:
//本程序中没有使用PLL倍频,系统的晶振为16M的
#include
#include"derivative.h"
#include"ser_12864.h"
voidmain(void)
{
unsignedchars1[]={"汉字显示LCD"};
unsignedchars2[]={"MC9S12开发系统"};
unsignedchars3[]={"goodgoodstudy"};
unsignedchars4[]={"2012-10-10-H23木"};
DDRA|=0x03;//液晶的两条线
EnableInterrupts;
for(;;)
{
init_lcd();
delay_ms(10);
//wr_string(ucharx,uchary0,uchar*p);
wr_string(0,0,s1);//第一行第一个位置显示s1
delay_ms(1000);
wr_string(0,1,s2);//第二行第一个位置显示s2
delay_ms(1000);
wr_string(0,2,s3);//第三行第一个位置显示s3
delay_ms(1000);
wr_string(0,3,s4);//第四行第一个位置显示s4
delay_ms(1000);
}
}