你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32f103驱动T6963芯片的LCD屏幕问题

[复制链接]
tracymars 提问时间:2017-4-14 12:12 /
在操作屏幕的时候,在每次写command或者Data时候,都要去check状态,发现在调用自动写命令的时候,第一次状态的对的,后面的状态就错了,不知道什么原因,求指导
void LCD_IO_Config(void)
{
                GPIO_InitTypeDef GPIO_InitStruct;

                GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
                GPIO_InitStruct.GPIO_Pin = LCD_WR|LCD_RD|LCD_CE|LCD_RST|LCD_CD|LCD_HALT;     
                GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
       
                GPIO_Init(GPIOD, &GPIO_InitStruct);
         //data bus
        /* Configure PD.0, ~PD7 */
                GPIO_InitStruct.GPIO_Pin = 0x00ff;
                GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
                GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOD, &GPIO_InitStruct);
       
                GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
                GPIO_InitStruct.GPIO_Pin = LCD_BG;     
                GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
       
                GPIO_Init(GPIOE, &GPIO_InitStruct);
                SET_LCD_HALT;       
          SET_LCD_RST;
                delay_ms(200);
               
                CLR_LCD_RST;
                delay_ms(200);
                SET_LCD_RST;


}

/*
Êý¾ÝÒý½Å·½ÏòÇл»  
*/
void LCD_Data_Pin_Change(unsigned char u8dir)
{
                        GPIO_InitTypeDef GPIO_InitStruct;
                        GPIO_InitStruct.GPIO_Pin = 0x00ff;   
                        if(u8dir)
                        {                       
                                  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
                                        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
                        }
                        else
                        {
                                        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
                        }
                        GPIO_Init(GPIOD, &GPIO_InitStruct);
}


/*ÅжÏSTA0 and STA1 µÄ£¨Ö¸ÁîºÍÊý¾Ý¶Áд״̬£©*/
void CheckRWStatus(void)
{
                unsigned int  u16data;
                LCD_Data_Pin_Change(0);
                do{
                                CLR_LCD_CE;       
                                SET_LCD_CD;
                                SET_LCD_WR;               
                                CLR_LCD_RD;
                                u16data = GPIO_ReadInputData(GPIOD);
//                                USART_SendData(USART1,0X11);
//                                USART_SendData(USART1,(u8)u16data);  //debug
                                SET_LCD_RD;
                                SET_LCD_CE;
                }while((u16data&0x0003) != 0x0003);
          LCD_Data_Pin_Change(1);               
}

/*ÅжÏSTA3£¬×Ô¶¯Ð´µÄ״̬
·µ»ØÖµ£º1£º ready  0:busy
*/
void CheckAutoWriteStatus(void)
{
                unsigned int  u16data;
                LCD_Data_Pin_Change(0);   //set bus pin input sataus
                do{
                                        CLR_LCD_CE;       
                                        SET_LCD_CD;
                                        SET_LCD_WR;               
                                        CLR_LCD_RD;
                                        u16data = GPIO_ReadInputData(GPIOD);
                                        USART_SendData(USART1,0X22);
                                        USART_SendData(USART1,(u8)u16data);        //debug
                                        SET_LCD_RD;
                                        SET_LCD_CE;
                        }while((u16data&0x0008) != 0x0008);
                LCD_Data_Pin_Change(1);                 //set bus pin output sataus

}

void LCD_Write_Com(unsigned char u8cmd)
{
                uint16_t u16data;
                u16data = GPIOD->ODR;
                u16data &=0xFF00;
                u16data  |= u8cmd;
                SET_LCD_CD;
                CLR_LCD_CE;
                SET_LCD_RD;       
                CLR_LCD_WR;
                GPIOD->ODR  = u16data;
                SET_LCD_WR;               
                SET_LCD_CE;
               
}

void LCD_Write_Data(unsigned char u8dat)
{
                uint16_t u16data;
                       
                u16data = GPIOD->ODR;
                u16data &=0xFF00;
                u16data  |= u8dat;
       
                CLR_LCD_CD;
                CLR_LCD_CE;
                SET_LCD_RD;
                CLR_LCD_WR;
                GPIOD->ODR  = u16data;
                SET_LCD_WR;               
                SET_LCD_CE;
}


//ÎÞ²ÎÊýÖ¸ÁîдÈë
void LCD_WriteCommand(unsigned char u8cmd)
{
                CheckRWStatus();
                LCD_Write_Com(u8cmd);
}

//µ¥²ÎÊýдÈë
void LCD_WriteCommand1(unsigned char u8cmd, unsigned char u8data)
{
                CheckRWStatus();
                LCD_Write_Data(u8data);
       
                CheckRWStatus();
                LCD_Write_Com(u8cmd);
}

//Ë«²ÎÊýдÈë
void LCD_WriteCommand2(unsigned char u8cmd, unsigned char u8data1,unsigned char u8data2)
{
                CheckRWStatus();
                LCD_Write_Data(u8data1);
       
                CheckRWStatus();
                LCD_Write_Data(u8data2);
       
                CheckRWStatus();
                LCD_Write_Com(u8cmd);
}

void LCD_full_clr(unsigned char u8dat)
{
                unsigned int i;
                LCD_WriteCommand2(LCD_ADR_POS, 0x00, 0x00);
                LCD_WriteCommand(LCD_AUT_WR);      //×Ô¶¯Ð´
                for(i=0;i<128*20;i++)
                {
                                CheckAutoWriteStatus();
                                LCD_Write_Data(u8dat);        //
                }
    LCD_WriteCommand(LCD_AUT_OVR);      // ×Ô¶¯Ð´½áÊø
}

调用这个函数CheckAutoWriteStatus()的时候,发现就第一次的状态位是对的,后面全错了

收藏 3 评论3 发布时间:2017-4-14 12:12

举报

3个回答
无薪税绵 回答时间:2017-7-7 08:31:52
由于状态位作用不一样,因此执行不同指令必须检测不同的状态位。
感觉是楼主用的指令错了。
给个参考你看看:http://www.docin.com/p-1673347868.html

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

小小超 回答时间:2017-7-7 08:45:37
可能程序有点问题,时序上有偏差吧

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

wolfgang 回答时间:2017-7-7 13:26:02
低速端口配高速的数据通信?

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版