3452|8

29

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求助关于MSP430FG4619与LCD显示问题 [复制链接]

我用的是MSP430FG4619,连接的LCD是NHD‐C12832A1Z‐NSW‐BBW‐3V3
用SPI,我查了有3pin和4pin模式, 我的这个连接用了SCL, STE, SIMO,SOMI没有连,不知道是3pin还是4pin
初始化还是有困难,请大家帮帮忙
以下是LCD datasheet上提供的sample code

void data_out(unsigned char i) //Data Output Serial Interface
{
unsigned int n;
CS = 0;
A0 = 1;
for(n=0; n<8; n++){
i <<=1;
SCL = 0;
P1 = i;
delay(2);
SCL = 1;
}
CS = 1;
}
void comm_out(unsigned char j) //Command Output Serial Interface
{
unsigned int n;
CS = 0;
A0 = 0;
for(n=0; n<8; n++){
j <<=1;
SCL = 0;
P1 = j;
delay(2);
SCL = 1;
}
CS = 1;
}
/****************************************************
* Initialization For controller *
*****************************************************/
void init_LCD()
{
comm_out(0xA0);
comm_out(0xAE);
comm_out(0xC0);
comm_out(0xA2);
comm_out(0x2F);
comm_out(0x26);
comm_out(0x81);
comm_out(0x2F);
}
/*****************************************************/

最新回复

spi程序没发一个字节都要检查busy的标志位  详情 回复 发表于 2012-3-24 14:52
 
点赞 关注

回复
举报

65

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
啥问题,啥现象都不说,咋帮忙?
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 modernthink 的帖子

void spi_IO( unsigned char data[], int bytes )
{
    int n=0;
    // Set Chip Select low, so LCD panel knows we are talking to it.
    CS_L;
    while(n < bytes)
    {      
        UCA0TXBUF = data[n];   // load byte into transmit buffer
         n++;
       //_BIS_SR(LPM0_bits + GIE);   // sleep until done   
    }
   
    // Set Chip Select back high to finish the communication.
   CS_H;
}

以上是我用来给lcd发命令的,比如说我有8bytes要通过TXBUF发给lcd,我停止debugging的时候能看到TXBUF里面是最后一个byte
这是不是说明前面的都发送成功了呢?
还有,数据放到TXBUF里面是不是就直接发送了还是需要其他命令来让它发送?
谢谢
 
 
 

回复

5015

帖子

13

TA的资源

裸片初长成(初级)

4
 
原帖由 chenc_44 于 2012-3-22 06:38 发表 void spi_IO( unsigned char data[], int bytes ) { int n=0; // Set Chip Select low, so LCD panel knows we are talking to it. CS_L; while(n < bytes) { UCA0TXBU ...
放到TXBUF中会自动发送,但是有没有发送完需要检查发送BUSY位,BUSY结束后就发送完了

 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 wstt 的帖子

也就是说如果busy是0的话就是发送完毕了?
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 4楼 wstt 的帖子

再请问一下,TXBUF是不是传输数据直接就走SIMO那个pin了啊?SIMO那个pin要怎么设置呢?
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

7
 

求助啊
 
 
 

回复

188

帖子

0

TA的资源

纯净的硅(中级)

8
 

回复 板凳 chenc_44 的帖子

spi程序没发一个字节都要检查busy的标志位
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 8楼 peter_zheng 的帖子

我觉得我的程序应该没问题啊,都能运行,一步一步debug也没发现有什么问题,能帮我看看吗?万分感谢!
#include
#include "pic.h"
/* For USI, these are the required pin assignments:

  * P7.0 CS -- Chip Select .
  * P7.1 SDO  -- serial data out (MOSI for master)
  * P7.3 SCL -- serial clock
  * P7.4 A0 -- Command/Data .
  * p7.5 RESET  
*/

#define LCD_D P7SEL |= 0x01         // Chip Select line
#define LCD_E P7SEL &=~0x01
#define Data_out P7OUT |= 0x10         // Command/Data mode line
#define Com_out P7OUT &=~0x10
#define RST_E P7OUT |=0x20
#define RST_C P7OUT &=~0x20
unsigned char data[]; int bytes;
void init_LCD(void);
void dispPic();
void main( void )
{
  volatile unsigned int i;
    // Stop the watchdog timer so it doesn't reset our chip
  WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer
  FLL_CTL0 |= XCAP14PF;                     // Configure load caps
                                            // DCO to stabilize.
   __delay_cycles( 1000 );
  P7SEL |= 0x0B;                            // P7.1,3 option select
  P7SEL &=~0x30;
  P7DIR |=0x30;                             // P7.0,4,5
  P7OUT |=0x30;
  
  UCA0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB+UCMODE_2;    //4-pin, 8-bit SPI master
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 2;                           // /2
  UCA0BR1 = 0;                              //
  UCA0MCTL = 0;                             // No modulation
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0TXIE;                          // Enable USCI_A0 TX interrupt


    // Pause so everything has time to start up properly.
    __delay_cycles( 5500 );

    // Initialize the LCD panel.
    init_LCD();
   
    while(1)
    {                                                //loop forever
        dispPic(logo);                                        //show image
         __delay_cycles(1000);                                        //wait 1s
        dispPic(graphic1);
         __delay_cycles(1000);
        dispPic(graphic2);       
         __delay_cycles(1000);
         
}//_BIS_SR(LPM0_bits + GIE);                 // CPU off, enable interrupts
}

void spi_IO( unsigned char data[], int bytes )
{
    int n=0;
    // Set Chip Select low, so LCD panel knows we are talking to it.
    LCD_E;
    while(n < bytes)
    {      
        UCA0TXBUF = data[n];   // load byte into transmit buffer
        __delay_cycles( 100 );
         n++;
    }
    //IE2 &= ~UCA0TXIE;  
    // Set Chip Select back high to finish the communication.
   LCD_D;
}

/****************************************************
* Initialization For controller *
*****************************************************/
void init_LCD()
{
  RST_E;
  __delay_cycles( 50 );
  RST_C;
  __delay_cycles( 50 );
  RST_E;
  __delay_cycles( 50 );
  unsigned char init_data[]=
  {
    0xA0,0xAE,0xC0,0xA2,0x2F,0x26,0x81,0x2F
  };
    Com_out;       // set for commands
    spi_IO( init_data, sizeof(init_data));
    Data_out;
}
void dispPic(unsigned char *lcd_string)
{
        unsigned int i,j;
        unsigned char page = 0xB0;                        //Page Address + 0xB0
        LCD_E;
        Com_out;
        UCA0TXBUF=0xAE;                                        //Display OFF
        UCA0TXBUF=0x40;                                        //Display start address + 0x40
        for(i=0;i<4;i++)
        {                        //32pixel display / 8 pixels per page = 4 pages
                  Com_out;

                UCA0TXBUF=page;                                //send page address
                UCA0TXBUF=0x10;                                //column address upper 4 bits + 0x10
                UCA0TXBUF=0x00;                                //column address lower 4 bits + 0x00
                Data_out;
                for(j=0;j<128;j++)
                {                        //128 columns wide
                        UCA0TXBUF=*lcd_string;                //send picture data
                        lcd_string++;                        //point to next picture data
                        __delay_cycles( 50 );
                }
                page++;                                        //after 128 columns, go to next page
           }
        Com_out;
        UCA0TXBUF=0xAF;                                        //Display ON
        Data_out;
        LCD_D;
}
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表