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

📄 12864ymy.c

📁 12864液晶模块的MSP430F149的源代码
💻 C
字号:
#include <msp430x14x.h>
#define   LCD12864DIR      P1DIR
#define   LCD12864OUT      P1OUT
#define   LCD12864IN       P1IN

#define   LCD12864_CS      BIT0
#define   LCD12864_SID     BIT2
#define   LCD12864_SCLK     BIT4

#define   LCD12864_CS_LOW    LCD12864OUT &= ~LCD12864_CS
#define   LCD12864_CS_HIGH   LCD12864OUT |= LCD12864_CS
#define   LCD12864_SCLK_LOW   LCD12864OUT &= ~LCD12864_SCLK
#define   LCD12864_SCLK_HIGH  LCD12864OUT |= LCD12864_SCLK
#define   LCD12864_SID_LOW   LCD12864OUT &= ~LCD12864_SID
#define   LCD12864_SID_HIGH  LCD12864OUT |= LCD12864_SID

#define   LCD12864_SID_READ    (12864IN & 12864_SID)

#define uchar unsigned char
#define uint unsigned int 
//====================================================================
//函数声明
void Delay(uint ms);      //延时子程序
//void Write_cmd(cmd);   //写指令子程序
//void Write_data(uchar _data); //写数据子程序
//void Position(uchar pos);  //定位函数
//void Display(uchar address); //
//void Init_12864();
//void LcdSetXY(uchar x, uchar y, uchar *pt);
void W_1byte(uchar RW, uchar RS, uchar W_data);
void Write_8bits(uint W_bits);
void LCD_Init(void);
//====================================================================
//常量字符数组
uchar mynew1[]={"7920_3wires_demo"};
uchar mynew2[]={"Create by:朱江"};
uchar mynew3[]={"E_mail:ntzhf100@"};
uchar mynew4[]={"163.com"};
/********************************************************************

********************************************************************/
void main(void)
{
    unsigned int itemp;
    WDTCTL = WDTPW + WDTHOLD;              //停止系统软件看门狗
    P5DIR |= BIT4;                                         //P54为输出
    P5SEL |= BIT4;                                         //P54第二功能:MCLK输出
    BCSCTL1 &= ~XT2OFF;                                       //XT2 = HF-XTAL
    do {
        IFG1 &= ~OFIFG;                                           //清除OSCFault标志位
        for (itemp=0xFF;itemp>0;itemp--);                                         //延时等待晶振
    } while ((IFG1 & OFIFG));                                    //OSCFault标志位始终有效?

  BCSCTL2 |= SELM_2   ;//+DIVM_3;                                       //MCLK = XT2

    uchar i = 0;
    LCD12864DIR = 0XFF;
    LCD12864_CS_LOW;    //CS = 0;
    LCD12864_SCLK_LOW;   //SCLK = 0;
    LCD12864_SID_LOW;   //SID = 0;
    LCD_Init();
    while(1)
    { 
       _NOP();//nop;
       _NOP();//nop;
       W_1byte(0,0,0x80);
       _NOP();//nop;
       for(i=0;mynew1[i]!='\0';i++)
       {
          W_1byte(0,1,mynew1[i]);
       }
       W_1byte(0,0,0x90);
       for(i=0;mynew2[i]!='\0';i++)
       {
          W_1byte(0,1,mynew2[i]); 
       }
       W_1byte(0,0,0x88);
       for(i=0;mynew3[i]!='\0';i++)
       {
          W_1byte(0,1,mynew3[i]);
       }
       W_1byte(0,0,0x98);
       for(i=0;mynew4[i]!='\0';i++)
       {
          W_1byte(0,1,mynew4[i]);
       }
       _NOP();//nop; 
    }
}


/******************************************************************/
void LCD_Init(void)
{
  uchar cmd;
  cmd=0x30;   //功能设置 8位数据,基本指令
  W_1byte(0,0,cmd);
  Delay(16);
  cmd=0x0C;   //显示状态 ON,游标OFF,反白OFF
  W_1byte(0,0,cmd); //写指令
  Delay(16);
  cmd=0x01;   //清除显示
  W_1byte(0,0,cmd); //写指令
  Delay(16);
  cmd=0x02;   //地址归位
  W_1byte(0,0,cmd); //写指令
  Delay(16);
  cmd=0x80;   //设置DDRAM地址
  W_1byte(0,0,cmd); //写指令
  Delay(16);   //延时
}
/*******************************************************************
函 数 名:W_1byte
入口参数:RW、RS、W_data
出口参数:无
建立日期:2007年3月3日
修改日期:
函数作用:写一个字节的数据到12864液晶,包括指令和数据
说    明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
   (一般RW都设为0,即只向液晶写数据,不读数据)
          RS=1,写入的是数据;RS=0,写入的是指令;
    一般模式:RW=0,RS=1;写数据
       RW=0,RS=0;写指令
********************************************************************/
void W_1byte(uchar RW, uchar RS, uchar W_data)
{
 uint H_data,L_data,S_ID = 0xf8;  //11111RWRS0
 if(RW == 0)
 {
   S_ID &= ~0x04;
 }
 else     //if(RW==1)
 {
   S_ID |= 0X04;
 }
 if(RS == 0)
 {
   S_ID &= ~0x02;
 }
 else     //if(RS==1)
 {
   S_ID |= 0X02;
 }
 H_data = W_data;
 H_data &= 0xf0;   //屏蔽低4位的数据
 L_data = W_data;     //xxxx0000格式
 L_data &= 0x0f;   //屏蔽高4位的数据
 L_data <<= 4;   //xxxx0000格式
 LCD12864_CS_HIGH;    //CS = 1;
 Write_8bits(S_ID);   //发送S_ID
 Write_8bits(H_data); //发送H_data
 Write_8bits(L_data); //发送L_data
 LCD12864_CS_LOW;     //CS = 0; 
}
/********************************************************************
函 数 名:Write_8bits
入口参数:W_bits
出口参数:无
建立日期:2007年3月3日
修改日期:
函数作用:负责串行输出8个bit位
说    明:
********************************************************************/
void Write_8bits(uint W_bits)
{
 uint i,Temp_data;
 for(i=0; i<8; i++)
 {
  Temp_data = W_bits;
  Temp_data <<= i;
  if((Temp_data&0x80)==0)  //bit7 is zero
  {
   LCD12864_SID_LOW;    //SID = 0;
   _NOP();    //nop;
   LCD12864_SCLK_HIGH;    //SCLK = 1;
   _NOP();    //nop;
   _NOP();    //nop;
   LCD12864_SCLK_LOW;   //SCLK = 0;
   _NOP();    //nop;
   LCD12864_SID_LOW;    //SID = 0;
  }
  else         //bit7 is one
  {
    LCD12864_SID_HIGH;    //SID = 1;
   _NOP();    //nop;
   LCD12864_SCLK_HIGH;    //SCLK = 1;
   _NOP();    //nop;
   _NOP();    //nop;
   LCD12864_SCLK_LOW;   //SCLK = 0;
   _NOP();    //nop;
   LCD12864_SID_LOW;    //SID = 0;
  } 
 }
}
/********************************************************************
函 数 名:Delay
入口参数:ms
出口参数:无
建立日期:2007年3月3日
修改日期:
函数作用:毫秒级的延时程序,当晶振为12Mhz时,xtal=12;
说    明:
********************************************************************/
void Delay(uint ms) 
{ 
    uint i; 
    while(ms--)    
   { 
     for(i=1;i<(uint)(8*143-2);i++) 
         ; 
   }   
}
//===================================================================*/

⌨️ 快捷键说明

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