zoukankan      html  css  js  c++  java
  • LCD1602的MSP430驱动函数

    C文件 LCD1602_Driver.c

    View Code
    1 /**************引用头文件***************/
    2 #include <msp430F149.h> //视具体单片机型号引用不同头文件
    3  #include "LCD1602_Driver.h"
    4  #define uchar unsigned char
    5  #define uint unsigned int
    6
    7 /**************接口定义***************/
    8 #define DataDir P4DIR //8位数据线=P4口
    9 #define DataPort P4OUT
    10 #define DataIn P4IN
    11 #define Busy 0x80 //Busy信号为数据线最高位BIT7
    12 #define CtrlDir P3DIR
    13 #define CLR_RS P3OUT&=~BIT0; //RS = P3.0
    14 #define SET_RS P3OUT|=BIT0;
    15 #define CLR_RW P3OUT&=~BIT1; //RW = P3.1
    16 #define SET_RW P3OUT|=BIT1;
    17 #define CLR_EN P3OUT&=~BIT2; //EN = P3.2
    18 #define SET_EN P3OUT|=BIT2;
    19
    20 /*******************************************
    21 函数名称:LcdWriteCommand
    22 功 能:向液晶模块写入命令
    23 参 数:cmd--命令,
    24 chk--是否判忙的标志,1:判忙,0:不判
    25 返回值 :无
    26 ********************************************/
    27 void LcdWriteCommand(uchar cmd,uchar chk)
    28 {
    29
    30 if (chk) CheckBusy(); // 检测忙信号?
    31
    32 CLR_RS;
    33 CLR_RW;
    34 _NOP();
    35
    36 DataPort = cmd; //将命令字写入数据端口
    37 _NOP();
    38
    39 SET_EN; //产生使能脉冲信号
    40 _NOP();
    41 _NOP();
    42 CLR_EN;
    43 }
    44
    45 /*******************************************
    46 函数名称:LcdWriteData
    47 功 能:向液晶显示的当前地址写入显示数据
    48 参 数:data--显示字符数据
    49 返回值 :无
    50 ********************************************/
    51 void LcdWriteData( uchar DataByte )
    52 {
    53 CheckBusy(); //等待液晶不忙
    54
    55 SET_RS;
    56 CLR_RW;
    57 _NOP();
    58
    59 DataPort = data; //将显示数据写入数据端口
    60 _NOP();
    61
    62 SET_EN; //产生使能脉冲信号
    63 _NOP();
    64 _NOP();
    65 CLR_EN;
    66 }
    67 /*******************************************
    68 函数名称:CheckBusy
    69 功 能:检测1602是否忙,等待1602液晶完成内部操作
    70 参 数:无
    71 返回值 :无
    72 ********************************************/
    73 void CheckBusy(void)
    74 {
    75 DataDir &= 0x00; //将P4口切换为输入状态
    76
    77 CLR_RS;
    78 SET_RW;
    79 _NOP();
    80 SET_EN;
    81 _NOP();
    82 _NOP();
    83
    84 while((DataIN & Busy)!=0); //检测忙标志
    85
    86 CLR_EN;
    87
    88 DataDir |= 0xFF; //将P4口切换为输出状态
    89 }
    90
    91 /*******************************************
    92 函数名称:Delay5ms
    93 功 能:延时约5ms
    94 参 数:无
    95 返回值 :无
    96 ********************************************/
    97 void Delay5ms(void)
    98 {
    99 uint i=40000;
    100 while (i != 0)
    101 {
    102 i--;
    103 }
    104 }
    105
    106 /*******************************************
    107 函数名称:LcdReset
    108 功 能:对1602液晶模块进行复位操作
    109 参 数:无
    110 返回值 :无
    111 ********************************************/
    112 void LcdReset(void)
    113 {
    114 CtrlDir |= 0x07; //控制线端口设为输出状态
    115 DataDir = 0xFF; //数据端口设为输出状态
    116
    117 LcdWriteCommand(0x38, 0); //规定的复位操作
    118 Delay5ms();
    119 LcdWriteCommand(0x38, 0);
    120 Delay5ms();
    121 LcdWriteCommand(0x38, 0);
    122 Delay5ms();
    123
    124 LcdWriteCommand(0x38, 1); //显示模式设置
    125 LcdWriteCommand(0x08, 1); //显示关闭
    126 LcdWriteCommand(0x01, 1); //显示清屏
    127 LcdWriteCommand(0x06, 1); //写字符时整体不移动
    128 LcdWriteCommand(0x0c, 1); //显示开,不开游标,不闪烁
    129 }
    130 /*******************************************
    131 函数名称:LocateXY
    132 功 能:向液晶输入显示字符位置的坐标信息
    133 参 数:x--位置的列坐标0-15
    134 y--位置的行坐标0-1
    135 返回值 :无
    136 ********************************************/
    137 void LocateXY(uchar x,uchar y)
    138 {
    139 uchar temp;
    140
    141 temp = x&0x0f;
    142 y &= 0x01;
    143 if(y) temp |= 0x40; //如果在第2行
    144 temp |= 0x80;//第一行为0x80,第二行为0x80+0x40
    145
    146 LcdWriteCommand(temp,1);
    147 }
    148 /*******************************************
    149 函数名称:Disp1Char
    150 功 能:在某个位置显示一个字符
    151 参 数:x--位置的列坐标0-15
    152 y--位置的行坐标0-1
    153 data--显示的字符数据
    154 返回值 :无
    155 ********************************************/
    156 void Disp1Char(uchar x,uchar y,uchar DataByte)
    157 {
    158 LocateXY( x, y );
    159 LcdWriteData( DataByte );
    160 }
    161 /***********************************************
    162 函数名称:DispStr
    163 功 能:让液晶从某个位置起连续显示一个字符串
    164 参 数:x--位置的列坐标0-15
    165 y--位置的行坐标0-1
    166 ptr--指向字符串存放位置的指针
    167 返回值 :无
    168 ***********************************************/
    169 void DispStr(uchar x,uchar y,uchar *ptr)
    170 {
    171 uchar *temp;
    172 uchar i,n = 0;
    173
    174 temp = ptr;
    175 while(*ptr++ != '\0') n++; //计算字符串有效字符的个数
    176
    177 for (i=0;i<n;i++)
    178 {
    179 Disp1Char(x++,y,temp[i]);
    180 if (x == 0x0f)
    181 {
    182 x = 0;
    183 y ^= 1;//异或操作,换行
    184 }
    185 }
    186 }
    187 /*******************************************
    188 函数名称:DispNchar
    189 功 能:让液晶从某个位置起连续显示N个字符
    190 参 数:x--位置的列坐标0-15
    191 y--位置的行坐标0-1
    192 n--字符个数
    193 ptr--指向字符存放位置的指针
    194 返回值 :无
    195 ********************************************/
    196 void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)
    197 {
    198 uchar i;
    199
    200 for (i=0;i<n;i++)
    201 {
    202 Disp1Char(x++,y,ptr[i]);
    203 if (x == 0x0f)
    204 {
    205 x = 0;
    206 y ^= 1;
    207 }
    208 }
    209 }

    相应头文件 LCD1602_Driver.h

    View Code
    1 #define uchar unsigned char
    2 #define uint unsigned int
    3 /**************底层函数***************/
    4 void LcdWriteCommand(uchar cmd,uchar chk);
    5 void LcdWriteData( uchar DataByte );
    6 void CheckBusy(void);
    7 void Delay5ms(void);
    8 /**************功能函数***************/
    9 void LcdReset(void);
    10 void LocateXY(uchar x,uchar y);
    11 void Disp1Char(uchar x,uchar y,uchar DataByte);
    12 void DispStr(uchar x,uchar y,uchar *ptr);
    13 void DispNChar(uchar x,uchar y, uchar n,uchar *ptr);
  • 相关阅读:
    Python 存储引擎 数据类型 主键
    Python 数据库
    Python 线程池进程池 异步回调 协程 IO模型
    Python GIL锁 死锁 递归锁 event事件 信号量
    Python 进程间通信 线程
    Python 计算机发展史 多道技术 进程 守护进程 孤儿和僵尸进程 互斥锁
    Python 异常及处理 文件上传事例 UDP socketserver模块
    Python socket 粘包问题 报头
    Django基础,Day7
    Django基础,Day6
  • 原文地址:https://www.cnblogs.com/yuesheng/p/2101728.html
Copyright © 2011-2022 走看看