这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » msp430程序库连载系列 12864液晶

共1条 1/1 1 跳转至

msp430程序库连载系列 12864液晶

菜鸟
2014-09-10 16:23:17     打赏


液晶是单片机系统最常用的显示设备之一,这个程序库是在MSP430F169MSP1430F149单片机上测试通过的,可以放心使用;液晶选用的是金鹏的:OCMJ4X8C型号的12864液晶;控制液晶用的是并行方式,三个控制口是P3.0P3.1P3.2三个IO口,数据用的是P5数据IO口。


硬件介绍

430的数字IO

MSP430F149MSP430F169均有P1-P6 每个8位 共48IO口;有大量的IO口可供使用,所以对液晶控制可以选用8位平行数据方式;430的每个IO口都是双向IO口,通过寄存器控制其数据传输方向,很方便实用;有关msp430单片机的IO口介绍可以参考德州仪器提供的用户指南和数据手册等资料。


液晶OCMJ4X8C


此模块可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。提供三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口(OCMJ4X16A/B无串行接口)。所有的功能,包含显示RAM,字型产生器,都包含在一个芯片里面,只要一个最小的微处理系统,就可以方便操作模块。


这款液晶内置2M-位中文字型ROM (CGROM) 总共提供8192个中文字型(16x16点阵)16K位半宽字型ROM(HCGROM) 总共提供126 个符号字型(16x8点阵)64x16位字型产生RAM(CGRAM),另外绘图显示画面提供一个64x256点的绘图区域(GDRAM),可以和文字画面混和显示。


OCMJ4X8C的引脚说明:

引脚

名称

方向

说明

1

VSS

-

GND(0V)

2

VDD

-

Supply Voltage For Logic(+5V)

3

NC

-

Supply Voltage For LCD(悬空)

4

RS(CS)

I

H:Data L:Instruction Code

5

R/W(STD)

I

H:Read L:Write

6

E(SCLK)

I

Enable Signal,高电平有效

7

DB0

I/O

数据0

8

DB1

I/O

数据1

9

DB2

I/O

数据2

10

DB3

I/O

数据3

11

DB4

I/O

数据4

12

DB5

I/O

数据5

13

DB6

I/O

数据6

14

DB7

I/O

数据7

15

PSB

I

H:Parallel Mode L:Serial Mode

16

NC

-

空脚

17

/RST

I

Reset Signal,低电平有效

18

NC

-

空脚

19

LEDA

-

背光源正极(+5V

20

LEDK

-

背光源负极(0V


引脚连接方式:PSBRST接高电平(3.3v);RSP3.0R/WP3.1EP3.2DB0-DB7P5口,电源接3.3v(包括背光) GND接地(包括背光)。


汉字图形显示步骤


1、显示资料RAMDDRAM


显示数据RAM 提供64x2 个字节的空间,最多可以控制16 字(64 个字)的中文字型显示,当输入显示资料RAM时,可以分别显示CGROMHCGROM CGRAM 的字型;本系列模块可以显示三种字型,分别是半宽的HCGROM 字型、CGRAM 字型及中文CGROM 字型,三种字型的选择,由在DDRAM 中写入的编码选择,在0000H0006H 的定字型,02H7FH 的编码中将选择半编码中将选择CGRAM 的自宽英数字的字型,至于A1 以上的编码将自动的结合下一个字节,组成两个字节的编码达成中文字型的编码。


BIG5A140D75F) GB(A1A0F7FF),详细各种字型编码如下:


1显示半宽字型:将位资料写入DDRAM ,范围为02H7FH 的编码。


2显示CGRAM 字型:将16 位资料写入DDRAM 中,总共有0000H0002H0004H0006H 四种编码。


3显示中文字形:将16 位资料写入DDRAM 中,范围为A140HD75FH 的编码(BIG5) , A1A0HF7FFH 的编码(GB)。将16 位资料写入DDRAM 方式为透过连写入两个字节的资料来完成,先写入高字节(D15D8)再写入低字节(D7D0)。


2、绘图RAMGDRAM


绘图显示RAM 提供64x32 个字节的记忆空间(由扩充指令设定绘图RAM 地址),最多可以控制256x64点的二维绘图缓冲空间,在更改绘图RAM 时,由扩充指令设定GDRAM 地址先设垂直地址再设水平地址(连续写入两个字节的数据来完成垂直与水平的坐标地址),再写入两个位的资料到绘图RAM,而地址计数器(AC)会自动加一,整个写入绘图RAM 的步骤如下:


1先将垂直的字节坐标(Y)写入绘图RAM 地址。


2再将水平的字节坐标(X)写入绘图RAM 地址。


3D15D8 写入到RAM (写入第一个Bytes)


4D7D0 写入到RAM (写入第二个Bytes)


液晶屏显示地址:



有关液晶其他的或详细的介绍,请参考12864液晶的资料。


程序实现:

判忙: 等待液晶模块空闲。

液晶模块要求:当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取 BF 标志时 BF需为 0,方可接受新的指令;如果在送出一个令前并不检查 BF标志,那幺在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成;在这里,我选用等待忙标志结束。程序如下:


void WaitForEnable()

{

    char busy;


    CLR_RS;

    SET_RW;


    DATA_DIR_IN;


    do                       //判忙

    {

        SET_EN;

        _NOP();                    

        busy = DATA_IN; 

        CLR_EN;

    }

    while(busy & 0x80); 


    DATA_DIR_OUT;

}

这样,每次向液晶写命令或数据时,只需先调用此函数即可,该函数将会阻塞,直到忙标志变回0(内部空闲,可以接受命令)。


写入数据: 向模块内部RAM写入数据。

写入数据到DDRAM即可显示到液晶,写入函数:


void LcdWriteData(char data)

{

    WaitForEnable();


    SET_RS;

    CLR_RW;


    DATA_OUT = data;    //写数据


    SET_EN;

    _NOP();

    CLR_EN;

}

同样,调用这个函数也可以向其他RAM写入数据,完成相应操作。


写入命令: 向模块写入命令。

写入命令可以通过液晶的指令集,控制液晶完成相应的功能。程序如下:


void LcdWriteComm(char cmd)

{

    WaitForEnable();    //检测忙信号?


    CLR_RS;

    CLR_RW;


    DATA_OUT = cmd;    //写命令


    SET_EN;

    _NOP();

    CLR_EN;

}

如果cmd0x80-0x9F,则是向液晶写入地址;地址表参见前面硬件介绍部分。


写入字符串: 写入字符串,以显示。

写入字符串即是多次调用写入数据,把字符串写入液晶以供显示。程序如下:


void LcdWriteString(char addr,char *str)

{

    LcdWriteComm(addr);

    while(*str!='\0')

    {

        LcdWriteData(*str);

        str++;

    }

}

这是向某个地址写入字符串,液晶显示到相应位置。这个函数有个要求,就是字符串是中文字符串;如果不是,每一处的英文必须两个相连,否则将显示乱码,如果只有一个英文字符,可以加入空格;如:LcdWriteString(0x90,"1 abcd你好啊"); 1+空格+abcd+汉字中 1只有一个字符,加空格,abcd两个,直接显示到一个汉字的位置。


液晶初始化:液晶必须初始化之后才能正常使用。

初始化就是一系列命令,完成液晶状态的初始工作,以使液晶可供正常使用。程序如下:


void LcdInit()

{

    CTRL_DIR_OUT;


    DelayNms(500);

    LcdWriteComm(0x30);     //基本指令集

    LcdWriteComm(0x01);     //清屏,地址00H

    LcdWriteComm(0x06);     //光标的移动方向

    LcdWriteComm(0x0c);     //开显示,关游标

}

在运行过这个函数之后,液晶方能正常的显示;在调用液晶显示函数前,必须先调用这个函数。


程序实现就先到这儿,还可以加入显示图片等功能;要收拾东西回去了,其他功能暂不实现了,以后需要的时候再加入。


使用示例:

这个程序的使用方式和串口程序库的使用方式一样,把C文件加入工程;H文件包含进要调用的程序源文件中即可。


void main( void )

{

    // Stop watchdog timer to prevent time out reset

    WDTCTL = WDTPW + WDTHOLD;

    ClkInit();

    LcdInit();

    LcdWriteString(0x90,"1 abcd你好啊");

}

这个函数运行后,将在第二行显示 1 abcd你好啊 字符串,如果把1后面的空格去掉,中文部分将是乱码。ClkInit(); 这个函数和前面一个里面调用的一样,把主系统时钟设为8MHzSMCLK设为1MHz。  有关详细内容参见程序库,mian.c


到此,液晶的驱动基本完成,其他功能之后再添加了。


如果有不好或不对的地方,欢迎大家提出,谢谢啦。


附:程序库 (1).rar


作者:给我一杯酒 

出处:http://Engin.cnblogs.com/ 

本文版权归作者和博客园共有,欢迎转载,转载保留此段文字并且注明出处;谢谢。






关键词: msp430 液晶    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]