⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 LCD的测试程序
💻 C
字号:
/*****************************************************************************\
文件名:main.c
描述:MSP430框架程序。适用于MSP430F149,其他型号需要适当改变。
      不使用的中断函数保留或者删除都可以,但保留时应确保不要打开不需要的中断。
      保留中断函数,编译器将会为BSL密码填充所有的字节。
版本:1.0	2005-1-13
\*****************************************************************************/

//头文件
#include <MSP430x14x.h>

//函数声明
void InitSys();
void Delay(unsigned int times);
void sendBYTE(unsigned char dat);
void sendDAT(unsigned char dat);
void sendCMD(unsigned char  dat);
void initlcm(void);
void display_app(unsigned char address, unsigned char *string);

int main( void )
{

  WDTCTL = WDTPW + WDTHOLD;             	//关闭看门狗

  InitSys();					//初始化


  //以下填充用户代码
        P3DIR=0xff;
        P4DIR|=BIT1;
        P4SEL=0x00;
        P4OUT=0x00;
        P3SEL=0x00;
        P3OUT=0x00;
        P4OUT|=BIT1;
        initlcm();
        display_app(0x90, "中国");

	LPM3;			//进入低功耗模式n,n:0~4。若不希望进入低功耗模式,屏蔽本句
	

}


/*****************************************************************************
系统初始化
******************************************************************************/
void InitSys()
{
   unsigned int iq0;

	//使用XT2振荡器
   BCSCTL1&=~XT2OFF;     					//打开XT2振荡器
   do
   {
 		IFG1 &= ~OFIFG;					// 清除振荡器失效标志
 		for (iq0 = 0xFF; iq0 > 0; iq0--);		// 延时,等待XT2起振
    }
 	while ((IFG1 & OFIFG) != 0);				// 判断XT2是否起振

 	BCSCTL2 =SELM_2+SELS;					//选择MCLK、SMCLK为XT2

	//以下填充用户代码,对各种模块、中断、外围设备等进行初始化

   //_EINT();	//打开全局中断控制,若不需要打开,可以屏蔽本句
}

void Delay(unsigned int times)                   //延时程序
{
     unsigned int num;                             //定义num为寄存器变量

    while (times--)
    {
        for (num = 0x1024; num > 0; num--);		   
    }
}

void sendBYTE(unsigned char dat)			  //送显示器一个字节
{
    unsigned char i;

    for (i = 0; i < 8; i++)
    {
        P3OUT &= ~BIT7;
        if ((dat &0x80) != 0)
            P3OUT |= BIT6;               //将1送到液晶显示屏
        else
           P3OUT &= ~BIT6;              //将0送到液晶显示屏
        
        P3OUT |= BIT7;                  
        dat = dat << 1;
    }
}

void sendDAT(unsigned char dat)
{
    unsigned char temp;
    P3OUT |= BIT5;            //开选通
    sendBYTE(0xfa);     //传送标志11111010  RS=1,R\W=0  表示写数据
    temp = dat &0xf0;
    sendBYTE(temp);
    temp = (dat << 4) &0xf0; 
    sendBYTE(temp);
    P3OUT &= ~BIT5;
}

void sendCMD(unsigned char  dat)    	   //传送指令
{
    unsigned char temp;
    P3OUT |= BIT5; 
    sendBYTE(0xf8);          //传送开始标志11111000	一开始就应该传送5个1并在后面传RW RS最后一位为0
    temp = dat &0xf0;        //先传高四位
    sendBYTE(temp);
    temp = (dat << 4) &0xf0; //在传底四位
    sendBYTE(temp);
    P3OUT &= ~BIT5;
}

void initlcm(void)		   //显示器的初始化
{
	Delay(16);
	sendCMD(0x30);         //传指令00110000设定DDRAM的地址  	//传指令00110000选择数据线位数和基本指令集 changed by Hansel 2008 1 8
	Delay(16);
	sendCMD(0x04);         //传指令00000100设定点:显示字符/光标从左到右移位,地址加1
	sendCMD(0x0f);         //传指令00001100设显示开关 整体显示开,游标不显示,游标位置反白关
	sendCMD(0x01);         //传指令00000001清除DDRAM 设定DDRAM的位置为起始位置   changed by Hansel 2008 1 8
	Delay(16);
	sendCMD(0x02);         //传指令00000010游标移到头位置
	Delay(16);
}

void display_app(unsigned char address, unsigned char *string)       //显示字符串,第一传送的是地址,第二个行参是要显示的字符串
{
       sendCMD(address);
       Delay(16);
	while ((unsigned char)*string != '\0')
	{
	    sendDAT(*string++);
	    sendDAT(*string++);
	    
	    //Delay(16);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -