【TI 技术资料分享】12864串口画图

2019-07-30 15:42发布

串口画图
  1. #include  <msp430x14x.h>
  2. #include <math.h>
  3. #include "pic.h"

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

  6. #define  LCD_SID_High   P5OUT|=BIT4   // LCD_RW  DB0_DB7   P64
  7. #define  LCD_SID_Low    P5OUT&=~BIT4   // LCD_RW IR DR

  8. #define  LCD_CLK_High   P5OUT|=BIT3   // LCD_EN P63
  9. #define  LCD_CLK_Low    P5OUT&=~BIT3   // LCD_EN  

  10. #define  LCD_PSB_High   P5OUT|=BIT0  //  
  11. #define  LCD_PSB_Low    P5OUT&=~BIT0  //     P30
  12. #define uchar unsigned char
  13. #define uint  unsigned int
  14. uchar line[64][16]={0},Point[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};


  15. void delay_ms(unsigned int timer)
  16. {
  17.   unsigned int i;
  18.     for(i=0;i<1000;i--)
  19.        for(;timer>0;timer--)
  20.          ;
  21. }

  22. void Send_Byte(unsigned byte)
  23. {
  24.   uchar i;
  25.   for(i=0;i<8;i++)
  26.   {
  27.      LCD_CLK_Low;
  28.      if(byte&0x80)
  29.      {LCD_SID_High; delay_ms(10);}
  30.      
  31.      else
  32.      { LCD_SID_Low ;delay_ms(10);}
  33.      byte<<=1;
  34.      LCD_CLK_High;               
  35.      delay_ms(10);
  36.      LCD_CLK_Low;
  37.      delay_ms(10);
  38.    }
  39. }

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

  44.      Send_Byte(0xf8);            //11111,RW(0),RS(0),0;
  45.      delay_ms(2);
  46.      Send_Byte(0xf0&cmd);      
  47.      delay_ms(2);
  48.      Send_Byte(0xf0&cmd<<4);   
  49.      delay_ms(2);
  50. }
  51. /*鍐欐暟鎹埌娑叉櫠*/
  52. void LCD_WDAT(unsigned char date)
  53. {                          
  54.      delay_ms(1);
  55.    
  56.      Send_Byte(0xfa);            //11111,RW(0),RS(1),0
  57.      delay_ms(2);
  58.      Send_Byte(0xf0&date);     
  59.      delay_ms(2);
  60.      Send_Byte(0xf0&date<<4);   
  61.      delay_ms(2);
  62. }



  63. void Display(unsigned char X,unsigned char Y,unsigned char *string)
  64. {

  65.    if (X==0)
  66.      {X=0x80;}
  67.    else if (X==1)
  68.      {X=0x90;}
  69.    else if (X==2)
  70.      {X=0x88;}
  71.    else if (X==3)
  72.      {X=0x98;}

  73.      LCD_WCMD(X+Y);
  74.    
  75.    while(*string )
  76.     {                         //鏄
  77.       LCD_WDAT(*string++);
  78.     }

  79. }
  80. void Display_number(unsigned char X,unsigned char Y,unsigned char number)
  81. {
  82.     if (X==0)
  83.      {X=0x80;}
  84.    else if (X==1)
  85.      {X=0x90;}
  86.    else if (X==2)
  87.      {X=0x88;}
  88.    else if (X==3)
  89.      {X=0x98;}

  90.      LCD_WCMD(X+Y);
  91.      LCD_WDAT(48+number);
  92. }

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

  107. void LCD_init()
  108. {
  109.    LCD_WCMD(0x34);      //鎵嶄綔
  110.    delay_ms(2);
  111.    LCD_WCMD(0x30);      //嶄綔
  112.    delay_ms(2);
  113.    LCD_WCMD(0x0C);      //鏄叧鍏夋爣
  114.    delay_ms(2);
  115.    LCD_WCMD(0x01);      //
  116.    delay_ms(2);
  117.       
  118. }

  119. /*------------------------------------------------
  120.                       娓呭睆
  121. ------------------------------------------------*/
  122. void ClrScreen()
  123. {
  124.    LCD_WCMD(0x01);
  125.    delay_ms(15);
  126. }
  127. /*------------------------------------------------
  128.                  璁剧疆鍒扮粯鍥炬ā寮?
  129. ------------------------------------------------*/
  130. void SetGraphicMode()
  131. {
  132.    LCD_WCMD(0x36);       //閫夋嫨紡
  133.    delay_ms(20);

  134. }
  135. /*------------------------------------------------
  136.                    鏄剧ず鍥剧墖
  137. ------------------------------------------------*/
  138. void LCD_PutGraphic(unsigned char  *img)
  139. {
  140.    int i,j;

  141.    for(i=0;i<32;i++)            
  142.     {
  143.       LCD_WCMD(0x80 + i); //
  144.       LCD_WCMD(0x80);     //
  145.       for(j=0;j<16;j++)
  146.        {
  147.          LCD_WDAT(*img);
  148.          img++;
  149.        }
  150.     }

  151.         for(i=0;i<32;i++)            
  152.     {
  153.             LCD_WCMD(0x80 + i);
  154.             LCD_WCMD(0x88);     
  155.             for(j=0;j<16;j++)
  156.        {
  157.                        LCD_WDAT(*img);
  158.                        img++;
  159.        }
  160.     }  
  161.            
  162. }
  163. void DrawPoint(uchar x,uchar y)
  164. {
  165.     line[x][y/8]|=Point[y%8];
  166.     //delay_ms(100);
  167. }

  168. void  main( void )
  169. {
  170.   uchar u;
  171.   //unsigned char x,y,colour=1 ;
  172.   WDTCTL = WDTPW + WDTHOLD;     // Stop watchdog timer to prevent time out reset
  173.   //Clock_init();                 //

  174.   P5DIR|=BIT0+BIT2+BIT3+BIT4;
  175.   LCD_PSB_Low;               
  176.   LCD_init();
  177.   for(u=0;u<64;u++)
  178.   DrawPoint(u,u);
  179.   for(u=32;u<63;u++)
  180.   DrawPoint(32,u);
  181.   for(u=32;u<63;u++)
  182.   DrawPoint(32,u+32);
  183.   for(u=63;u>0;u--)
  184.   DrawPoint(63-u,u+63);
  185.   ClrScreen();                                                  //清屏
  186.   SetGraphicMode();                                            //设置成绘图模式
  187.   LCD_PutGraphic(&line[0][0]);
  188.   delay_ms(5000);
  189.   _BIS_SR(LPM0_bits);
  190. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。