無唁苡對
获得 19 次赞
帮助过8人
lcd一直白屏,贴出代码,帮忙看看。,谢谢main.c源代码#include "stm8s.h"#include "lcd.h"static void CLK_Config(void);static void UART_Config(void);void delay_ms(u16 i);/* Private functions ---------------------------------------------------------*/void delay_ms(u16 i){ u8 mn; while(i--) { for(m=0;m<39;m++) for(n=0;n<100;n++); }}/** * @brief Main program. * @param None * @retval None */void main(void){ CLK_Config(); GPIO_Config(); // UART_Config(); LCD_Init(); LCD_Clear(black); LCD_SetWindows(00100150); //设置显示窗体 LCD_Clear(red); LCD_SetWindows(00240320); //设置显示窗体 while (1) { LCD_Text(1010"kuibu"); delay_ms(10000); }}lcd.h代码:#define LCD_CS GPIO_PIN_1#define LCD_RS GPIO_PIN_2#define LCD_WR GPIO_PIN_3#define LCD_E GPIO_PIN_4#define LCD_RST GPIO_PIN_5#define Set_Cs GPIO_WriteHigh(LCD_CS_PORTLCD_CS)#define Clr_Cs GPIO_WriteLow(LCD_CS_PORTLCD_CS)#define Set_Rs GPIO_WriteHigh(LCD_RS_PORTLCD_RS)#define Clr_Rs GPIO_WriteLow(LCD_RS_PORTLCD_RS)#define Set_nWr GPIO_WriteHigh(LCD_WR_PORTLCD_WR)#define Clr_nWr GPIO_WriteLow(LCD_WR_PORTLCD_WR)#define Set_E GPIO_WriteHigh(LCD_E_PORTLCD_E)#define Clr_E GPIO_WriteLow(LCD_E_PORTLCD_E) #define Set_RST GPIO_WriteHigh(LCD_RST_PORTLCD_RST)#define Clr_RST GPIO_WriteLow(LCD_RST_PORTLCD_RST) #define Set_nRd GPIO_WriteHigh(LCD_RST_PORTLCD_RST)#define Clr_nRd GPIO_WriteLow(LCD_RST_PORTLCD_RST) void LCD_Init(void);void LCD_WriteIndex(u16 index);void LCD_WriteData(u16 data);void LCD_WriteReg(u16 LCD_Regu16 LCD_RegValue);void LCD_SetCursor( u16 Xpos u16 Ypos );void LCD_Clear(u16 Color);void GPIO_Config(void);void LCD_Text(u16 x u16 y u8 *str);void LCD_SetWindows(u16 StartXu16 StartYu16 EndXu16 EndY);void delay_ms(u16 i);#endiflcd.c源代码#include "lcd.h"#include "stm8s.h"#define ILI9320 0 /* 0x9320 */#define ILI9325 1 /* 0x9325 */#define ILI9328 2 /* 0x9328 */#define ILI9331 3 /* 0x9331 */#define SSD1298 4 /* 0x8999 */#define SSD1289 5 /* 0x8989 */#define ST7781 6 /* 0x7783 */#define LGDP4531 7 /* 0x4531 */#define SPFD5408B 8 /* 0x5408 */#define R61505U 9 /* 0x1505 0x0505 */ #define HX8347D 10 /* 0x0047 */#define HX8347A 11 /* 0x0047 */ #define LGDP4535 12 /* 0x4535 */ #define SSD2119 13 /* 3.5 LCD 0x9919 */void LCD_Init(void);void LCD_WriteIndex(u16 index);void LCD_WriteData(u16 data);void LCD_WriteReg(u16 LCD_Regu16 LCD_RegValue);void LCD_SetCursor( u16 Xpos u16 Ypos );void LCD_Clear(u16 Color);void GPIO_Config(void);void LCD_Text(u16 x u16 y u8 *str);void LCD_SetWindows(u16 StartXu16 StartYu16 EndXu16 EndY);/* 写命令函数 */void LCD_WriteIndex(u16 index){ u8 index1index2; index1=(u8)index; index2=(u8)(index>>8); Clr_Rs; //RS=0 Set_nRd; //RD=0 delay_ms(1); //延时 GPIO_Write(LCD_DATA1_PORTindex2); GPIO_Write(LCD_DATA2_PORTindex1); /*写命令 */ delay_ms(1); //延时 Clr_nWr; //WR=0 Set_nWr; //WR=1 }/* 写数据函数 */void LCD_WriteData(u16 data){ u8 data1data2; data1=(u8)data; data2=(u8)(data>>8); Set_Rs; //RS=1 Set_nRd; //RD=0 delay_ms(1); //延时 GPIO_Write(LCD_DATA1_PORTdata1); GPIO_Write(LCD_DATA2_PORTdata2); /*写数据*/ delay_ms(1); //延时 Clr_nWr; //WR=0 Set_nWr; //WR=1}/*指定的地址写入数据, LCD_Reg 是地址, LCD_RegValue 是写入的值*/void LCD_WriteReg(u16 LCD_Regu16 LCD_RegValue){ Clr_Cs; LCD_WriteIndex(LCD_Reg); //写指令;即要写入数据的地址; LCD_WriteData(LCD_RegValue); //数据写入; Set_Cs;}//初始化LCD12864void LCD_Init(void){ GPIO_Config(); Clr_RST; /* LCD 复位*/ delay_ms(100); Set_RST; GPIO_WriteHigh(GPIOCGPIO_PIN_6); /*使能背光 */ LCD_WriteReg(0x00e70x0010); LCD_WriteReg(0x00000x0001); /* start internal osc */ LCD_WriteReg(0x0001(0<<10)|(1<<8)); LCD_WriteReg(0x00020x0700); /* power on sequence */ #if (DISP_ORIENTATION == 0) LCD_WriteReg(0x0003(1<<12)|(1<<5)|(1<<4)|(0<<3)); #elif (DISP_ORIENTATION == 90) LCD_WriteReg(0x0003(1<<12)|(0<<5)|(1<<4)|(1<<3)); #elif (DISP_ORIENTATION == 180) LCD_WriteReg(0x0003(1<<12)|(0<<5)|(0<<4)|(0<<3)); #elif (DISP_ORIENTATION == 270) LCD_WriteReg(0x0003(1<<12)|(1<<5)|(0<<4)|(1<<3)); #endif LCD_WriteReg(0x00040x0000); LCD_WriteReg(0x00080x0207); LCD_WriteReg(0x00090x0000); LCD_WriteReg(0x000a0x0000); /* display setting */ LCD_WriteReg(0x000c0x0001); /* display setting */ LCD_WriteReg(0x000d0x0000); LCD_WriteReg(0x000f0x0000); /* Power On sequence */ LCD_WriteReg(0x00100x0000); LCD_WriteReg(0x00110x0007); LCD_WriteReg(0x00120x0000); LCD_WriteReg(0x00130x0000); delay_ms(50); /* delay 50 ms */ LCD_WriteReg(0x00100x1590); LCD_WriteReg(0x00110x0227); delay_ms(50); /* delay 50 ms */ LCD_WriteReg(0x00120x009c); delay_ms(50); /* delay 50 ms */ LCD_WriteReg(0x00130x1900); LCD_WriteReg(0x00290x0023); LCD_WriteReg(0x002b0x000e); delay_ms(50); /* delay 50 ms */ delay_ms(50); /* delay 50 ms */ LCD_WriteReg(0x00300x0007); LCD_WriteReg(0x00310x0707); LCD_WriteReg(0x00320x0006); LCD_WriteReg(0x00350x0704); LCD_WriteReg(0x00360x1f04); LCD_WriteReg(0x00370x0004); LCD_WriteReg(0x00380x0000); LCD_WriteReg(0x00390x0706); LCD_WriteReg(0x003c0x0701); LCD_WriteReg(0x003d0x000f); delay_ms(50); /* delay 50 ms */ LCD_WriteReg(0x00500x0000); LCD_WriteReg(0x00510x00ef); LCD_WriteReg(0x00520x0000); LCD_WriteReg(0x00530x013f); LCD_WriteReg(0x00600xa700); LCD_WriteReg(0x00610x0001); LCD_WriteReg(0x006a0x0000); LCD_WriteReg(0x00800x0000); LCD_WriteReg(0x00810x0000); LCD_WriteReg(0x00820x0000); LCD_WriteReg(0x00830x0000); LCD_WriteReg(0x00840x0000); LCD_WriteReg(0x00850x0000); LCD_WriteReg(0x00900x0010); LCD_WriteReg(0x00920x0600); LCD_WriteReg(0x00930x0003); LCD_WriteReg(0x00950x0110); LCD_WriteReg(0x00970x0000); LCD_WriteReg(0x00980x0000); /* display on sequence */ LCD_WriteReg(0x00070x0133); delay_ms(10); LCD_WriteReg(0x00200x0000); LCD_WriteReg(0x00210x0000);}//设置显示窗口的位置 X/Yvoid LCD_SetCursor( u16 Xpos u16 Ypos){ LCD_WriteReg(0x0020 Xpos); LCD_WriteReg(0x0021 Ypos); }//设置窗口区域void LCD_SetWindows(u16 StartXu16 StartYu16 EndXu16 EndY){ LCD_SetCursor(StartXStartY); LCD_WriteReg(0x0050 StartX); LCD_WriteReg(0x0052 StartY); LCD_WriteReg(0x0051 EndX); LCD_WriteReg(0x0053 EndY);}//清屏函数,作用是让整个屏显示某一种颜色void LCD_Clear(u16 Color){ u32 index=0; LCD_SetCursor(00); Clr_Cs; LCD_WriteIndex(0x0022); for( index = 0; index < MAX_X * MAX_Y; index++ ) { LCD_WriteData(Color); } Set_Cs;}//在指定座标画点void LCD_SetPoint(uint16_t Xposuint16_t Yposuint16_t point){ if( Xpos >= MAX_X || Ypos >= MAX_Y ) { return; } LCD_SetCursor(XposYpos); LCD_WriteReg(0x0022point);}//在指定座标显示字符串void LCD_Text(u16 x u16 y u8 *str){ u8 i; i=0; while(*str) { i++; LCD_SetPoint((x+8*i)y*str++); }}//IO口设置void GPIO_Config(void){ GPIO_Init(GPIOBGPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4| GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOGGPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4| GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOCGPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4| GPIO_PIN_5|GPIO_PIN_6GPIO_MODE_OUT_PP_LOW_FAST);}