发 帖  
[问答] 为什么这个基于MSP430F5529的LCD12864显示程序没反应呢?
2018-7-12 11:05:37  345 MSPF5529
收藏 0 收藏 推荐 0 推荐
分享
本帖最后由 Gramymonk 于 2018-7-12 14:35 编辑

#include "msp430.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 uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
/*12864应用指令*/
#define CLEAR_SCREEN        0x01                    //清屏指令:清屏且AC值为00H
#define AC_INIT                0x02                    //将AC设置为00H。且游标移到原点位置
#define CURSE_ADD        0x06                    //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#define FUN_MODE        0x30                    //工作模式:8位基本指令集
#define DISPLAY_ON        0x0c                    //显示开,显示游标,且游标位置反白
#define DISPLAY_OFF        0x08                    //显示关
#define CURSE_DIR        0x14                    //游标向右移动:AC=AC+1
#define SET_CG_AC        0x40                    //设置AC,范围为:00H~3FH
#define SET_DD_AC        0x80
#define RS_CLR        P2OUT &= ~BIT7       //RS置低
#define RS_SET        P2OUT |= BIT7         //RS置高
#define RW_CLR        P2OUT &= ~BIT6       //RW置低
#define RW_SET        P2OUT |= BIT6         //RW置高
#define EN_CLR        P2OUT &= ~BIT5        //E置低
#define EN_SET        P2OUT |= BIT5         //E置高
#define PSB_CLR                P1OUT &= ~BIT5            //PSB置低,串口方式
#define PSB_SET                P1OUT |=  BIT5            //PSB置高,并口方式
#define DataPort      P3OUT              //P3口为数据口
//*************************************************************************
//                    系统时钟初始化
//*************************************************************************
void Clock_Init()
{
  UCSCTL1 = DCORSEL_2;                             //  设置DCO范围
  UCSCTL3 |= SELREF_2;                             //  选择FLL参考源自REFO
  UCSCTL4 = SELM_3 + SELA_2 + SELS_4;              //  配置 MCLK = DCOC,SMCLK =DCODIV,ACLK=REFO
  while (SFRIFG1 & OFIFG)                          //  清除 OFIFG,and  XT1OFFG ,DCOFFG
    {
      UCSCTL7 &= ~(  XT1LFOFFG + DCOFFG);
      SFRIFG1 &= ~OFIFG;
    }
}
//*************************************************************************
//              MSP430内部看门狗初始化
//*************************************************************************
void WDT_Init()
{
   WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
}
//*************************************************************************
//                        初始化IO口子程序
//*************************************************************************
void Port_init()
{
        P3SEL = 0x00;
        P3DIR = 0xFF;
        P2SEL = 0x00;
        P2DIR|= BIT5 + BIT6 + BIT7;
        PSB_SET;
}
//***********************************************************************
//        显示屏命令写入函数
//***********************************************************************
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);
}
//***********************************************************************
//函数名称:DisplayCgrom(uchar hz)显示CGROM里的汉字
//***********************************************************************
void DisplayCgrom(uchar addr,uchar *hz)
{
        LCD_write_com(addr);
        delay_ms(5);
        while(*hz != '\0')
        {
                LCD_write_data(*hz);
                hz++;
                delay_ms(5);
        }
}
//****************************************************************
//函数名称:Display()显示测试结果
//****************************************************************
void Display(void)
{
        DisplayCgrom(0x80,"测试程序");
        DisplayCgrom(0x88,"helloworld");
        DisplayCgrom(0x90,"helloworld");
        DisplayCgrom(0x98,"12344667");
}
//***********************************************************************
//        显示屏初始化函数
//***********************************************************************
void LCD_init(void)
{
        LCD_write_com(FUN_MODE);                        //显示模式设置
        delay_ms(5);
        LCD_write_com(FUN_MODE);                        //显示模式设置
        delay_ms(5);
        LCD_write_com(DISPLAY_ON);                        //显示开
        delay_ms(5);
        LCD_write_com(CLEAR_SCREEN);                        //清屏
        delay_ms(5);
}
//***********************************************************************
//      主程序
//***********************************************************************
void main(void)
{
        WDT_Init();                                   //看门狗设置
        Clock_Init();                                 //系统时钟设置
        Port_init();                                  //系统初始化,设置IO口属性
        delay_ms(100);                                //延时100ms
        LCD_init();                                   //液晶参数初始化设置
        LCD_clear();                                  //清屏
        while(1)
        {
        Display();                                    //显示汉字
        }
}


P3.0~P3.7为普通输出I/O口,P2.5,P2.6,P2.7为控制口,P1.5为PSB,RST悬空
第一次接后LCD正常,在几次重新接线后就没反应了
2018-7-12 11:05:37   评论
本帖最后由 Gramymonk 于 2018-7-12 14:37 编辑

求教!!!!
2018-7-12 14:29:09 评论

举报

高级模式
您需要登录后才可以回帖 登录 | 注册

发表新帖
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表