
在操作屏幕的时候,在每次写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()的时候,发现就第一次的状态位是对的,后面全错了 |
感觉是楼主用的指令错了。
给个参考你看看:http://www.docin.com/p-1673347868.html
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分