打印

【TI 技术资料分享】msp430+12864串口显示

[复制链接]
630|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
胡斯哲|  楼主 | 2015-3-14 17:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 胡斯哲 于 2015-3-14 17:48 编辑

窜口可以节省i/o口 时钟不要太快
#include  <msp430x14x.h>
#include <math.h>
//#include "pic.h"

#define  LCD_CS_High   P5OUT|=BIT2   // LCD_RS      P62
#define  LCD_CS_Low    P5OUT&=~BIT2   // LCD_RS

#define  LCD_SID_High   P5OUT|=BIT1   // LCD_RW  DB0_DB7   P64
#define  LCD_SID_Low    P5OUT&=~BIT1   // LCD_RW IR DR

#define  LCD_CLK_High   P5OUT|=BIT0   // LCD_EN P63
#define  LCD_CLK_Low    P5OUT&=~BIT0   // LCD_EN  

#define LCD_PSB_High   P5OUT|=BIT3;  //  
#define LCD_PSB_Low    P5OUT&=~BIT3;  //     P30

//P67 鎮┖
#define uchar unsigned char
#define uint  unsigned int


void delay_ms(unsigned int timer)
{
  unsigned int i;
    for(i=0;i<1000;i--)
       for(;timer>0;timer--)
         ;
}

void Send_Byte(unsigned byte)
{
  uchar i;
  for(i=0;i<8;i++)
  {
     LCD_CLK_Low;
     if(byte&0x80)
     {LCD_SID_High; delay_ms(10);}
     
     else
     { LCD_SID_Low ;delay_ms(10);}
     byte<<=1;
     LCD_CLK_High;               
     delay_ms(10);
     LCD_CLK_Low;
     delay_ms(10);
   }
}

/*鍐欏懡浠ゅ埌娑叉櫠*/
void LCD_WCMD(unsigned char cmd)
{                          
     delay_ms(1);

     Send_Byte(0xf8);            //11111,RW(0),RS(0),0;
     delay_ms(2);
     Send_Byte(0xf0&cmd);      
     delay_ms(2);
     Send_Byte(0xf0&cmd<<4);   
     delay_ms(2);
}
/*鍐欐暟鎹埌娑叉櫠*/
void LCD_WDAT(unsigned char date)
{                          
     delay_ms(1);
   
     Send_Byte(0xfa);            //11111,RW(0),RS(1),0
     delay_ms(2);
     Send_Byte(0xf0&date);     
     delay_ms(2);
     Send_Byte(0xf0&date<<4);   
     delay_ms(2);
}

uchar re_byte(void)
{
    uchar re=0,i;
    P6DIR = 0x00;
    for(i=0;i<8;i++)
     {
       LCD_CLK_Low;
       delay_ms(10);
       if(P6IN&0x10)
      {
        re = re| 0x01;
        delay_ms(2);
        re <<= 1;
      }
        else
        {
                re = re| 0x00;
                delay_ms(2);
                re <<= 1;
        }
       LCD_CLK_High;                //上升沿触发发送
       delay_ms(10);
       LCD_CLK_Low;delay_ms(2);
     }
    return re;
}
unsigned char ReadByte(void)
{
    unsigned char byReturnValue,a ;
    delay_ms(1);
    Send_Byte(0xfe);            //11111,RW(1),RS(1),0
    delay_ms(1);
    byReturnValue=re_byte() ;
    delay_ms(1);
    a=re_byte()>>4;
    byReturnValue = byReturnValue|a;
    return byReturnValue ;
}

/*鏄剧ず鐨勫瓧绗︿覆*/
void Display(unsigned char X,unsigned char Y,unsigned char *string)
{

   if (X==0)
     {X=0x80;}
   else if (X==1)
     {X=0x90;}
   else if (X==2)
     {X=0x88;}
   else if (X==3)
     {X=0x98;}

     LCD_WCMD(X+Y);
   
   while(*string )
    {                         //鏄
      LCD_WDAT(*string++);
    }

}
void Display_number(unsigned char X,unsigned char Y,unsigned char number)
{
    if (X==0)
     {X=0x80;}
   else if (X==1)
     {X=0x90;}
   else if (X==2)
     {X=0x88;}
   else if (X==3)
     {X=0x98;}

     LCD_WCMD(X+Y);
     LCD_WDAT(48+number);
}

void Clock_init()
{
   unsigned char t;
   BCSCTL1 = RSEL0 + RSEL1 + RSEL2;         // XT2on, max RSEL
   BCSCTL1&=~XT2OFF;                        //鎵撳紑XT2鎸崱鍣?
   do
   {
      IFG1 &= ~OFIFG;                       // 娓呴櫎鎸崱鍣ㄥけ鏁堟爣蹇?
      for (t = 255; t > 0; t--);            // 寤舵椂锛岀瓑寰匵T2璧锋尟
   }
   while ((IFG1 & OFIFG) != 0);             // 鍒ゆ柇XT2鏄惁璧锋尟
   
   BCSCTL2 |= SELS+SELM_2;                  // SMCLK = XT2
}

void LCD_init()
{
   LCD_WCMD(0x34);      //鎵嶄綔
   delay_ms(2);
   LCD_WCMD(0x30);      //嶄綔
   delay_ms(2);
   LCD_WCMD(0x0C);      //鏄叧鍏夋爣
   delay_ms(2);
   LCD_WCMD(0x01);      //
   delay_ms(2);
      
}

/*------------------------------------------------
                      娓呭睆
------------------------------------------------*/
void ClrScreen()
{
   LCD_WCMD(0x01);
   delay_ms(15);
}
/*------------------------------------------------
                 璁剧疆鍒扮粯鍥炬ā寮?
------------------------------------------------*/
void SetGraphicMode()
{
   LCD_WCMD(0x36);       //閫夋嫨紡
   delay_ms(20);

}
/*------------------------------------------------
                   鏄剧ず鍥剧墖
------------------------------------------------*/
void LCD_PutGraphic(unsigned char  *img)
{
   int i,j;

   for(i=0;i<32;i++)            
    {
      LCD_WCMD(0x80 + i); //
      LCD_WCMD(0x80);     //
      for(j=0;j<16;j++)
       {
         LCD_WDAT(*img);
         img++;
       }
    }

        for(i=0;i<32;i++)            
    {
            LCD_WCMD(0x80 + i);
            LCD_WCMD(0x88);     
            for(j=0;j<16;j++)
       {
                       LCD_WDAT(*img);
                       img++;
       }
    }  
           
}
/*-------------------------------------------------------------------
                                澧炲姞鐢荤偣瀛愮▼搴?
-------------------------------------------------------------------*/
void DrawPoint(unsigned char X,unsigned char Y,unsigned char Color)
{
    unsigned char Row,Tier,Tier_bit ;
    unsigned char ReadOldH,ReadOldL ;
    LCD_WCMD(0x34);
    LCD_WCMD(0x36);
    Tier=X>>4 ;
    Tier_bit=X&0x0f ;
    if(Y<32)
    {
        Row=Y ;
    }
    else
    {
        Row=Y-32 ;
        Tier+=8 ;
    }
    LCD_WCMD(Row+0x80);
    LCD_WCMD(Tier+0x80);
    ReadByte();
    ReadOldH=ReadByte();
    ReadOldL=ReadByte();
    LCD_WCMD(Row+0x80);
    LCD_WCMD(Tier+0x80);
    if(Tier_bit<8)
    {
        switch(Color)
        {
            case 0 :
            ReadOldH&=(~(0x01<<(7-Tier_bit)));
            break ;
            case 1 :
            ReadOldH|=(0x01<<(7-Tier_bit));
            break ;
            case 2 :
            ReadOldH^=(0x01<<(7-Tier_bit));
            break ;
            default :
            break ;
        }
        LCD_WDAT(ReadOldH);
        LCD_WDAT(ReadOldL);
    }
    else
    {
        switch(Color)
        {
            case 0 :
            ReadOldL&=(~(0x01<<(15-Tier_bit)));
            break ;
            case 1 :
            ReadOldL|=(0x01<<(15-Tier_bit));
            break ;
            case 2 :
            ReadOldL^=(0x01<<(15-Tier_bit));
            break ;
            default :
            break ;
        }
        LCD_WDAT(ReadOldH);
        LCD_WDAT(ReadOldL);
    }
    LCD_WCMD(0x30);
}

//----------------------------------------------
//                        娓呮暣涓狦DRAM绌洪棿
//-----------------------------------------------
void clrgdram()
{
    unsigned char x,y ;
    for(y=0;y<64;y++)
    for(x=0;x<16;x++)
    {
        LCD_WCMD(0x34);
        LCD_WCMD(y+0x80);
        //琛屽湴鍧€
        LCD_WCMD(x+0x80);
        //鍒楀湴鍧€
        LCD_WCMD(0x30);
        LCD_WDAT(0x00);
        LCD_WDAT(0x00);
    }
}
void  main( void )
{
//char i;
//unsigned char x1,y1,colour=1 ;
  WDTCTL = WDTPW + WDTHOLD;     // Stop watchdog timer to prevent time out reset
  Clock_init();                 //

  P5DIR=BIT0+BIT1+BIT2+BIT3;
  LCD_PSB_Low;               
  LCD_init();
/*-----------------------------------------------------------------------------
                              鏄剧ず瀛楃
-----------------------------------------------------------------------------*/
  Display(0,0,"胡斯哲");
  Display(1,0,"武汉交通职业学院");
  Display(2,1,"你好");
  Display(3,2,"2013-7月-11日");      
  

  delay_ms(5000);
  _BIS_SR(LPM0_bits);

}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

141

主题

1431

帖子

6

粉丝