2761|2

30

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

LAUNCHPAD 新手入门~~~1602lcd 的源程序 [复制链接]

msp430 f149 对lcd1602 的操作驱动源码
对lcd的操作主要是对io口的操作
msp430新入手的可以参考一下

最新回复

学习下  详情 回复 发表于 2012-5-29 18:32
 
点赞 关注

回复
举报

30

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

不会发附件直接上代码

//说明

//P4口作为数据口
//P55连rs
//P57连rw
//P57连re
#include

#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 uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long

#define P55 5
#define P56 6
#define P57 7

#define RS_CLR        P5OUT &= ~(1 << P55)        //RS置低
#define RS_SET        P5OUT |= (1 << P55)         //RS置高

#define RW_CLR        P5OUT &= ~(1 << P56)        //RW置低
#define RW_SET        P5OUT |= (1 << P56)         //RW置高

#define EN_CLR        P5OUT &= ~(1 << P57)        //E置低
#define EN_SET        P5OUT |= (1 << P57)         //E置高

#define DataPort      P4OUT                 //P4口为数据口


//*************************************************************************
//                    系统时钟初始化
//*************************************************************************
void Clock_Init()
{
  uchar i;
  BCSCTL1&=~XT2OFF;                 //打开XT振荡器
  BCSCTL2|=SELM1+SELS;              //MCLK为8MHZ,SMCLK为8MHZ
  do{
    IFG1&=~OFIFG;                   //清除震荡标志
    for(i=0;i<100;i++)
       _NOP();                      //延时等待
  }
  while((IFG1&OFIFG)!=0);           //如果标志为1,则继续循环等待
  IFG1&=~OFIFG;
}
//*************************************************************************
//              MSP430内部看门狗初始化
//*************************************************************************
void WDT_Init()
{
   WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
}

//*************************************************************************
//                        初始化IO口子程序
//*************************************************************************
void Port_init()
{

        P4SEL = 0x00;
        P4DIR = 0xFF;
        P5SEL = 0x00;
        P5DIR|= BIT5 + BIT6 + BIT7;     //控制口设置为输出模式
}



//***********************************************************************
//        显示屏命令写入函数
//***********************************************************************


void LCD_write_com(unsigned char com)
{       
        RS_CLR;
        RW_CLR;
        EN_SET;
        DataPort = com;                 //命令写入端口
        delay_ms(5);
        EN_CLR;
}
//***********************************************************************
//        显示屏数据写入函数
//***********************************************************************

void LCD_write_data(unsigned char data)
{
        RS_SET;
        RW_CLR;
        EN_SET;
        DataPort = data;                //数据写入端口
        delay_ms(5);
        EN_CLR;
}
//***********************************************************************
//        显示屏清空显示
//***********************************************************************

void LCD_clear(void)
{
        LCD_write_com(0x01);            //清屏幕显示
        delay_ms(5);
}
//***********************************************************************
//        显示屏字符串写入函数
//***********************************************************************

void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)
{
       
    if (y == 0)
    {
            LCD_write_com(0x80 + x);        //第一行显示
    }
    else
    {
            LCD_write_com(0xC0 + x);        //第二行显示
    }
   
    while (*s)
    {
            LCD_write_data( *s);
            s ++;
    }
}
//***********************************************************************
//        显示屏单字符写入函数
//***********************************************************************

void LCD_write_char(unsigned char x,unsigned char y,unsigned char data)
{
       
    if (y == 0)
    {
            LCD_write_com(0x80 + x);        //第一行显示
    }
    else
    {
            LCD_write_com(0xC0 + x);        //第二行显示
    }
   
    LCD_write_data( data);  
}
//***********************************************************************
//        显示屏初始化函数
//***********************************************************************

void LCD_init(void)
{
    LCD_write_com(0x38);                //显示模式设置  
    delay_ms(5);
    LCD_write_com(0x08);                //显示关闭
    delay_ms(5);
    LCD_write_com(0x01);                //显示清屏
    delay_ms(5);
    LCD_write_com(0x06);                //显示光标移动设置
    delay_ms(5);
    LCD_write_com(0x0C);                //显示开及光标设置
    delay_ms(5);
}
//***********************************************************************
//      主程序
//***********************************************************************
void main(void)
{
     uchar i,*p;
     WDT_Init();                         //看门狗设置
     Clock_Init();                       //系统时钟设置
     Port_init();                        //系统初始化,设置IO口属性
     delay_ms(100);                      //延时100ms
     LCD_init();                         //液晶参数初始化设置
     LCD_clear();                        //清屏
     while (1)
      {
                i = 1;
                p = "ilovemsp430";                //字符串输出显示
                LCD_clear();
                LCD_write_str(0,0,"Welcome");
                delay_ms(250);
               
                while (*p) {
                        LCD_write_char(i,1,*p);      //单个字符输出显示
                        i ++;
                        p ++;
                        delay_ms(250);               //延时250ms
                        }
                delay_ms(250);
      }
}
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

学习下

学习下
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表