日志档案

发表于 2007-8-30 9:20:58

0

标签: 无标签

ST7920串行控制128*64液晶 msp430

//////////////////////////////////////////////////////////////////////////////////////////
/////ST7920串行控制128*64液晶
//QQ:178463135
//E-Mail:lyz803@163.com
//rst  p4.0   复位
//rs   p4.1   片选
//rw   p3.1    数据
//E    p3.3    时钟
//


#include <msp430x14x.h>

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

uchar busy,hang,lie,flash_flag;
void Delayus(ulong ilinshi)
{ ulong ii;
  for(ii=0;ii<=ilinshi;ii++);
}
void BUSYLOOP()
{
  Delayus(1000);
}
void Write_command(uchar x,uchar bb)
{
    uchar b,i=0;
    BUSYLOOP();
    b="x";
    P4OUT|=BIT1;  //cs=1;
    P3OUT|=BIT1;  //data=1;
    for(i=0;i<5;i++)   //5 个连续1 '11111'
    {
        P3OUT&=~BIT3;  //clk=0
        P3OUT|=BIT3; ;  //clk=1
    }       
    P3OUT&=~BIT3;  //clk=0
   
    P3OUT&=~BIT1;  //data=0;
    for(i=0;i<3;i++)  //RS,RW,0           Rs="Rw"=0   //写命令
    {
        P3OUT&=~BIT3;  //clk=0
        P3OUT|=BIT3; ;  //clk=1
    }       
    ////////////////////////////////////上面是发送一个完整的启动数据'11111000'
    for(i=0;i<4;i++)      //发送高4位
    {
       if((x&0x80)?1:0)   //1
         P3OUT|=BIT1;  //data=1;
       else
         P3OUT&=~BIT1;  //data=0;
       P3OUT&=~BIT3;  //clk=0
       P3OUT|=BIT3; ;  //clk=1
       x="x"<<1;
     }
     P3OUT&=~BIT1;  //data=0;
    for(i=0;i<4;i++)  //RS,RW,0    发送4个0;
    {
        P3OUT&=~BIT3;  //clk=0
        P3OUT|=BIT3; ;  //clk=1
    }       
//////////////////////////////////////////////   
    for(i=0;i<4;i++)      //发送低4位
    {
       if((b&0x08)?1:0)   //1
         P3OUT|=BIT1;  //data=1;
       else
         P3OUT&=~BIT1;  //data=0;
       P3OUT&=~BIT3;  //clk=0
       P3OUT|=BIT3; ;  //clk=1
       b="b"<<1;
     }
   
    P3OUT&=~BIT1;  //data=0;
    for(i=0;i<4;i++)  //RS,RW,0    发送4个0;
    {
       P3OUT&=~BIT3;  //clk=0
       P3OUT|=BIT3; ;  //clk=1
    }       
   
    P4OUT|=BIT1;  //cs=1;
    Delayus(100);
}

void Write_data(uchar x)
{
    uchar b,i=0;
    BUSYLOOP();
    b="x";
    P4OUT|=BIT1;  //cs=1;
    P3OUT|=BIT1;  //data=1;
    for(i=0;i<5;i++)   //5 个连续1 '11111'
    {
        P3OUT&=~BIT3;  //clk=0
        P3OUT|=BIT3; ;  //clk=1
    }       
   
    P3OUT&=~BIT3;  //clk=0    //RW=0
    P3OUT&=~BIT1;  //data=0;
    P3OUT|=BIT3;   //clk=1
   
    P3OUT&=~BIT3;  //clk=0    //RS=1
    P3OUT|=BIT1;  //data=0;
    P3OUT|=BIT3;   //clk=1
   
    P3OUT&=~BIT3;  //clk=0    //0
    P3OUT&=~BIT1;  //data=0;
    P3OUT|=BIT3;   //clk=1
////////////////////////////////////上面是发送一个完整的启动数据'11111010'
    for(i=0;i<4;i++)      //发送高4位
    {
       if((x&0x80)?1:0)   //1
         P3OUT|=BIT1;  //data=1;
       else
         P3OUT&=~BIT1;  //data=0;
       P3OUT&=~BIT3;  //clk=0
       P3OUT|=BIT3; ;  //clk=1
       x="x"<<1;
     }
     P3OUT&=~BIT1;  //data=0;
    for(i=0;i<4;i++)  //RS,RW,0    发送4个0;
    {
       P3OUT&=~BIT3;  //clk=0
       P3OUT|=BIT3; ;  //clk=1
    }       
//////////////////////////////////////////////   
    for(i=0;i<4;i++)      //发送低4位
    {
       if((b&0x08)?1:0)   //1
         P3OUT|=BIT1;  //data=1;
       else
         P3OUT&=~BIT1;  //data=0;
       P3OUT&=~BIT3;  //clk=0
       P3OUT|=BIT3; ;  //clk=1
       b="b"<<1;
     }
   
    P3OUT&=~BIT1;  //data=0;
    for(i=0;i<4;i++)  //RS,RW,0    发送4个0;
    {
       P3OUT&=~BIT3;  //clk=0
       P3OUT|=BIT3; ;  //clk=1
    }       
   
    P4OUT|=BIT1;  //cs=1;
    Delayus(100);
}

void CLEAR()
{
  Write_command(0x01,1);
  Write_command(0x34,1);
  Write_command(0x30,1);
}

void CHUSHIHUA()
{
P4OUT&=~BIT0;
Delayus(40000);
P4OUT|=BIT0;    //rst=1
Delayus(40000);
Write_command(0x30,0);
Delayus(6000);
Write_command(0x30,0);
Delayus(200);
Write_command(0x30,0);
Write_command(0x30,0);

//--------------
Write_command(0x0c,1);

//Write_command(0x0C,1);
Delayus(100);
Write_command(0x01,1);
Delayus(1000);
Write_command(0x06,1);
}

void IO_Init(void)   //初始化端口
{
  P4DIR|=0x03;           ///CS=1
  P4OUT|=0x03;
  P3DIR=0x0a;              //P3.1,3.3=OUT
  P3OUT|=0x0a;

}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
// P3SEL = 0x00f;                            // Setup P3 for SPI mode
  IO_Init();
  CHUSHIHUA();//初始化函数//
  CLEAR();
 
Write_command(0x80,1);  //4行

Write_data('T');  //TEL:13156015636
Write_data('E');
Write_data('L');
Write_data(':');
Write_data('1');
Write_data('3');
Write_data('1');
Write_data('5');
Write_data('6');
Write_data('0');
Write_data('1');
Write_data('5');
Write_data('6');
Write_data('3');
Write_data('6');
/*
 
  U0CTL = CHAR + SYNC + MM + SWRST;         // 8-bit, SPI, Master
  U0TCTL = CKPL + SSEL1 + STC;              // Polarity, SMCLK, 3-wire
  U0BR0 = 0x002;                            // SPICLK = SMCLK/2
  U0BR1 = 0x000;
  U0MCTL = 0x000;
  ME1 = USPIE0;                             // Module enable
  U0CTL &= ~SWRST;                          // SPI enable
  IE1 |= URXIE0;                            // Recieve interrupt enable
  _EINT();                                  // Enable interrupts
 
 
 
  */
 
  _BIS_SR(LPM0_bits + GIE);


}

系统分类: 单片机   |   用户分类: 无分类   |   来源: 转贴   |   【推荐给朋友】

    阅读(711)    回复(1)  

投一票您将和博主都有获奖机会!