找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6156|回复: 5
收起左侧

lcd12864驱动程序 用于MSP430

[复制链接]
ID:221502 发表于 2017-7-22 02:47 | 显示全部楼层 |阅读模式
LCD函数库,可用于MSP430

单片机源程序如下:
  1. /*
  2. * LCD_BASIC_LIBRARY.C
  3. *
  4. *  Created on: 2017年7月20日
  5. *      Author: Hasee
  6. */

  7. #include <msp430.h>

  8. typedef unsigned char uchar;
  9. typedef unsigned int uint;

  10. #define LCD_DataIn P8DIR=0x00   //数据口输入模式
  11. #define LCD_DataOut P8DIR=0xFF   //数据口输出模式
  12. #define LCD2MCU_Data P8IN       //LCD向芯片输入数据
  13. #define MCU2LCD_Data P8OUT      //芯片向LCD输出的数据
  14. #define LCD_CmdOut P3DIR|=BIT0+BIT4+BIT5  //设置控制口低三位RS、RW、E为输出口
  15. #define LCD_RS_L P3OUT&=~BIT0      //RS=P3.0
  16. #define LCD_RS_H P3OUT|=BIT0
  17. #define LCD_RW_L P3OUT&=~BIT5      //RW=P3.5
  18. #define LCD_RW_H P3OUT|=BIT5
  19. #define LCD_EN_L P3OUT&=~BIT4      //EN=P3.4
  20. #define LCD_EN_H P3OUT|=BIT4

  21. uchar LCD_AddrTable[32]={
  22.         0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
  23.         0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
  24.         0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
  25.         0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
  26. };



  27. /*******************************************
  28. 函数名称:LCD_WriteCmd
  29. 功    能:向液晶中写控制命令
  30. 参    数:cmd控制命令
  31. 返回值  :无
  32. ********************************************/
  33. void LCD_WriteCmd(uchar cmd)
  34. {
  35.     uchar LCD_TmpData=0x00;
  36.     LCD_RS_L;
  37.     LCD_RW_H;
  38.     LCD_DataIn;
  39.     do                               //忙检测
  40.     {
  41.         LCD_EN_H;
  42.         _NOP();
  43.         LCD_TmpData=LCD2MCU_Data;
  44.         LCD_EN_L;
  45.     }
  46.     while(LCD_TmpData & 0x80);

  47.     LCD_RS_L;
  48.     LCD_RW_L;
  49.     LCD_DataOut;
  50.     MCU2LCD_Data=cmd;
  51.     LCD_EN_H;
  52.     _NOP();
  53.     LCD_EN_L;
  54. }

  55. /*******************************************
  56. 函数名称:LCD_WriteData
  57. 功    能:向液晶中写数据
  58. 参    数:data数据
  59. 返回值  :无
  60. ********************************************/
  61. void LCD_WriteData(uchar data)
  62. {
  63.     uchar LCD_TmpData=0x00;
  64.     LCD_RS_L;
  65.     LCD_RW_H;
  66.     LCD_DataIn;
  67.     do                                  //忙检测
  68.     {
  69.         LCD_EN_H;
  70.         _NOP();
  71.         LCD_TmpData=LCD2MCU_Data;
  72.         LCD_EN_L;
  73.     }
  74.     while(LCD_TmpData&0x80);

  75.     LCD_RS_H;
  76.     LCD_RW_L;
  77.     LCD_DataOut;
  78.     MCU2LCD_Data=data;
  79.     LCD_EN_H;
  80.     _NOP();
  81.     LCD_EN_L;
  82. }

  83. /*******************************************
  84. 函数名称:Delay_1ms
  85. 功    能:延迟1ms
  86. 参    数:无
  87. 返回值  :无
  88. ********************************************/
  89. void Delay_1ms()
  90. {
  91.     uchar i;
  92.     for(i=0;i<150;i++)_NOP();
  93. }

  94. /*******************************************
  95. 函数名称:Delay_Nms
  96. 功    能:延迟i ms
  97. 参    数:i
  98. 返回值  :无
  99. ********************************************/
  100. void Delay_Nms(uchar i)
  101. {
  102.     int j;
  103.     for(j=0;j<i;j++)
  104.     {
  105.         Delay_1ms();
  106.     }
  107. }

  108. /*******************************************
  109. 函数名称:LCD_Initial
  110. 功    能:LCD初始化
  111. 参    数:无
  112. 返回值  :无
  113. ********************************************/
  114. void LCD_Initial()
  115. {
  116.     LCD_CmdOut;
  117.     LCD_WriteCmd(0x30);   //功能设置基本指令集
  118.     Delay_1ms();
  119.     LCD_WriteCmd(0x02);    //DDRAM的地址计数器(AC)复位,游标复位
  120.     Delay_1ms();
  121.     LCD_WriteCmd(0x0c);   //整体显示开,游标关闭
  122.     Delay_1ms();
  123.     LCD_WriteCmd(0x01);   //清屏
  124.     Delay_1ms();
  125.     LCD_WriteCmd(0x06);    //写入或者读取时游标自动右移
  126.     Delay_1ms();
  127.     LCD_WriteCmd(0x80);     //设置显示初始位置,到AC值
  128. }


  129. /*******************************************
  130. 函数名称:Clear_GDRAM
  131. 功    能:清除液晶GDRAM中的随机数据
  132. 参    数:无
  133. 返回值  :无
  134. ********************************************/
  135. void Clear_GDRAM(void)
  136. {
  137.     uchar i,j,k;
  138.     LCD_WriteCmd(0x34);
  139.     i=0x80;
  140.     for(j=0;j<32;j++)
  141.     {
  142.         LCD_WriteCmd(i++);
  143.         LCD_WriteCmd(0x80);
  144.         for(k=0;k<16;k++)
  145.         {
  146.             LCD_WriteData(0x00);
  147.         }
  148.     }
  149.     i=0x80;
  150.     for(j=0;j<32;j++)
  151.     {
  152.         LCD_WriteCmd(i++);
  153.         LCD_WriteCmd(0x88);
  154.         for(k=0;k<16;k++)
  155.         {
  156.             LCD_WriteData(0x00);
  157.         }
  158.     }
  159. ……………………

  160. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
LCD_BASIC_LIBRARY.zip (1.39 KB, 下载次数: 71)
回复

使用道具 举报

ID:401700 发表于 2019-7-10 22:54 | 显示全部楼层
请问是IAR环境吗
回复

使用道具 举报

ID:392405 发表于 2019-7-12 15:50 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:292427 发表于 2019-12-17 17:35 | 显示全部楼层
是用的32768的晶振吗
回复

使用道具 举报

ID:632129 发表于 2020-1-17 17:22 | 显示全部楼层
谢谢楼主的分享
回复

使用道具 举报

ID:635762 发表于 2020-9-24 20:37 | 显示全部楼层
请问一下,这个要怎么连接?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表