新手上路
- 积分
- 23
- 金钱
- 23
- 注册时间
- 2018-1-23
- 在线时间
- 4 小时
|
问题:液晶屏清屏可以显示不同的颜色,但是不显示字符,执行画点函数也不画点?
硬件配置:MCU 是STM32F103VE,7寸屏是正点原子的7寸TFT V2屏 液晶驱动是SSD1963 SSD1963 RS引脚接MCU 的FSMC_A16 CS引脚接FSMC_NE1
代码用的是正点原子的 触摸屏实验代码,如下
//typedef struct
//{
// vu16 LCD_REG;
// vu16 LCD_RAM;
//} LCD_TypeDef;
//#define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))
//#define LCD ((LCD_TypeDef *) LCD_BASE)
#define LCD_WR_REG(add) ((*(volatile u16 *)((uint32_t)0x60000000)) = ((u16)add))
#define LCD_WR_DATA(val) ((*(volatile u16 *) ((uint32_t)0x60020000)) = ((u16)(val)))
因为用的是FSMC_NE1 FSMC_A16 所以地址改为上面重新定义的地址
下面是LCD_Init 初始化函数
LCD_WR_REG(0xE2); //Set PLL with OSC = 10MHz (hardware), Multiplier N = 35, 250MHz < VCO < 800MHz = OSC*(N+1), VCO = 300MHz
LCD_WR_DATA(0x1D); //2Îêy1
LCD_WR_DATA(0x02); //2Îêy2 Divider M = 2, PLL = 300/(M+1) = 100MHz
LCD_WR_DATA(0x04); //2Îêy3 Validate M and N values
delay_us(100);
LCD_WR_REG(0xE0); // Start PLL command
LCD_WR_DATA(0x01); // enable PLL
delay_ms(10);
LCD_WR_REG(0xE0); // Start PLL command again
LCD_WR_DATA(0x03); // now, use PLL output as system clock
delay_ms(12);
LCD_WR_REG(0x01); //èí¸′λ
delay_ms(10);
LCD_WR_REG(0xE6); //éèÖÃÏñËØÆμÂê,33Mhz
LCD_WR_DATA(0x2F);
LCD_WR_DATA(0xFF);
LCD_WR_DATA(0xFF);
LCD_WR_REG(0xB0); //éèÖÃLCDÄ£ê½
LCD_WR_DATA(0x20); //24λÄ£ê½
LCD_WR_DATA(0x00); //TFT Ä£ê½
LCD_WR_DATA((SSD_HOR_RESOLUTION-1)>>8);//éèÖÃLCDˮƽÏñËØ
LCD_WR_DATA(SSD_HOR_RESOLUTION-1);
LCD_WR_DATA((SSD_VER_RESOLUTION-1)>>8);//éèÖÃLCD′1Ö±ÏñËØ
LCD_WR_DATA(SSD_VER_RESOLUTION-1);
LCD_WR_DATA(0x00); //RGBDòáD
LCD_WR_REG(0xB4); //Set horizontal period
LCD_WR_DATA((SSD_HT-1)>>8);
LCD_WR_DATA(SSD_HT-1);
LCD_WR_DATA(SSD_HPS>>8);
LCD_WR_DATA(SSD_HPS);
LCD_WR_DATA(SSD_HOR_PULSE_WIDTH-1);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0xB6); //Set vertical period
LCD_WR_DATA((SSD_VT-1)>>8);
LCD_WR_DATA(SSD_VT-1);
LCD_WR_DATA(SSD_VPS>>8);
LCD_WR_DATA(SSD_VPS);
LCD_WR_DATA(SSD_VER_FRONT_PORCH-1);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0xF0); //éèÖÃSSD1963óëCPU½ó¿úÎa16bit
LCD_WR_DATA(0x03); //16-bit(565 format) data for 16bpp
LCD_WR_REG(0x29); //¿aÆôÏÔê¾
//éèÖà WMêä3ö ±31aí¨1yÕ¼¿Õ±è¿éμ÷
LCD_WR_REG(0xD0); //éèÖÃ×Ô¶ˉ°×ƽoaDBC
LCD_WR_DATA(0x00); //disable
LCD_WR_REG(0xBE); //ÅäÖÃ WMêä3ö
LCD_WR_DATA(0x05); //1éèÖà WMÆμÂê
LCD_WR_DATA(0xFE); //2éèÖà WMÕ¼¿Õ±è
LCD_WR_DATA(0x01); //3éèÖÃC
LCD_WR_DATA(0x00); //4éèÖÃD
LCD_WR_DATA(0x00); //5éèÖÃE
LCD_WR_DATA(0x00); //6éèÖÃF
LCD_WR_REG(0xB8); //éèÖÃGPIOÅäÖÃ
LCD_WR_DATA(0x03); //2¸öIO¿úéèÖÃ3éêä3ö
LCD_WR_DATA(0x01); //GPIOê1óÃÕy3£μÄIO1|Äü
LCD_WR_REG(0xBA);
LCD_WR_DATA(0X01); //GPIO[1:0]=01,¿ØÖÆLCD·½Ïò
LCD_SSD_BackLightSet(100);//±31aéèÖÃÎa×îáá
}
LCD_Display_Dir(0); //ĬèÏÎaêúÆá
LCD_LED=1; //μãáá±31a
LCD_Clear(WHITE);
这里的LCD_Clear 函数可以显示不同的颜色
//画点函数
void LCD_DrawPoint(u16 x,u16 y)
{
LCD_SetCursor(x,y); //设置光标函数
LCD_WriteRAM_Prepare(); //写入GRAM
LCD_WR_DATA(POINT_COLOR);//写入颜色 //LCD->LCD_RAM=POINT_COLOR;
}
//设置光标函数
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{
if(lcddev.id==0X1963)
{
if(lcddev.dir==0)//x×ø±êDèòa±ä»»
{
Xpos=lcddev.width-1-Xpos;
LCD_WR_REG(lcddev.setxcmd);
LCD_WR_DATA(0);LCD_WR_DATA(0);
LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);
}else
{
LCD_WR_REG(lcddev.setxcmd);
LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);
LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF);
}
LCD_WR_REG(lcddev.setycmd);
LCD_WR_DATA(Ypos>>8);LCD_WR_DATA(Ypos&0XFF);
LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF);
}
}
//开始写入GRAM
void LCD_WriteRAM_Prepare(void)
{
LCD_WR_REG(lcddev.wramcmd);//LCD->LCD_REG=lcddev.wramcmd;
}
代码如上,不知道为什么画点就不可以,请大神们指导下,谢谢了。
[img]file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\756566259\QQ\WinTemp\RichOle\PB)2H$YGW[UB79R$C5[DB56.png[/img]
[img]file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\756566259\QQ\WinTemp\RichOle\PB)2H$YGW[UB79R$C5[DB56.png[/img]
|
|