-
4.0寸86盒显示屏调试(三)
2020-07-07 21:33:52读取了个把星期也没读取出正确的ID号,最终放弃了读取,考虑是不是液晶屏根本没有输出功能。在使用SPI驱动以后,也没有显示白屏或者任何可以让人...SPI相关头文件定义: /* DCX ~ PD4 */ //--SDO /* SDA ~ PD5 */...读取了个把星期也没读取出正确的ID号,最终放弃了读取,考虑是不是液晶屏根本没有输出功能。在使用SPI驱动以后,也没有显示白屏或者任何可以让人感觉驱动正确的现象。最终也放弃了在SPI上搞出个现象。转而使用RGB协议直驱,但还是没有结果,最后还是使用SPI初始化后,再使用RGB驱动一次,发现有一次闪屏。于是乎有以下结论:SPI驱动时序没有错,屏不能读取数据。
SPI的驱动函数段:
SPI相关头文件定义:
/* DCX ~ PD4 */ //--SDO
/* SDA ~ PD5 */
/* SCL ~ PD6 */
/* CSB ~ PD7 */
/* RESET ~ PD8 */
#define Lcd_DCX_Out(x) {x? GPIO_SetBits(GPIOD, GPIO_Pin_4):GPIO_ResetBits(GPIOD, GPIO_Pin_4);} //DCX数据命令线#define Lcd_SDA_Out(x) {x? GPIO_SetBits(GPIOD, GPIO_Pin_5):GPIO_ResetBits(GPIOD, GPIO_Pin_5);} //SPI数据线
#define Lcd_SCL_Out(x) {x? GPIO_SetBits(GPIOD, GPIO_Pin_6):GPIO_ResetBits(GPIOD, GPIO_Pin_6);} //SPI时钟线
#define Lcd_CSB_Out(x) {x? GPIO_SetBits(GPIOD, GPIO_Pin_7):GPIO_ResetBits(GPIOD, GPIO_Pin_7);} //片选信号
#define Lcd_RST_Out(x) {x? GPIO_SetBits(GPIOD, GPIO_Pin_8):GPIO_ResetBits(GPIOD, GPIO_Pin_8);} //复位信号
#define Lcd_SDA_Read() GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_5)
SPI源文件定义:
//SPI_IO口初始化
void Lcd_Spi_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
/* DCX ~ PD4 */
/* SDA ~ PD5 */
/* SCL ~ PD6 */
/* CSB ~ PD7 */
/* RESET ~ PD8 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
Lcd_DCX_Out(1);
Lcd_CSB_Out(1);
Lcd_SCL_Out(1);
Lcd_SDA_Out(1);
Lcd_RST_Out(1);
}/****************************************************************/
void Lcd_Spi_Senddata(uint8_t dat)
{
uint8_t i;
for(i=0; i<8; i++)
{
Lcd_SCL_Out(0);
if(dat&0x80)
{
Lcd_SDA_Out(1);
}
else
{
Lcd_SDA_Out(0);
}
Lcd_SCL_Out(1);
dat <<= 1;
}
}
void Lcd_Spi_Writecmd(uint8_t cmd)
{
Lcd_CSB_Out(0);
Lcd_DCX_Out(0);
Lcd_Spi_Senddata(cmd);
Lcd_CSB_Out(1);
}/***************************************************************/
void Lcd_Spi_Writedata(uint8_t data)
{
Lcd_CSB_Out(0);
Lcd_DCX_Out(1);
Lcd_Spi_Senddata(data);
Lcd_CSB_Out(1);
}/**********************LCD***************************/
void Lcd_Spi_Init(void)
{
Lcd_Reset();//***************************************************************//LCD SETING
Lcd_Spi_Writecmd(0x11);
delay_ms(120);
//PAGE0 1
Lcd_Spi_Writecmd(0xFF);
Lcd_Spi_Writedata(0x77);
Lcd_Spi_Writedata(0x01);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x10);Lcd_Spi_Writecmd(0xC0);//Display Line Setting
Lcd_Spi_Writedata(0x3B);
Lcd_Spi_Writedata(0x00);Lcd_Spi_Writecmd(0xC1);//Porch Control
Lcd_Spi_Writedata(0x0D);
Lcd_Spi_Writedata(0x02);Lcd_Spi_Writecmd(0xC2);// Inversion set
Lcd_Spi_Writedata(0x37);//31 2-DOT 37-Column
Lcd_Spi_Writedata(0x05);Lcd_Spi_Writecmd(0xC3); //SET RGB MODE
Lcd_Spi_Writedata(0x02); //00-DE MODE ,80-HV MODE PCLK N
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);Lcd_Spi_Writecmd(0xB0);
Lcd_Spi_Writedata(0x00); //Positive Voltage Gamma Control
Lcd_Spi_Writedata(0x11);
Lcd_Spi_Writedata(0x18);
Lcd_Spi_Writedata(0x0E);
Lcd_Spi_Writedata(0x11);
Lcd_Spi_Writedata(0x06);
Lcd_Spi_Writedata(0x07);
Lcd_Spi_Writedata(0x08);
Lcd_Spi_Writedata(0x07);
Lcd_Spi_Writedata(0x22);
Lcd_Spi_Writedata(0x04);
Lcd_Spi_Writedata(0x12);
Lcd_Spi_Writedata(0x0F);
Lcd_Spi_Writedata(0xAA);
Lcd_Spi_Writedata(0x31);
Lcd_Spi_Writedata(0x18);
Lcd_Spi_Writecmd(0xB1);
Lcd_Spi_Writedata(0x00); //Negative Voltage Gamma Control
Lcd_Spi_Writedata(0x11);
Lcd_Spi_Writedata(0x19);
Lcd_Spi_Writedata(0x0E);
Lcd_Spi_Writedata(0x12);
Lcd_Spi_Writedata(0x07);
Lcd_Spi_Writedata(0x08);
Lcd_Spi_Writedata(0x08);
Lcd_Spi_Writedata(0x08);
Lcd_Spi_Writedata(0x22);
Lcd_Spi_Writedata(0x04);
Lcd_Spi_Writedata(0x11);
Lcd_Spi_Writedata(0x11);
Lcd_Spi_Writedata(0xA9);
Lcd_Spi_Writedata(0x32);
Lcd_Spi_Writedata(0x18);//*******power set********//
//PAGE2
Lcd_Spi_Writecmd(0xFF);
Lcd_Spi_Writedata(0x77);
Lcd_Spi_Writedata(0x01);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x11);Lcd_Spi_Writecmd(0xB0);//Vop Amplitude setting
Lcd_Spi_Writedata(0x60); //Vop=4.7375vLcd_Spi_Writecmd(0xB1); //VCOM amplitude setting
Lcd_Spi_Writedata(0x26); //VCOM=32Lcd_Spi_Writecmd(0xB2); //VGH Voltage setting
Lcd_Spi_Writedata(0x07); //VGH=15vLcd_Spi_Writecmd(0xB3); //TEST Command Setting
Lcd_Spi_Writedata(0x80);Lcd_Spi_Writecmd(0xB5); //VGL Voltage setting
Lcd_Spi_Writedata(0x49); //VGL=-10.17vLcd_Spi_Writecmd(0xB7);//Power Control 1
Lcd_Spi_Writedata(0x85);Lcd_Spi_Writecmd(0xB8); //Power Control 2
Lcd_Spi_Writedata(0x21); //AVDD=6.6 & AVCL=-4.6Lcd_Spi_Writecmd(0xC1);//Source pre_drive timing set1
Lcd_Spi_Writedata(0x78);Lcd_Spi_Writecmd(0xC2);//Source EQ2 Setting
Lcd_Spi_Writedata(0x78);
//*********GIP SET*************//
Lcd_Spi_Writecmd(0xE0);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x1B);
Lcd_Spi_Writedata(0x02);Lcd_Spi_Writecmd(0xE1);
Lcd_Spi_Writedata(0x08);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x07);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x44);
Lcd_Spi_Writedata(0x44);Lcd_Spi_Writecmd(0xE2);
Lcd_Spi_Writedata(0x11);
Lcd_Spi_Writedata(0x11);
Lcd_Spi_Writedata(0x44);
Lcd_Spi_Writedata(0x44);
Lcd_Spi_Writedata(0xED);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0xEC);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);Lcd_Spi_Writecmd(0xE3);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x11);
Lcd_Spi_Writedata(0x11);Lcd_Spi_Writecmd(0xE4);
Lcd_Spi_Writedata(0x44);
Lcd_Spi_Writedata(0x44);Lcd_Spi_Writecmd(0xE5);
Lcd_Spi_Writedata(0x0A);
Lcd_Spi_Writedata(0xE9);
Lcd_Spi_Writedata(0xD8);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writedata(0x0C);
Lcd_Spi_Writedata(0xEB);
Lcd_Spi_Writedata(0xD8);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writedata(0x0E);
Lcd_Spi_Writedata(0xED);
Lcd_Spi_Writedata(0xD8);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writedata(0x10);
Lcd_Spi_Writedata(0xEF);
Lcd_Spi_Writedata(0xD8);
Lcd_Spi_Writedata(0xA0);Lcd_Spi_Writecmd(0xE6);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x11);
Lcd_Spi_Writedata(0x11);Lcd_Spi_Writecmd(0xE7);
Lcd_Spi_Writedata(0x44);
Lcd_Spi_Writedata(0x44);Lcd_Spi_Writecmd(0xE8);
Lcd_Spi_Writedata(0x09);
Lcd_Spi_Writedata(0xE8);
Lcd_Spi_Writedata(0xD8);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writedata(0x0B);
Lcd_Spi_Writedata(0xEA);
Lcd_Spi_Writedata(0xD8);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writedata(0x0D);
Lcd_Spi_Writedata(0xEC);
Lcd_Spi_Writedata(0xD8);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writedata(0x0F);
Lcd_Spi_Writedata(0xEE);
Lcd_Spi_Writedata(0xD8);
Lcd_Spi_Writedata(0xA0);
Lcd_Spi_Writecmd(0xEB);
Lcd_Spi_Writedata(0x02);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0xE4);
Lcd_Spi_Writedata(0xE4);
Lcd_Spi_Writedata(0x88);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x40);Lcd_Spi_Writecmd(0xEC);
Lcd_Spi_Writedata(0x3C);
Lcd_Spi_Writedata(0x00);Lcd_Spi_Writecmd(0xED);
Lcd_Spi_Writedata(0xAB);
Lcd_Spi_Writedata(0x89);
Lcd_Spi_Writedata(0x76);
Lcd_Spi_Writedata(0x54);
Lcd_Spi_Writedata(0x02);
Lcd_Spi_Writedata(0xFF);
Lcd_Spi_Writedata(0xFF);
Lcd_Spi_Writedata(0xFF);
Lcd_Spi_Writedata(0xFF);
Lcd_Spi_Writedata(0xFF);
Lcd_Spi_Writedata(0xFF);
Lcd_Spi_Writedata(0x20);
Lcd_Spi_Writedata(0x45);
Lcd_Spi_Writedata(0x67);
Lcd_Spi_Writedata(0x98);
Lcd_Spi_Writedata(0xBA);//-----------VAP & VAN---------------
Lcd_Spi_Writecmd(0xFF);
Lcd_Spi_Writedata(0x77);
Lcd_Spi_Writedata(0x01);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x13);Lcd_Spi_Writecmd(0xE5);
Lcd_Spi_Writedata(0xE4);
Lcd_Spi_Writecmd(0xFF);//page
Lcd_Spi_Writedata(0x77);
Lcd_Spi_Writedata(0x01);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writedata(0x00);
Lcd_Spi_Writecmd(0x36);
Lcd_Spi_Writedata(0x00); //10-180Lcd_Spi_Writecmd(0x3A);
Lcd_Spi_Writedata(0x70); //RGB888 24bit//Display on
Lcd_Spi_Writecmd(0x29);
delay_ms(25);
}使用以上函数,可以初始化屏幕,但屏幕并不会有任何显示。这点和之前的MCU接口的TFT、LCD不一样。也不知道其他RGB屏是不是也是这个样。
下面需要使用RGB的数据协议,但ST7701S的手册上关于RGB的时序只有以下:
以上是DE模式的时序图,但除了时序图基本上就没有啥了,按照这个时序图,简单的写了一个时序。
时序是错误的,除了能闪一下屏就没啥现象了,所以暂时不贴代码了。下一章调试出结果后继续。
-
自己写的dll的简介
2009-12-12 10:17:40有了头文件和引入库,DLL的使用就跟普通静态库的使用没啥区别,只除了DLL要和EXE一起发布。 显示调用与隐式调用的优缺点 显示调用使用复杂,但能更加有效地使用内存,因为DLL是在EXE运行时(run time)加载,必须... -
你必须知道的495个C语言问题.[美]Steve Summit(带详细书签).pdf 压缩版
2018-04-08 02:26:505.7 我的编译器提供的头文件中定义的NULL为0L。为什么? 86 5.8 NULL可以合法地用作函数指针吗? 86 5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 87 5.10 但是如果NULL的值改变了,比如在... -
你必须知道的495个C语言问题.[美]Steve Summit(带详细书签).pdf 高清版
2018-04-08 01:22:395.7 我的编译器提供的头文件中定义的NULL为0L。为什么? 86 5.8 NULL可以合法地用作函数指针吗? 86 5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 87 5.10 但是如果NULL的值改变了,比如在... -
[你必须知道的495个C语言问题]人民邮电出版社
2012-08-18 19:02:285.7 我的编译器提供的头文件中定义的NULL为0L。为什么? 5.8 NULL可以合法地用作函数指针吗? 5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 5.10但是如果NULL的值改变了,比如在使用非零... -
你必须知道的495个C语言问题(中文高清版)
2013-03-20 13:28:285.7 我的编译器提供的头文件中定义的NULL为0L。为什么? 5.8 NULL可以合法地用作函数指针吗? 5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 5.10但是如果NULL的值改变了,比如在使用非... -
你必须知道的495个C语言问题
2015-05-08 11:09:255.7 我的编译器提供的头文件中定义的NULL为0L。为什么? 5.8 NULL可以合法地用作函数指针吗? 5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 5.10但是如果NULL的值改变了,比如在使用非零... -
你必须知道的495个C语言问题(高清版)
2010-03-31 16:24:095.7 我的编译器提供的头文件中定义的NULL为0L。为什么? 57 5.8 NULL可以合法地用作函数指针吗? 57 5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 58 5.10 但是如果NULL的值改变了,比如在... -
《你必须知道的495个C语言问题》
2010-03-20 16:41:185.7 我的编译器提供的头文件中定义的NULL为0L。为什么? 57 5.8 NULL可以合法地用作函数指针吗? 57 5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 58 5.10 但是如果NULL的值改变了,比如在... -
C语言FAQ 常见问题列表
2010-10-28 16:41:29o 3.17 有什么容易的显示枚举值符号的方法? * 4. 表达式 o 4.1 为什么这样的代码: a[i] = i++; 不能工作? o 4.2 使用我的编译器,下面的代码 int i=7; printf("%d\n", i++ * i++); 返回 49?不管按什么顺序... -
Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好
2011-01-28 17:02:08在widget.h 文件中添加相应代码,如下,先加入头文件,再加入my2 的定义语 句,这里我们将其放到private 里,因为一般的函数都放在public 里,而变量 都放在private 里。 #ifndef WIDGET_H #define WIDGET_H #... -
《你必须知道的495个C语言问题(中文版)》.pdf
2011-05-19 12:34:055.7 我的编译器提供的头文件中定义的NULL为0L。为什么? 5.8 NULL可以合法地用作函数指针吗? 5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 5.10 但是如果NULL的值改变了,比如在使用非... -
你必须知道的495个C语言问题.pdf
2013-01-20 14:30:545.7 我的编译器提供的头文件中定义的NULL为0L。为什么? 5.8 NULL可以合法地用作函数指针吗? 5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 5.10 但是如果NULL的值改变了,比如在使用非零内部空... -
[你必须知道的495个C语言问题]人民邮电出版社.扫描版.pdf
2011-10-01 21:39:525.7 我的编译器提供的头文件中定义的NULL为0L。为什么? 5.8 NULL可以合法地用作函数指针吗? 5.9 如果NULL和0作为空指针常量是等价的,那我到底该用哪一个呢? 5.10 但是如果NULL的值改变了,比如在使用非零内部空... -
你必须知道的495个C语言问题(PDF)
2009-09-15 10:25:472.17 有什么容易的显示枚举值符号的方法? . . . . . . . . . . . . . . . 11 3 表达式13 3.1 为什么这样的代码: a[i] = i++; 不能工作? . . . . . . . . . . . . 13 3.2 使用我的编译器,下面的代码int i=7; printf... -
uboott移植实验手册及技术文档
2010-01-28 19:18:03关,如果没有定义这个宏,系统调用 drivers/nand/nand.c 中的 nand_init();否则调用自己在 本文件中的 nand_init()函数,本例使用后者。fs2410.c代码如下: #if defined(CONFIG_CMD_NAND) typedef enum { NFCE_... -
PT80-NEAT开发指南v1.1
2014-06-24 18:38:34NEAT 开 发 指南 文档 适用于 PT80 系列 移动数据终端 版本记录 版本号 版本描述 发布日期 V 1.0 初始版本。 2012-04-12 V1.1 修改前三章内容 2012-09-25 目录 第一章 关于本手册..................................... -
Tinyxml 源代码(VC6 & VS2005)
2009-08-12 15:57:04对是保留还是压缩空格这一问题人们还没达成共识。举个例子,假设‘_’代表一个空格,对于"Hello____world",HTML和某些XML解析器会解释成"Hello_world",它们压缩掉了一些空格。而有些XML解析器却不会这样,它们会... -
启动C++Builder5.0企业版,新
2010-04-06 19:37:17不光占去了大量的空间(光一个Form就有300K之大),而且使软件可见,根本没什么作用。因此实际写木马时可以用一些技巧使程序不包含Form,就像Delphi用过程实现的小程序一般只有17K左右那样。 我们首先应该让我们的... -
LuaBind 源码 (Lua增强库)
2011-09-04 18:22:30如果你有同名函数需要注册到Lua, 你必须显示的给定函数的签名. 这可以让C++知道你指定的是哪一个函数. 例如, 如果你有两个函数, int f(const char*) 和 void f(int). module(L) [ def("f", (int(*)(const char*)) &f... -
实在看不下去了,所以才发这文,码主,你看看吧
2021-01-11 21:16:20大多数用户,并不想这些, 只想像IE的Webbrower那样简单调用,因为IE的webbroiwer兼容性已经越来越不行了, 很多时候显示一个网页,会报js错误,或是报找不到项目之类的(但在标准IE中运行没这问题) 另外一些人,想实现... -
【c-WinAPI】 程序运行崩溃(自己写的函数出错),求大神帮忙!!!!
2019-07-06 15:21:53然后会显示 Windows CPU 运行表(大概是这个叫法...),但还是看不懂。所以我后面修改了代码,把27、28行都改成了将那两个变量赋值为常数2,而不是即时计算。 顺便改了一下74行,把pcText换成了pChar (74行这里是... -
【c-WinAPI】 程序运行崩溃(自己写的函数出错),求大神帮忙!!!
2019-07-06 15:19:36然后会显示 Windows CPU 运行表(大概是这个叫法...),但还是看不懂。所以我后面修改了代码,把27、28行都改成了将那两个变量赋值为常数2,而不是即时计算。 顺便改了一下74行,把pcText换成了pChar (74行这里是... -
MFC数字图像处理(BMP格式读取 保存 DFT FFT 直方图 色调均化 缩放 模糊 锐化 滤镜 形态学处理 曲线 裁剪 ...
2014-07-23 10:40:38在实现函数方面,还是在Bmp.cpp与其头文件中,为了让师姐能够容易地找到各个函数的所在,我已经在函数的定义前加上它的中文功能了,相信应该很容易找到。 至于函数过程的注释,由于老师没有要求在作业中需要写出来,... -
代码语法错误分析工具pclint8.0
2010-06-29 07:00:09我的机器上,VC产生0 errors 0 warnings, 而lint程序产生了如下8条警告信息,有些还是很有用处的提示,这里就不一一分析了. test.cpp(12): error 783: (Info -- Line does not end with new-line) test.cpp(7): ... -
windows编程资料大全
2008-10-26 13:55:44面对众多的计算机高手,考虑许久,终于还是决定出来献丑一下,文章内尽量使用最简洁易懂的词汇及例子来介绍,希望能够对一些初学与进阶者有所帮助。 关于进程的隐藏,98下的例子数不胜数。WinNT/Win2K下的隐藏方法,... -
新手学习C++入门资料
2008-12-28 23:58:50按常理说,C++编译器能够编译任何C程序,但是C和C++还是有一些小差别。 例如C++增加了C不具有的关键字。这些关键字能作为函数和变量的标识符在C程序中使用,尽管C++包含了所有的C,但显然没有任何C++编译器能编译...