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

  1. 硬件介绍:

    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的引脚说明:

    引脚

    名称

    方向

    说明

    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)

    引脚连接方式: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)。

    液晶屏显示地址:

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

  2. 程序实现:
    • 判忙: 等待液晶模块空闲。

      液晶模块要求:当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取 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!='\0'){LcdWriteData(*str);str++;}
      }

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

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

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

      void LcdInit()
      {CTRL_DIR_OUT;DelayNms(500);LcdWriteComm(0x30);     //基本指令集LcdWriteComm(0x01);     //清屏,地址00HLcdWriteComm(0x06);     //光标的移动方向LcdWriteComm(0x0c);     //开显示,关游标
      }

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

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

  3. 使用示例:

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

    void main( void )
    {// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;ClkInit();LcdInit();LcdWriteString(0x90,"1 abcd你好啊");
    }

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

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

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

附:程序库

作者:给我一杯酒
出处:http://Engin.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,转载保留此段文字并且注明出处;谢谢。

转载于:https://www.cnblogs.com/Engin/archive/2011/07/08/2100932.html

MSP430程序库三12864液晶程序库相关推荐

  1. STC51-1602、12232、12864液晶

    1 液晶概述 液晶(LiquidCrystal) 是一种高分子材料,因为其特殊的物理.化学.光学特性,20世纪中叶开始广泛应用在轻薄型显示器上.         液晶显示器(LiquidCrystal ...

  2. 12864液晶8x16ascii点阵_【单片机自学】7.液晶实验

    1.液晶1602 硬件原理及连线 图1.1 开发板连线图 图1.2 开发板实物图 图1.3 液晶1602 表格3.7.1.1 引脚功能介绍 液晶1602的使用非常的方便,数据线8条,控制线3条,其实总 ...

  3. 51单片机三线串行驱动12864液晶

    以前写12864的液晶程序都是用的并行的方式,这种方式焊接起来很麻烦,而且占用的IO口比较多. 今天尝试使用串行方式来驱动该模块. 本程序是基于STC89C52的12864串行模式的程序,硬件电路连接 ...

  4. 12864液晶深入学习笔记_1——基于msp430g2553

    12864液晶学习笔记 Created on: 2012-8-30 Author: zhang bin 这是我对12864的学习笔记,12864液晶功能很全面,使用起来也很方便,能够满足一般的研究和工 ...

  5. protues仿真中12864液晶屏串行编程的感想(从实际硬件驱动芯片 ST7565R到仿真硬件驱动芯片SED1565)

    因为疫情的原因,没办法回学校拿毕业设计,自然也就没办法调试,虽然硬件电路都搭好了,但没法调试也就意味着不知道程序编写是否有问题,所以就想着在protues上把硬件电路搭起来调试程序,因为单片机用的是s ...

  6. STC51入门笔记(郭天祥C语言)---第八节:通用型1602,12232,12864液晶操作方法

    声明:本篇文章只是个人知识盲区.知识弱点.重点部分的归纳总结,望各位大佬不喜勿喷.梳理顺序是按照书籍的实际顺序梳理,转载请注明出处. 作者:sumjess 一.液晶概述: 液晶(LiquidCryst ...

  7. 12864液晶驱动源码,独创中英文混合输出

    12864液晶驱动源码,独创中英文混合输出 51单片机学习笔记:ST7920控制器的12864液晶使用总结 转载于:https://www.cnblogs.com/LittleTiger/p/4724 ...

  8. STM32驱动ST7920的12864液晶(串行方式)

    /****************************************************************************************** * 文件名称 : ...

  9. 基于s3c2440的12864液晶驱动

    基于s3c2440的12864液晶驱动 12864是12864点阵液晶模块的点阵数简称,业界约定俗成的简称. 一.液晶显示模块概述 12864A-1 汉字图形点阵液晶显示模块,可显示汉字及图形,内置 ...

最新文章

  1. php函数scandir_使用PHP函数scandir排除特定目录
  2. 操作系统存储器管理实验报告_献上膝盖!华为工程师抛出一份堪称“举世无双”操作系统笔记...
  3. 李安的电影梦by李安
  4. 数据结构与算法——二分查找与二叉排序树
  5. 字符流的抽象类 java
  6. 站在我个人的角度上来说。。。。。
  7. Illumina联手IBM Watson Health解读癌症基因谱
  8. 微软推出Windows Sandbox:可安全运行任何应用的一次性VM\n
  9. Cadence OrCAD Capture 设计准备图文教程
  10. 写给本命年24岁的自己和你:这一年决定你的未来
  11. 阿里云主机(ECS)入门(图文说明)详细了解
  12. 每一代内存的读写速度
  13. iOS马甲包开发招式及规避4.3方法合集
  14. 宝可梦世界无限极怎么开服务器,口袋妖怪世界无极限运行库
  15. HTML 视频播放代码
  16. 面向自动驾驶的定位方法综述
  17. Paxos算法和Raft算法---经典的分布式系统一致性问题解决算法
  18. 40套MiniIcon分享
  19. 移动推送--阿里云appKey分端推送问题
  20. breach1.0 tomcat war远程部署

热门文章

  1. Adversarial Autoencoder(GAN和VAE的结合版) 阅读笔记
  2. Java 进行BCC异或校验
  3. 成功解决E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁(/var/lib/dpkg/lock
  4. 基于PHP+MySQL医院在线预约平台系统的设计与开发
  5. 数据挖掘--数据探索与数据预处理
  6. 【C语言】强制类型转换的原理
  7. linux下调试域格CLM920 NC5等9x07平台模块 GobiNet拨号
  8. 国防科大编译原理慕课笔记
  9. matlab解方程出现root,如何获得数值解:
  10. 以太坊go-ethereum客户端查询交易列表(二)