MSP430程序库<三>12864液晶程序库

发布者:seanxnie最新更新时间:2019-10-10 来源: eefocus关键字:MSP430  程序库  12864液晶 手机看文章 扫描二维码
随时随地手机看文章

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


硬件介绍:

430的数字IO口:


MSP430F149、MSP430F169均有P1-P6 每个8位 共48个IO口;有大量的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的引脚说明:

image.png

image.png

引脚连接方式:PSB、RST接高电平(3.3v);RS接P3.0;R/W接P3.1;E接P3.2;DB0-DB7接P5口,电源接3.3v(包括背光) GND接地(包括背光)。


汉字图形显示步骤:


1、显示资料RAM(DDRAM)


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


BIG5(A140~D75F) GB(A1A0~F7FF),详细各种字型编码如下:


1). 显示半宽字型:将8 位资料写入DDRAM 中,范围为02H~7FH 的编码。


2). 显示CGRAM 字型:将16 位资料写入DDRAM 中,总共有0000H,0002H,0004H,0006H 四种编码。


3). 显示中文字形:将16 位资料写入DDRAM 中,范围为A140H~D75FH 的编码(BIG5) , A1A0H~F7FFH 的编码(GB)。将16 位资料写入DDRAM 方式为透过连写入两个字节的资料来完成,先写入高字节(D15~D8)再写入低字节(D7~D0)。


2、绘图RAM(GDRAM)


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


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


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


3). 将D15~D8 写入到RAM 中(写入第一个Bytes)。


4). 将D7~D0 写入到RAM 中(写入第二个Bytes)。


液晶屏显示地址:


clip_image002


有关液晶其他的或详细的介绍,请参考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;

}

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


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

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


void LcdWriteString(char addr,char *str)

{

    LcdWriteComm(addr);

    while(*str!='')

    {

        LcdWriteData(*str);

        str++;

    }

}

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


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

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


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(); 这个函数和前面一个里面调用的一样,把主系统时钟设为8MHz,SMCLK设为1MHz。  有关详细内容参见程序库,mian.c。


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


关键字:MSP430  程序库  12864液晶 引用地址:MSP430程序库<三>12864液晶程序库

上一篇:MSP430程序库<四>printf和scanf函数移植
下一篇:MSP430程序库<二>UART异步串口

推荐阅读最新更新时间:2024-11-17 04:08

怎样学习MSP430单片机
MSP430是Texas Instrument(TI,德州仪器)推出的一款超低功耗单片机。TI是一个非常有实力的、全球领先的芯片制造公司,MSP430不仅因为其优秀的设计,更因为TI提供的强有力的技术支持,而很快成为今天市场上非常受欢迎的一款单片机。 使用官方资料 学习使用任何一款芯片,我们要明确最根本最权威的参考资料是官方给出的资料。对于MSP430单片机,也不例外。市面上有各种各样介绍MSP430单片机的书,水平参差不齐。而其中有一大部分基本上就是翻译芯片手册,更大的问题是,很多书上还有大量的印刷错误等(像寄存器写错、程序有问题等的现象很常见)。这样的情况下,很难好好学习。 在学习430单片机的过程中,尤其是对于接触过51单
[单片机]
怎样学习<font color='red'>MSP430</font>单片机
MSP430的IO口中断/中断特性|Px中断进不去 原因
MSP430学习笔记之七:IO口中断 MSP430中断嵌套机制 (1) 430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT。 (2) 当进入中断程序时,只要不在中断中再次开中断,总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行。 (3)若在中断A中开了总中断,刚可以响应后来的中断B(不管B的优先级比A高还是低),B执行完现继续执行。注意:进入中断B生总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后中跳出中断程序进入A程序时,总中断会自动打开。 (4)若在中断中开了总中断,后来的中断同时有多个,则会按优先级来执行
[单片机]
MSP430FR6989系列教程 -- 第一章 点亮LED
1,MSP430FR6989的概述 高达 16MHz 的 16 位 RISC 架构 优化的超低功耗模式 高达128KB的FRAM 五个16位定时器,7个捕捉/比较 日历和闹钟功能的 RTC 16位和32位CRC校验(CRC16、CRC32) 16个外部通道的12位ADC 集成 LCD 驱动器 增强型串行通信(UART、IIC、SPI) 灵活的时钟系统(DCO、VLO、LFXT、HFXT) AES安全加密、ESI等等 2,基本运算符的回顾 对于寄存器的操作,大部分就是 &、|、~的操作,这里我们简单回顾一下。 与 & :与 相当于“乘”,任何数乘以0,都等于0,只有1与1才是1 与
[单片机]
<font color='red'>MSP430</font>FR6989系列教程 -- 第一章 点亮LED
MSP430F5438A中断系统
1、MSP430F5438A有三个定时器: TA0、TA1 和 TB0。 2、CCR0单独用一个中断向量,且优先级最高。其他CCR1--CCR5用公用一个中断向量。3 3、中断向量: #define TIMER1_A1_VECTOR (48 * 2u) /* 0xFFE0 Timer1_A3 CCR1-2, TA1 */ #define TIMER1_A0_VECTOR (49 * 2u) /* 0xFFE2 Timer1_A3 CCR0 */ #define TIMER0_A1_VECTOR (53 * 2u) /* 0xFFEA Timer0_A5 CCR1-4, TA0 */ #define TI
[单片机]
<font color='red'>MSP430</font>F5438A中断系统
msp430的printf函数的简单移植
这几个月都在做一个基于TCS34725的RGB颜色传感器的工程,我使用的主控是MSP430,平时调试的时候用485总线发送到上位计(电脑或上层主控机),开始直接用串口发送函数直接发送,但是很多数据显示超级不方便,比如浮点数和有特地格式的数据流,先前都是自己用串口发送函数组一函数就是调用了int putchar(char *) 函数,于是我花了几分钟写了一个putchar函数,已使用,还真的成功了…….,想想先前傻逼的一个一个的构造格式,转化数字为字符串,现在终于可以使用printf函数了…. int putchar(int ch) { if (ch == 'n') { RS485Send
[单片机]
MSP430可通过哪些接口进行烧写程序
MSP430无论是仿真还是烧写程序,一般可以通过:JTAG、SBW、BSL接口进行。 1、JTAG是利用边界扫描技术,在430内部有逻辑接口给JTAG使用,内部有若干个寄存器连接到了430内部数据地址总线上,所以可以访问到430的所有资源,包括全地址FLASH、RAM及各种寄存器。可以用于对430的仿真和编程,主要连接线有TMS、TCK、TDI、TDO,430还需要另两条线路RST、TEST来启动JTAG命令序列。 2、SBW是SPY-BI-WIRE,可以简称为两线制JTAG,主要有SBWTCK(连接到JTAG接口的7脚TCK)与SBWTDIO(连接到JTAG接口的1脚TDO/TDI),该接口主要用于小于28脚的2系列单片机
[单片机]
基于MSP430和FPGA的风光逆变并网系统
为了缓解能源问题,在完全兼容现有供电系统的基础上,该系统采用风能和太阳能对电能进行补给的方法,并且附带快速检测孤岛效应,快速并网和断网的功能。系统的功率电路部分采用全桥拓扑进行逆变,数字控制系统采用 MCU + FPGA 构架。由全硬件完成对外网市电的倍频工作,再由FPGA动态调整系统输出相位,让输出和外网市电实现同相位。MCU完成对太阳能电池板的最大功率点追踪(MPPT),发电端电压欠压检测以及孤岛效应检测等功能。针对电力系统强电的特性并结合当今热门的 物联网 技术,该系统人性化地设计了无线检测的功能,用户能通过手机,计算机或者手持式终端就可以了解当前系统状态。该系统创造性的设计方式既可以用于电厂的多能源并行发电,也适合家用
[单片机]
基于<font color='red'>MSP430</font>和FPGA的风光逆变并网系统
翻滚吧!MSP430 LaunchPad
日前,德州仪器宣布推出音频电容式触摸BoosterPack,这是以TMS320C5535开发板为核心的产品,支持耳机,MicroSD,OLED显示屏。而与C5535开发板不同的是,带有LaunchPad插槽,也就是说LaunchPad可以和C5535组合,通过UART将MSP430上的命令传至C5535上,比如播放,快进等几十种功能都已经内置。 这是首款完全由MCU控制DSP的TI解决方案,通过两者的合作,430有了新的简单的应用,而C5535也有了专门的控制器。 LaunchPad官方售价为4.3美元,BoosterPack为30美元。总而言之,如果有爱好者想做一套非常简单的C5535应用,便可以集中精力开发内部算法:诸如语
[单片机]
翻滚吧!<font color='red'>MSP430</font> LaunchPad
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved