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);
  • 相关阅读:
    把数据库转化成数据库脚本
    营养瘦身第一菜——金陵素什锦 健康程序员,至尚生活!
    十类好吃不胖的食物 健康程序员,至尚生活!
    一周带饭实录(附作菜菜谱) 健康程序员,至尚生活!
    日常五大习惯有助减肥 健康程序员,至尚生活!
    【暴强】200种好口碑便宜护肤品 健康程序员,至尚生活!
    腹式肠道操 缩胃瘦身有奇效 健康程序员,至尚生活!
    一天4时段喝水轻松瘦身 健康程序员,至尚生活!
    10种不要钱的护肤法则 健康程序员,至尚生活!
    看了这篇你肯定瘦 全身上下想瘦哪就瘦哪 健康程序员,至尚生活!
  • 原文地址:https://www.cnblogs.com/yuesheng/p/2101728.html
Copyright © 2011-2022 走看看