LCD1602显示

msp430f5529控制LCD1602显示

一、管脚图

在这里插入图片描述

二、寄存器选择指令

在这里插入图片描述

三、代码实现

main.c

#include <msp430f5529.h>
#include "LCD1602.h"
unsigned char s3[] = "20";
unsigned char s4[] = "0.01";

unsigned char s1[]="R=";
unsigned char s2[]="C=";
unsigned char s5[]="Ω";
unsigned char s6[]="F";
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;
    LCD1602_Initi();
    LCD1602_WriteCMD(0x80);//第一行
    DispStr(s1);
    LCD1602_WriteCMD(0x80+0x4);
    DispStr(s5);
    LCD1602_WriteCMD(0x88);//第三行
    DispStr(s2);
    LCD1602_WriteCMD(0x88+0x04);
    DispStr(s6); 
    
    while(1){
    write(s3,s4); 
    }
  while(1);
}

LCD1602.c

#include <msp430.h>
#include <string.h>
#include "LCD1602.h"
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define DataDir     P3DIR
#define DataPort    P3OUT
#define Busy        0x80
#define CLR_RS P1OUT&=~BIT3;    //RS = P1.3
#define SET_RS P1OUT|=BIT3;
#define CLR_RW P1OUT&=~BIT4;    //RW = P1.4
#define SET_RW P1OUT|=BIT4;
#define CLR_EN P1OUT&=~BIT5;    //EN = P1.5
#define SET_EN P1OUT|=BIT5; 
void Disp1Char(unsigned char data)
{
    LCD1602_WriteDATA(data);
}
void DispStr(unsigned char *ptr)
{
    unsigned char i,n;
    n = strlen(ptr);
    for (i=0;i<n;i++)
    {
        Disp1Char(ptr[i]);
        delay_ms(2);       
    }
}


void write(unsigned char *s3,unsigned char *s4){
    unsigned char ss[] = "     ";//五位
    
    LCD1602_WriteCMD(0x80+0x01);
    DispStr(s3);   
    LCD1602_WriteCMD(0x88+0x01);
    DispStr(s4);
    LCD1602_WriteCMD(0x80+0x01);
    DispStr(ss);   
    LCD1602_WriteCMD(0x88+0x01);
    DispStr(ss);
    
}
void LCD1602_WriteCMD(unsigned char cmd)
{
        CLR_EN;
        CLR_RS;         //指令RS=0;
        CLR_RW;         //写RW=0;
        
        delay_ms(2);
        DataPort=cmd;   //指令数据传到P0口待发送给LCD1602
        delay_ms(2);
        
        SET_EN;         //en=1
        delay_ms(2);
        CLR_EN;         //en=0
        delay_ms(2);
}
void LCD1602_WriteDATA(unsigned char Data)
{
      
    SET_RS;               //rs高
    CLR_RW;               //rw低
    DataPort=Data;
    delay_ms(2);
    
    SET_EN;               //en高
    delay_ms(2);
    CLR_EN;               //en低
    delay_ms(2);
}
unsigned char Busy_Check()
{
   unsigned char LCD_Status;
   CLR_RS;
   SET_RW;
   SET_EN;
   delay_ms(2);
   LCD_Status = DataDir;
   CLR_EN;
   return LCD_Status;
}
void Delay_ms(unsigned int t)
{
    for(int x=t;x>0;x--)
      for(int y=120;y>0;y--);
}
void LCD_CLR()
{
    CLR_RS;
    CLR_RW;
    DataPort=0xff;
    SET_EN;
    CLR_EN;
}
void LCD1602_Initi()
{
  
  P3DIR|=0xff;
  P1DIR |= BIT3 + BIT4 + BIT5;
  P3REN = 0XFF;
  P1REN |= BIT3 + BIT4 + BIT5;  
  LCD1602_WriteCMD(0x38);        //功能设定指令,设定数据总线位数、显示行数及字形
  LCD1602_WriteCMD(0x0c);        //显示功能开,无光标,不闪烁。
  LCD1602_WriteCMD(0x06);       //进入模式,每次定入1位数据后光标右移,屏不移动
  LCD1602_WriteCMD(0x01);       //清屏
  delay_ms(10);
//  LCD1602_WriteCMD(0x08);        //显示开关控制指令,显示功能关,无光标
//  LCD1602_WriteCMD(0x01);        //清屏  
//  LCD1602_WriteCMD(0x06);        //进入模式,每次定入1位数据后光标右移,屏不移动
//  LCD1602_WriteCMD(0x14);        //设定显示屏或光标移动方向指令,写入新的数据后,光标右移,显示屏不移动。 
//  LCD1602_WriteCMD(0x0c);        //显示功能开,无光标,不闪烁。
}

LCD1602.h

/*
* LCD1602.h
*
*  Created on: 2018年6月3日
*      Author: Sunnl
*/

#ifndef LCD1602_H_//if not define的简写
#define LCD1602_H_
#include <msp430.h>

void Disp1Char(unsigned char data);
void DispStr(unsigned char *ptr);
void DispNumb(unsigned int *ptr);
void LCD1602_WriteCMD(unsigned char cmd);
void LCD1602_WriteDATA(unsigned char Data);
void LCD1602_Initi();
void Delay_ms(unsigned int t);
unsigned char Busy_Check();
void LCD_CLR();
void write(unsigned char *s3,unsigned char *s4);
#endif
/* LCD1602_H_ */
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值