【海棠派开发板】第十四讲 14. TFT-8080口液晶显示

发布于 2024-09-10 17:36:00

14.1 实验内容

通过本实验主要学习以下内容:

• LCD显示原理

• EXMC NOR/SRAM模式时序和8080并口时序

• LCD显示控制

14.2 实验原理

使用MCU的EXMC外设实现8080并口时序,和TFT-LCD控制器进行通信,控制LCD显示图片、字符、色块等。

14.2.1 TFT-LCD介绍

薄膜晶体管液晶显示器(英语:Thin film transistor liquid crystal display,常简称为TFT-LCD)是多数液晶显示器的一种,它使用薄膜晶体管技术改善影象品质。虽然TFT-LCD被统称为LCD,不过它是种主动式矩阵LCD,被应用在电视、平面显示器及投影机上。

简单说,TFT-LCD面板可视为两片玻璃基板中间夹着一层液晶,上层的玻璃基板是彩色滤光片、而下层的玻璃则有晶体管镶嵌于上。当电流通过晶体管产生电场变化,造成液晶分子偏转,藉以改变光线的偏极性,再利用偏光片决定像素的明暗状态。此外,上层玻璃因与彩色滤光片贴合,形成每个像素各包含红蓝绿三颜色,这些发出红蓝绿色彩的像素便构成了面板上的视频画面。

为了对TFT-LCD的显示进行控制,需要通过接口和液晶屏通信,但所谓与液晶屏通信,实际上还是与液晶屏驱动控制芯片在通信,而主控制器需要按控制芯片支持的通信进行交互,通常有UART、IIC、SPI、8080、MIPI等各类接口。另外需要注意的一点是:一般支持普通MCU接口的LCD驱动芯片,都需要内置GRAM(Graphics RAM), 至少能存储一个屏幕的数据。

这这里,我们使用了8080接口通过并行总线传输控制命令和数据,并通过往LCD液晶模组自带的GRAM更新数据实现屏幕的刷新。

GD32H757海棠派开发板TFT-LCD如下图所示,采用了ILI9488 LCD驱动器,分辨率320*480,支持多种通信接口,在GD32H757上,适合使用16-bit Parallel MCU Interface接口进行通信,开发板配套的LCD模块也采用了该接口设计和开发板进行连接。

14.2.2 LCD 8080并口时序介绍(16-bit Parallel MCU Interface)

8080接口是由英特尔设计,是一种并行、异步、半双工通信协议,作用是用于外扩RAM、ROM,后面也用于LCD接口。并行接口又分为 8位/16位/24位 三种, 顾名思义,就是数据总线的位宽。

• 如下图所示是16-bit Parallel MCU Interface的接口和MCU的连接信号:

• 如下图所示是LCD驱动器 16BIT 8080并口读写时序:

○ CS拉低后,并口DATA IO在WR的上升沿被采样;

○ 可以理解为16线的SPI,而WR是写“CLK”,RD是读“CLK”;

○ 但这里还多了D/C引脚用于选择传输命令或数据

• 8080接口的RGB颜色数据编码

○ 像素信息用RGB三原色表示,所以向液晶屏传输的数据帧主要也就是传输的RGB颜色数据。

○ 像素的颜色数据并不总是用 8R8G8B的24位真彩色 表示,共有下面几种表示情况:

▪ 12-bits/pixel (R 4-bit, G 4-bit, B 4-bit), 4,096 Colors, 简称444;

▪ 16-bits/pixel (R 5-bit, G 6-bit, B 5-bit), 65,536 Colors, 简称565;

▪ 18-bits/pixel (R 6-bit, G 6-bit, B 6-bit), 262,144 Colors, 简称666;

▪ 24-bits/pixel (R 8-bit, G 8-bit, B 8-bit), 16,777,216 Colors, 简称888;
不同颜色表示方法和不同的总线位宽相组合,就会组合成多种RGB颜色数据编码。

○ 综合显示效果、内存资源开销等,我们采取了RGB565像素格式,这样16BIT 8080每次传输就是一个像素点的像素值,传输数据就为像素颜色值。

14.2.3 EXMC外设和EXMC NOR/SRAM模式实现8080时序

• 这里我们使用EXMC中时序和接口类似的NOR/SRAM模式,来实现8080接口驱动TFT-LCD显示。

• 这里我们使用SRAM模式异步模式A(扩展模式),时序如下图:

我们对比上面的时序和16-bit Data Bus 8080 LCD时序,发现一些信号的时序是类似的,我们可以将这些信号进行对应:

EXMC_NEx -> CSx

EXMC_NOE->RDx

EXMC_NWE->WR

EXMC_D[15:0]->DB[15:0]

EXMC_Ax->D/C

这里巧妙的是使用EXMC_Ax引脚实现D/C的数据/命令切换功能,所以我们只需要选择一个方便布线的EXMC_Ax引脚,然后在软件中对该引脚对应的EXMC逻辑地址进行操作就可以实现程序读写不同地址时,D/C引脚的状态切换,从而实现访问一个EXMC地址时是数据或命令类似,访问该地址位反向的任意地址就是另外一个类型。对于程序中逻辑地址的影响,除了Ax引脚的选择外还有NEx引脚的选择。NE[0]-NE[3]对应如下图的NOR/SRAM BANK下的Region0-Region3。

14.3 硬件设计

在红枫派开发板设计中,我们使用EXMC_NE1引脚作为CS,EXMC_A12引脚作为D/C,同时LCD触摸接口使用SPI,LCD_BL为背光控制引脚,这里的引脚选用了带PWM的引脚,可以实现LCD的背光亮度调节。

14.4 代码解析

14.4.1 CSx、D/C、BL相关功能定义和注册;

在EXMC LCD驱动代码中存在和电路设计匹配的变更点,往往让开发者头大,需要详细阅读用户手册来进行配置调整、读写地址调整;而在我们的驱动文件bsp_8080_lcd.c中定义注册背光引脚、Ax、NEx引脚,当硬件设计变更时只需要在这里调整,驱动就可以在新的硬件中正常使用。

<td width="552" valign="top" style="width:414.0000pt;padding:3.0000pt 6.0000pt 1.5000pt 6.0000pt ;border-left:1.0000pt solid rgb(222,224,227); mso-border-left-alt:0.0000pt solid rgb(222,224,227);border-right:1.0000pt solid rgb(222,224,227);mso-border-right-alt:0.0000pt solid rgb(222,224,227); border-top:1.0000pt solid rgb(222,224,227);mso-border-top-alt:0.0000pt solid rgb(222,224,227);border-bottom:1.0000pt solid rgb(222,224,227); mso-border-bottom-alt:0.0000pt solid rgb(222,224,227);background:rgb(245,246,247);"><p class="MsoNormal" style="margin-top: 6pt; margin-bottom: 6pt; line-height: 120%;"><span style="font-family:Consolas;line-height:120%;color:rgb(100,106,115); font-size:11.0000pt;">C</span><span style="font-family:Consolas;line-height:120%;color:rgb(100,106,115); font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">//用户配置定义区</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">#define BACK_LIGHT_DUTY 80</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">TIMER_CH_DEF(LCD_8080_BL,TIMER3,1,TIMER_CH_PWM_HIGH,D,13,AF_PP,GPIO_AF_2);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">#define EXMC_Ax  12</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">AFIO_DEF(EXMC_Ax_GPIO,G,2,AF_PP,GPIO_AF_12);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">#define EXMC_NEx 1</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">AFIO_DEF(EXMC_NEx_GPIO,G,9,AF_PP,GPIO_AF_12);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">GPIO_DEF(LCD_8080_RST,D,12,OUT_PP,RESET,NULL);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">//驱动内部定义区</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">#define EXMC_LCD_D  REG16(((uint32_t)(EXMC_BANK0_NORSRAM_REGIONx_ADDR(EXMC_NEx)))|BIT(EXMC_Ax)*2)</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">#define EXMC_LCD_C  REG16(((uint32_t)(EXMC_BANK0_NORSRAM_REGIONx_ADDR(EXMC_NEx))))</span><span style="font-family:Calibri;font-size:10.5000pt;"><o:p></o:p></span></p>

14.4.2 gpio和exmc初始化:

exmc使用了扩展模式,这样读和写的时序可以单独配置,因为LCD对读和写的要求时间是不同的,读的时候速率不能太高,如果使用一种参数类型就会为了满足读的要求而降低写的速率,影响最终刷屏的性能。这里主要调整读和写时的地址建立、数据建立时间,通常和硬件设计也有较大关系。

<td width="552" valign="top" style="width:414.0000pt;padding:3.0000pt 6.0000pt 1.5000pt 6.0000pt ;border-left:1.0000pt solid rgb(222,224,227); mso-border-left-alt:0.0000pt solid rgb(222,224,227);border-right:1.0000pt solid rgb(222,224,227);mso-border-right-alt:0.0000pt solid rgb(222,224,227); border-top:1.0000pt solid rgb(222,224,227);mso-border-top-alt:0.0000pt solid rgb(222,224,227);border-bottom:1.0000pt solid rgb(222,224,227); mso-border-bottom-alt:0.0000pt solid rgb(222,224,227);background:rgb(245,246,247);"><p class="MsoNormal" style="margin-top: 6pt; margin-bottom: 6pt; line-height: 120%;"><span style="font-family:Consolas;line-height:120%;color:rgb(100,106,115); font-size:11.0000pt;">C</span><span style="font-family:Consolas;line-height:120%;color:rgb(100,106,115); font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">static void driver_exmc_lcd_16bit_gpio_init(void)</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">{</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">   / EXMC clock enable /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    rcu_periph_clock_enable(RCU_EXMC);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    / EXMC enable /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    rcu_periph_clock_enable(RCU_GPIOB);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    rcu_periph_clock_enable(RCU_GPIOD);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    rcu_periph_clock_enable(RCU_GPIOE);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    rcu_periph_clock_enable(RCU_GPIOF);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    rcu_periph_clock_enable(RCU_GPIOG);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    / configure GPIO D[0-15] /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 |</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">                GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 |</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">                  GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 |</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">                            GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    gpio_af_set(GPIOE, GPIO_AF_12, GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">                GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">                  GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">                            GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">                            </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    / configure NOE NWE /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_4 | GPIO_PIN_5);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_4 | GPIO_PIN_5);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_100_220MHZ, GPIO_PIN_4 | GPIO_PIN_5);                            </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">}</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">void driver_exmc_lcd_init(uint32_t norsram_region)</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">{</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    #define LCD_READ_DATA_SETTIME_NS 50</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    #define LCD_READ_ADDR_SETTIME_NS 10</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    #define LCD_WRITE_DATA_SETTIME_NS 20</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    #define LCD_WRITE_ADDR_SETTIME_NS 10</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    uint32_t ahb_clk=0;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    exmc_norsram_parameter_struct nor_init_struct;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    exmc_norsram_timing_parameter_struct nor_timing_read_init_struct;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    exmc_norsram_timing_parameter_struct nor_timing_write_init_struct;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    mpu_region_init_struct mpu_init_struct;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    mpu_region_struct_para_init(&mpu_init_struct);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    mpu_config(EXMC_BANK0_NORSRAM_REGIONx_ADDR(norsram_region),MPU_REGION_SIZE_64MB,MPU_AP_FULL_ACCESS,MPU_ACCESS_BUFFERABLE,MPU_ACCESS_NON_CACHEABLE,MPU_ACCESS_NON_SHAREABLE,MPU_INSTRUCTION_EXEC_NOT_PERMIT,MPU_TEX_TYPE0);    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    / EXMC clock enable /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    rcu_periph_clock_enable(RCU_EXMC);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    driver_exmc_lcd_16bit_gpio_init();    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.read_write_timing = &nor_timing_read_init_struct;       </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.write_timing = &nor_timing_write_init_struct;        </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    exmc_norsram_struct_para_init(&nor_init_struct);    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.read_write_timing = &nor_timing_read_init_struct;       </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.write_timing = &nor_timing_write_init_struct;      </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    SystemCoreClockUpdate();</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    ahb_clk=rcu_clock_freq_get(CK_AHB);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    / config timing parameter /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_read_init_struct.asyn_access_mode = EXMC_ACCESS_MODE_A;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_read_init_struct.syn_data_latency = EXMC_DATALAT_2_CLK;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_read_init_struct.syn_clk_division = EXMC_SYN_CLOCK_RATIO_2_CLK;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_read_init_struct.bus_latency = 1;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_read_init_struct.asyn_data_setuptime = LCD_READ_DATA_SETTIME_NS/(float)(1000000000.0f/ahb_clk);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_read_init_struct.asyn_address_holdtime = 1;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_read_init_struct.asyn_address_setuptime = LCD_READ_ADDR_SETTIME_NS/(float)(1000000000.0f/ahb_clk);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    / config timing parameter /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_write_init_struct.asyn_access_mode = EXMC_ACCESS_MODE_A;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_write_init_struct.syn_data_latency = EXMC_DATALAT_2_CLK;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_write_init_struct.syn_clk_division = EXMC_SYN_CLOCK_RATIO_2_CLK;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_write_init_struct.bus_latency = 1;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_write_init_struct.asyn_data_setuptime = LCD_WRITE_DATA_SETTIME_NS/(float)(1000000000.0f/ahb_clk);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_write_init_struct.asyn_address_holdtime = 1;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_timing_write_init_struct.asyn_address_setuptime =LCD_WRITE_ADDR_SETTIME_NS/(float)(1000000000.0f/ahb_clk);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    / config EXMC bus parameters /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.norsram_region = norsram_region;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.write_mode = EXMC_ASYN_WRITE;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.extended_mode = ENABLE;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.asyn_wait = DISABLE;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.nwait_signal = DISABLE;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.memory_write = ENABLE;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.nwait_config = EXMC_NWAIT_CONFIG_BEFORE;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">//    nor_init_struct.wrap_burst_mode = DISABLE;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.nwait_polarity = EXMC_NWAIT_POLARITY_LOW;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.burst_mode = DISABLE;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.databus_width = EXMC_NOR_DATABUS_WIDTH_16B;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.memory_type = EXMC_MEMORY_TYPE_SRAM;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    nor_init_struct.address_data_mux = DISABLE;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    exmc_norsram_init(&nor_init_struct);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    / enable the EXMC bank0 NORSRAM /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    exmc_norsram_enable(norsram_region);  </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">}</span><span style="font-family:Calibri;font-size:10.5000pt;"><o:p></o:p></span></p>

14.4.3 LCD数据、命令读写:

LCD的命令、数据的读写都通过EXMC来实现,在读写EXMC的逻辑地址时对应的波形会发送到LCD上,命令/数据目前通过地址引脚控制,所以我们需要定义两个地址分别对应命令、数据地址,对这两个地址读和写就可以实现LCD读写数据、写命令功能。

<td width="552" valign="top" style="width:414.0000pt;padding:3.0000pt 6.0000pt 1.5000pt 6.0000pt ;border-left:1.0000pt solid rgb(222,224,227); mso-border-left-alt:0.0000pt solid rgb(222,224,227);border-right:1.0000pt solid rgb(222,224,227);mso-border-right-alt:0.0000pt solid rgb(222,224,227); border-top:1.0000pt solid rgb(222,224,227);mso-border-top-alt:0.0000pt solid rgb(222,224,227);border-bottom:1.0000pt solid rgb(222,224,227); mso-border-bottom-alt:0.0000pt solid rgb(222,224,227);background:rgb(245,246,247);"><p class="MsoNormal" style="margin-top: 6pt; margin-bottom: 6pt; line-height: 120%;"><span style="font-family:Consolas;line-height:120%;color:rgb(100,106,115); font-size:11.0000pt;">C</span><span style="font-family:Consolas;line-height:120%;color:rgb(100,106,115); font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">/</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">  说明       LCD写数据</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
输入       data: 要写入的数据</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">  返回值      无</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
/</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">void bsp_8080_lcd_wr_data(__IO uint16_t data)</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">{</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">//    delay_sysclk(1);            </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    EXMC_LCD_D = data;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">}</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">/
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">  说明       LCD写寄存器编号/地址函数</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
输入       regno: 寄存器编号/地址</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">  返回值      无</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
/</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">void bsp_8080_lcd_wr_regno(__IO uint16_t regno)</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">{</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">//    delay_sysclk(1);        </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    EXMC_LCD_C = regno;   / 写入要写的寄存器序号 /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">}</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">/</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">  说明       LCD写寄存器</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
输入       regno:寄存器编号/地址</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">  输入       data:要写入的数据</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
返回值      无</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">void bsp_8080_lcd_write_reg(__IO uint16_t regno,__IO uint16_t data)</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">{</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">//    delay_sysclk(1);     </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    EXMC_LCD_C = regno;   /
写入要写的寄存器序号 /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">//    delay_sysclk(1);     </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    EXMC_LCD_D = data;    /
写入数据 /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">}</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">/
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
说明       LCD读数据</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">  输入       无</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
返回值      读取到的数据</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> */</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">static uint16_t bsp_8080_lcd_read_data(void)</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">{</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">//    delay_sysclk(1);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    return EXMC_LCD_D;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">}</span><span style="font-family:Calibri;font-size:10.5000pt;"><o:p></o:p></span></p>

14.4.4 LCD初始化

LCD初始化序列通常LCD驱动器厂家会提供相关寄存器配置,为了兼容不同的LCD,可以读取LCD ID后执行不同的驱动芯片初始化:

<td width="552" valign="top" style="width:414.0000pt;padding:3.0000pt 6.0000pt 1.5000pt 6.0000pt ;border-left:1.0000pt solid rgb(222,224,227); mso-border-left-alt:0.0000pt solid rgb(222,224,227);border-right:1.0000pt solid rgb(222,224,227);mso-border-right-alt:0.0000pt solid rgb(222,224,227); border-top:1.0000pt solid rgb(222,224,227);mso-border-top-alt:0.0000pt solid rgb(222,224,227);border-bottom:1.0000pt solid rgb(222,224,227); mso-border-bottom-alt:0.0000pt solid rgb(222,224,227);background:rgb(245,246,247);"><p class="MsoNormal" style="margin-top: 6pt; margin-bottom: 6pt; line-height: 120%;"><span style="font-family:Consolas;line-height:120%;color:rgb(100,106,115); font-size:11.0000pt;">C</span><span style="font-family:Consolas;line-height:120%;color:rgb(100,106,115); font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">/</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">  说明       初始化LCD</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
  @note      该初始化函数可以初始化各种型号的LCD(详见本.c文件最前面的描述)</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
输入       无</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">  返回值      无</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;"> 
/</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">uint32_t bsp_8080_lcd_init(void)</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">{</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_port_init();</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    driver_gpio_general_init(&LCD_8080_RST);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    driver_gpio_pin_reset(&LCD_8080_RST);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    delay_ms(10);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    driver_gpio_pin_set(&LCD_8080_RST);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    delay_ms(10);    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_backlight_duty_set(BACK_LIGHT_DUTY);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_backlight_on();          / 点亮背光 /    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    / LCD的画笔颜色和背景色 /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_parameter.g_point_color = WHITE;    / 画笔颜色 /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_parameter.g_back_color  = BLACK;    / 背景色 /    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    </span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    delay_ms(1);     / 初始化FSMC后,必须等待一定时间才能开始初始化 /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    / 尝试9341 ID的读取 /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_wr_regno(0XD3);</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_parameter.id = bsp_8080_lcd_read_data();  / dummy read /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_parameter.id = bsp_8080_lcd_read_data();  / 读到0X00 /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_parameter.id = bsp_8080_lcd_read_data();  / 读取0X93 /</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_parameter.id <<= 8;</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">
</span><span style="font-family:Consolas;line-height:120%;font-size:11.0000pt;">    bsp_8080_lcd_parameter.id |= bsp_8080_lcd_read_data(); /
0 条评论
 
  • 售前咨询

    冯先生
    139 0510 2619
    QQ在线咨询
  • 样品申请

    周一~周六
    9:00-18:00
    QQ在线咨询
  • FAE咨询

    常见问题咨询FAE咨询
  • 方案开发

    一对一方案定制留言宝
  • 技术交流群

    QQ群:859440462
  • 关注微信公众号

    微信公众号
  •