×
嵌入式 > 技术百科 > 详情

MSP430 12864显示

发布时间:2020-06-19 发布时间:
|

/******************************************************************** 

//DM430开发板控制带字库型12864液晶模块显示测试程序 

//显示模式为汉字模式,直接将12864插入12864接口即可 

//注意选择液晶的电源,位于电位器附近,可选5V或3.3V,根据液晶电压进行选择 

//调试环境:EW430 V5.30 

// 

 

********************************************************************/  

#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  

  

/*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 P10 0  

#define P11 1  

#define P12 2  

#define P13 3  

#define P14 4  

#define P15 5  

#define P16 6  

#define P17 7  

  

#define RS_CLR  P3OUT &= ~(1 << P13)        //RS置低  

#define RS_SET  P3OUT |= (1 << P13)         //RS置高  

  

#define RW_CLR  P3OUT &= ~(1 << P16)        //RW置低  

#define RW_SET  P3OUT |= (1 << P16)         //RW置高  

  

#define EN_CLR  P3OUT &= ~(1 << P17)        //E置低  

#define EN_SET  P3OUT |= (1 << P17)         //E置高  

  

#define PSB_CLR P5OUT &= ~(1 << P11)        //PSB置低,串口方式  

#define PSB_SET P5OUT |= (1 << P11)         //PSB置高,并口方式  

  

#define RST_CLR P5OUT &= ~(1 << P12)        //RST置低  

#define RST_SET P5OUT |= (1 << P12)         //RST置高  

  

#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;  

          

        P3SEL = 0x00;  

        P3DIR|= BIT3 + BIT6 + BIT7;  

        P5SEL = 0x00;  

        P5DIR|= BIT1 + BIT2;  

        PSB_SET;          //液晶并口方式  

        RST_SET;          //复位脚RST置高  

}  

  

//***********************************************************************  

//  显示屏命令写入函数  

//***********************************************************************  

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," QQ: 617889341 ");  

    DisplayCgrom(0x90," TodayStart2016  ");  

//  DisplayCgrom(0x98,"电话18782911298");  

  

}  

  

//***********************************************************************  

//  显示屏初始化函数  

//***********************************************************************  

  

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)  

    {  

          LCD_write_com(0x98);  

          LCD_write_data('2');  

          LCD_write_data('2');  

          Display();                                    //显示汉字  

    }  

}  

 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
洪荒之力+无比专注=国内首款机器人离线编程软件