微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 串行2_pin 12864液晶移植到s12

串行2_pin 12864液晶移植到s12

时间:11-28 来源:互联网 点击:
Createdon: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;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)//

{//要写的数据

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);

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top