社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 201|回复: 0

[资料分享] MSP430F5529驱动LCD102x64液晶程序及电路图

[复制链接]

2436

TA的帖子

19

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-2-18 11:43:37 | 显示全部楼层 |阅读模式
MSP430F5529开发板上的102x64LCD采用的是SPI通信模式,即一种全双工串行通信模式







参考程序:


#include "msp430F5529.h"
void delay(int ms)
{
  int i;
  while(ms--)
    for(i=0;i<999;i++);
}
///////////////////////////////
//        写数据函数         //
///////////////////////////////
void writedata(unsigned char dat)
{
  char i,temp;
  P5OUT |=BIT7;     //结束置位
  P5OUT |=BIT6;    //数据输入模式
  P4OUT &=~BIT3;   //sclk=0
  P7OUT &=~BIT4;    //片选选中
  P3OUT |=0x80;
  for(i=0;i<8;i++)
  {     
     temp =dat<<i;
     if((temp & 0x80)==0x80)
            P4OUT |=BIT1;
     else
            P4OUT &=~BIT1;
    __delay_cycles(3);
    P4OUT |=BIT3;     //sclk=1上升沿
     __delay_cycles(3);
    P4OUT &=~BIT3;    //下降沿
  }
  P7OUT |=BIT4;  //释放片选
}
///////////////////////////////
//        写指令函数         //
///////////////////////////////
void writecomd(unsigned char comd)
{
  char i,temp;
  P5OUT |=BIT7;     //结束置位
  P5OUT &=~BIT6;    //指令输入模式并置位
  P4OUT &=~BIT3;  
  P7OUT &=~BIT4;    //片选选中
  P3OUT |=0x80;
  for(i=0;i<8;i++)
  {     
     temp =comd<<i;
     if((temp & 0x80)==0x80)
            P4OUT |=BIT1;
     else
            P4OUT &=~BIT1;
    __delay_cycles(3);
    P4OUT |=BIT3;
     __delay_cycles(3);
    P4OUT &=~BIT3;  
  }
  P7OUT |=BIT4;  //释放片选
}
/////////////////////////
//       液晶显示      //
/////////////////////////
void LCD_XYSet(unsigned char x,unsigned char y)
{
     LCD_SPISend(0,0xB0|y);           //y的值为0~8
     LCD_SPISend(0,0x10|(x>>4));
     LCD_SPISend(0,0x00|(x&0x0F));
}
//////////////////////////
// 显示   y<8,x<127     //
//////////////////////////
void LCDdisplay(unsigned char x,unsigned char y)
{
   writecomd(0xB0|y);
   writecomd(0x10|(x>>4));
   writecomd(0x0F);

}
/////////////////////////
//    LCD初始化        //
/////////////////////////
void LCDinit(void)
{

   P7DIR |=BIT4+BIT6;             //P7.6为LCD背光灯和LCD_EN使能,1亮 0灭,P7.4为LED_CS片选
   P7OUT |=BIT6;              //点亮背光
   P5DIR |=BIT6+BIT7;         //P5.6为SPI之命令数据切换,P5.7为SPI之LCD_RST液晶复位
   P4DIR |=BIT1+BIT3;        //P4.1为SIMO从设备输入主设备信号端,P4.3为SCK
   UCSCTL3 |=SELREF__REFOCLK;
   P5OUT &=~(BIT6+BIT7);    //LCD reset  指令输入
   writecomd(0xAF);         //开显示
   writecomd(0x8c);         //设置扫描方向。
}
///////////////////////
//  主时钟设置       //
///////////////////////
void MCLKtimer(void)
{

   __bis_SR_register(SCG0);     //disable the FLL control loop
   UCSCTL0=0X0000;//            //Set lowest possible DCOx,MODxSCG0
   UCSCTL1=DCORSEL_7;           //Select DCO range 24MHz opreation
                               //DCORSEL_x,其中x可选3、4、5、6、7
   UCSCTL3=FLLD_0+731;          //Set DCO Multiplier for 24MHz
                                //(N+1)*FLLRef=Fdco
                                //(731+1)*32768=24MHz
                               //Set FLL DIV =fDCOCLK/2
   /*__bis_SR_register(SCG0);                 //Enable the FLL control loopSCG0
   UCSCTL4 |=SELA__DCOCLK+SELS__XT1CLK+SELM__DCOCLK;//MCLK Source select
   UCSCTL5 |=DIVPA_2;                       //ACLK output divide
   UCSCTL6 |=XT1DRIVE_3+XCAP_0;             //XT1 cap */
}
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  MCLKtimer();
  P1DIR |=BIT3;
  P4DIR |=BIT7;
  P5OUT &=~BIT7;
  LCDinit();
  LCDdisplay(3,100);
  while(1)
  {

     writedata(0x2F);
     writedata(0x07);
     writedata(0x18);
     writedata(0x2F);
  }
}

此帖出自MSP430论坛

回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-10-23 06:40 , Processed in 0.185254 second(s), 19 queries , Redis On.

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