[讨论] msp430驱动LCD1602液晶显示编程实例分享

Jacktang   2016-2-29 23:02 楼主
msp430驱动LCD1602液晶显示C语言程序
  • #include "msp430x14x.h"
  • #define CPU_F ((double)8000000)
  • #define delay_us(x) __delay_cycles((long)(CPU_F)*(double)x/2000000.0)
  • #define delay_ms(x) __delay_cycles((long)(CPU_F)*(double)x/20000.0)
  • #define uint unsigned int
  • #define uchar unsigned char
  • #define RS_H  P5OUT|=BIT5
  • #define RS_L  P5OUT&=~BIT5 //P1OUT&=~BIT0
  • #define RW_H  P5OUT|=BIT6
  • #define RW_L  P5OUT&=~BIT6
  • #define E_H  P5OUT|=BIT7
  • #define E_L  P5OUT&=~BIT7
  • #define BF  BIT7
  • #define DataDIR P4DIR
  • #define DataOUT P4OUT
  • #define DataIN  P4IN
  • uchar lcd_shuju[]="0123456789-";//定义字符数组显示数字
  • uchar lcd_tab[]="abcde";
  • uchar lcd_tab1[]="XYZ";
  • /*void LCDable(void)  //忙检测不写也可以
  • {
  • DataDIR&=0X00;//数据端设置为输入(读取液晶状态字,判断液晶状态)
  • RS_L;
  • RW_H;
  • E_H;
  • delay_us(4);
  • while((DataIN & BF!=0));
  • E_L;
  • DataDIR|=0xff;
  • }*/
  • void shizhong()
  • {
  •   BCSCTL1=0X37;            //使用高速晶振XT2,低速模式,8分频
  •   BCSCTL2=0XBE;           //选择时钟源为XT2,8分频,DC0震荡电阻选择内部电阻
  • }
  • void WriteCommond(uchar Commond) //写指令
  • {
  • //LCDable();
  • DataDIR|=0xff;//数据端设置为输出
  • RS_L;
  • RW_L;
  • E_L;
  • delay_ms(4);
  • DataOUT=Commond;
  • delay_ms(4);
  • E_H;
  • delay_ms(4);
  • E_L;
  • RW_H;
  • RS_H;
  • }
  • void WriteAddress(uchar x) //写地址
  • {
  •   WriteCommond(0x80|x);
  • }
  • void Writedata(uchar data) //写数据
  • {
  • //LCDable();
  • DataDIR|=0xff;//数据端设置为输出
  • RS_H;
  • RW_L;
  • E_L;
  • delay_ms(4);
  • DataOUT=data;
  • delay_ms(4);
  • E_H;
  • delay_ms(4);
  • E_L;
  • RW_H;
  • RS_L;
  • }
  • void LCD_Init()
  • {
  • DataDIR|=0xff;//数据口设置为输出
  • P5DIR|=0XE0;//控制端设置为输出
  • WriteCommond(0X38);//显示模式设置 16X2
  • WriteCommond(0X0C);//开显示,光标设置为不显示
  • WriteCommond(0X06);//开显示,光标移动模式设置为:读写一个字符后光标及地址指针加1
  • WriteCommond(0x80+0x00);//显示起始地址
  • WriteCommond(0X01);//清屏设置
  • }
  • void display_ZFC()
  • {
  •     uchar i;
  •     WriteAddress(0x05);//显示起始地址:第1行第6个位置
  •     i=0;
  •     while(lcd_tab!='\0')
  •      {
  •       Writedata(lcd_tab);
  •       i++;
  •       delay_ms(50);
  •      }
  • }
  • void display_ZFC1()
  • {
  •     uchar i;
  •     WriteAddress(0x42);//显示起始地址:第2行第3个位置
  •     i=0;
  •     while(lcd_tab1!='\0')
  •      {
  •       Writedata(lcd_tab1);
  •       i++;
  •       delay_ms(50);
  •      }
  • }
  • void display_SJ()
  • {
  •     uchar i;
  •     WriteAddress(0x03);//显示起始地址:第1行第1个位置
  •     i=0;
  •     while(lcd_shuju!='\0')
  •      {
  •       Writedata(lcd_shuju);
  •       i++;
  •       delay_ms(50);
  •      }
  • }
  • int main( void )
  • {
  •   WDTCTL = WDTPW + WDTHOLD;//关闭看门狗
  •   shizhong();//配置时钟
  •   P5DIR=0xE0;//控制端设置为输出
  •   LCD_Init();//液晶初始化
  •   display_ZFC();//显示字符串
  •   display_ZFC1();//显示字符串1
  •   delay_ms(2000);
  •   display_SJ();//显示数据串0123456789-
  • }

回复评论 (1)


多谢楼主分享
点赞  2016-3-19 20:17
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复