This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TM4C1294NCPDT:CCS 7.2.0

Guru**** 2350610 points
Other Parts Discussed in Thread: EK-TM4C123GXL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/612339/compiler-tm4c1294ncpdt-ccs-7-2-0

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C123GXL

工具/软件:TI C/C++编译器

大家好、

我在连接 Kentec 器件型号- Kentec480x272x16_SSD1963的 LCD 图形方面遇到问题

我有正确的运行代码、用于在横向模式下显示 LCD。

现在、我需要将显示模式翻转为纵向模式。

在进行#define Portrait 时、它不会像.c 文件"Kentec480x272x16_SSD1963_8bit.c"中所述工作

请告诉我如何实现这一点。

请检查随附的文件并指导我如何完成该操作、以及需要更改哪些组件才能完成该操作。

主机处理器- TI Tiva C 系列 TM4C1294CNPDT

CCS 版本- 7.2

Tiva C 系列库- TivaWare_C_Series-2.1.4.178

ARM 编译器- TI v17.6.0.STS

此致

Saurabh

文件-

Kentec480x272x16_SSD1963_8bit.c

//
//
// Kentec480x272x16_SSD1963_8bit.c -用于 Kentec 的显示驱动程序
//采用 SSD1963的 K430WQC-V3-F TFT 显示屏
//控制器。 此版本假定为
//微控制器之间的8080-8位接口
//和显示。
//
//

//
//
//! 添加到组 display_API
//! @{
//
//
#include "stdint.h"
#include "stdbool.h"

#include "inc/hw_gpio.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
//#include "driverlib/epi.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"
#include "driverlib/rom.h"
#include "grlib/grlib.h"
#include "Kentec480x272x16_SSD1963_8bit.h"
//#include "drivers/set_pinout.h"

//
//
//此驱动程序以四种不同的屏幕方向运行。 它们是:
//
//*纵向-屏幕比宽度高,柔性连接器
//显示左侧。 这是通过定义来选择的
//纵向。
//
//*横向-屏幕比高,柔性连接器更宽
//显示在显示屏底部。 这是通过定义来选择的
//横向。
//
//*纵向翻转-屏幕高度大于宽度和弯曲程度
//连接器位于显示屏右侧。 这是
//通过定义纵向翻转来选择。
//
//*横向翻转-屏幕比高和弯曲的屏幕要宽
//连接器位于显示屏的顶部。 这是
//通过定义 Landscape 触发来选择。
//
//如果是纵向模式,这些也可以在屏幕旋转方面进行想象
//屏幕旋转0度,横向为逆时针90度
//旋转,纵向翻转为180度旋转,横向翻转为
//逆时针旋转270度。
//
//如果未选择屏幕方向,将使用“横向翻转”模式。
//
//
#if! 已定义(纵向)&&! 已定义(纵向翻转)&&\
!! 已定义(横向)&&! 已定义(横向翻转)
//#define Landscape
#define 纵向
#endif

#define LCD_HEIGHT 272
#define LCD_width 480
//
//
//控制坐标空间映射和绘图的各种定义
//四个支撑方向的方向。
//
//
#ifdef 纵向
#define HORIZ_DIRECTION 0xa0 //160
#define VERT_DIRECTION 0x80 //128
#define MAPPED_X (x、y)(LCD_WIDTH-1-(y))
#define MAPPED_Y (x、y)(x)
#endif
#ifdef 横向
#define HORIZ_DIRECTION 0x00 //0
#define VERT_DIRECTION 0x20 //32
#define MAPPED_X (x、y)(x)
#define MAPPED_Y (x、y)(y)

#endif
#ifdef 纵向翻转
#define HORIZ_DIRECTION 0xa2
#define VERT_DIRECTION 0x81
#define MAPPED_X (x、y)(y)
#define MAPPED_Y (x、y)(LCD_height-1 -(x))
#endif
#ifdef 横向翻转
#define HORIZ_DIRECTION 0x02
#define VERT_DIRECTION 0x01
#define MAPPED_X (x、y)(LCD_WIDTH-(x))
#define MAPPED_Y (x、y)(LCD_height-(y))
#endif

//
//
//定义用于与 SSD1963通信的引脚。
//
//

#define LCD_DATA_Periph SYSCTL_Periph_GPIOD
#define LCD_DATA_BASE GPIO_PORTD_BASE
#define LCD_DATA_PINS 0xFF

//
// LCD 控制线 GPIO 定义。
//
#define LCD_CS_Periph SYSCTL_Periph_GPIOL
#define LCD_CS_BASE GPIO_PORTL_BASE
#define LCD_CS_PIN GPIO_PIN_3
#define LCD_RST_Periph SYSCTL_Periph_GPIOL
#define LCD_RST_BASE GPIO_PORTL_BASE
#define LCD_RST_PIN GPIO_PIN_4
#define LCD_DC_Periph SYSCTL_Periph_GPIOL
#define LCD_DC_BASE GPIO_PORTL_BASE
#define LCD_DC_PIN GPIO_PIN_2
#define LCD_RD_Periph SYSCTL_Periph_GPIOL
#define LCD_RD_BASE GPIO_PORTL_BASE
#define LCD_RD_PIN GPIO_PIN_1
#define LCD_WR_Periph SYSCTL_Periph_GPIOL
#define LCD_WR_base GPIO_PORTL_BASE
#define LCD_WR_PIN GPIO_PIN_0

//
//
//背光控制 GPIO 与闪存/SRAM/LCD 子板配合使用。
//
//
#define LCD_backlight_Periph SYSCTL_Periph_GPIOG
#define LCD_backlight_BASE GPIO_PORTG_base
#define LCD_backlight_PIN GPIO_PIN_1

//
//
//用于设置 LCD 数据总线的宏,准备向写入一个字节
//器件。
//
//
#define SET_LCD_DATA (ucByte)\
{\
HWREG (LCD_DATA_BASE + GPIO_DATA +(LCD_DATA_PINS << 2))=(ucByte);\

//
//
//各种内部 SSD1963寄存器名称标签
//
//
#define entry_mode_default 0x6830
#define make_entry_mode (x)((entry_mode_default 和0xFF00)|(x))

//
//
// LCD 面板的尺寸。
//
//
#define LCD_Vertical _MAX 272
#define LCD_Horizontal _MAX 480

//
//
//将24位 RGB 颜色转换为特定于显示驱动程序的颜色。
//
//\param c 是24位 RGB 颜色。 最低有效字节为蓝色
//通道、下一个字节是绿色通道、第三个字节是红色
//通道。
//
//此宏将24位 RGB 颜色转换为可写入的值
//放入显示屏的帧缓冲区,以便重现该颜色,或
//该颜色的近似值。
//
//返回特定于显示驱动程序的颜色。
//
//
#define DPYCOLORTRANSLATE (c)((((c)& 0x00f80000)>> 8)|\
(((c)& 0x0000fc00)>> 5)|\
(((c)& 0x000000f8)>> 3))

//
//
//低级 LCD 控制器访问函数的函数指针类型。
//
//
typedef void (* pfnWriteData)(unsigned short usData);
typedef void (* pfnWriteSetting)(unsigned short usData);
typedef void (* pfnWriteCommand)(无符号短整型 ucData);

//
//
//低级 LCD 控制器访问函数的函数指针。
//
//

静态空 WriteDataGPIO (无符号短整型 usData);
静态空 WriteSettingGPIO (无符号短整型 usData);
静态空 WriteCommandGPIO (无符号短接 ucData);

pfnWriteData WriteData = WriteDataGPIO;
pfnWriteData WriteSetting = WriteSettingGPIO;
pfnWriteCommand WriteCommand = WriteCommandGPIO;

//LCD 背光打开
void LCD_backlight_on (void)

HWREG (LCD_backlight_BASE + GPIO_DATA +(LCD_backlight_PIN << 2))= LCD_backlight_PIN;//0;

///液晶屏背光关闭
void LCD_backlight_off (void)

HWREG (LCD_backlight_BASE + GPIO_DATA +(LCD_backlight_PIN << 2))= 0;//LCD_backlight_PIN;

//
//
//将数据字写入 SSD1963。 此函数实现基本 GPIO
//连接 LCD 显示屏。
//
//
静态空
WriteDataGPIO (无符号短整型 usData)

// HWREG (LCD_CS_BASE + GPIO_DATA +(LCD_CS_PIN << 2))= 0;

//
//将数据的最高有效字节写入总线。
//
SET_LCD_DATA ((usData >> 11)<<3);

//
//将写使能信号置为有效。 我们需要执行此操作2次才能确保
//我们不违反显示的时序要求。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= 0;

//
//将写使能信号置为无效。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= LCD_WR_PIN;

//
//将数据的中字节写入总线。
//
SET_LCD_DATA ((usData >> 5)<<2);

//
//将写使能信号置为有效。 我们需要执行此操作2次才能确保
//我们不违反显示的时序要求。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= 0;

//
//将写使能信号置为无效。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= LCD_WR_PIN;

//
//将数据的最低有效字节写入总线。
//
SET_LCD_DATA (usData<3);

//
//将写使能信号置为有效。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= 0;

//
//将写使能信号置为无效。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= LCD_WR_PIN;

静态空
WriteSettingGPIO (无符号短整型 usData)

//
//将数据的最低有效字节写入总线。
//
SET_LCD_DATA (usData);
//
//将写使能信号置为有效。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= 0;

//
//将写使能信号置为无效。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= LCD_WR_PIN;


//
//
//将命令写入 SSD1963。 此函数实现基本 GPIO
//连接 LCD 显示屏。
//
//
静态空
WriteCommandGPIO (无符号短接 ucData)

//
//将数据的最高有效字节写入总线。 这是始终的
// 0、因为命令不超过8位。
//
SET_LCD_DATA (0);

//
//将 DC 置为有效
//
HWREG (LCD_DC_BASE + GPIO_DATA +(LCD_DC_PIN << 2))= 0;

//
//将写使能信号置为有效。 我们需要执行此操作2次才能确保
//我们不违反显示的时序要求。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= 0;

//
//将写使能信号置为无效。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= LCD_WR_PIN;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;

//
//将数据的最低有效字节写入总线。
//
Set_LCD_DATA (ucData);

//
//将写使能信号置为有效。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= 0;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= 0;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= 0;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= 0;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= 0;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= 0;

//
//将写使能信号置为无效。
//
HWREG (LCD_WR_BASE + GPIO_DATA +(LCD_WR_PIN << 2))= LCD_WR_PIN;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;
// HWREG (LCD_WR_base + GPIO_DATA +(LCD_WR_PIN <<2))= LCD_WR_PIN;

//
//将直流信号设置为高电平,表示以下写入是数据。
//
HWREG (LCD_DC_BASE + GPIO_DATA +(LCD_DC_PIN << 2))= LCD_DC_PIN;
// HWREG (LCD_DC_BASE + GPIO_DATA +(LCD_DC_PIN << 2))= LCD_DC_PIN;
// HWREG (LCD_DC_BASE + GPIO_DATA +(LCD_DC_PIN << 2))= LCD_DC_PIN;

//
//
//初始化基于 GPIO 的 LCD 接口所需的引脚。
//
//此函数配置用于控制 LCD 显示的 GPIO 引脚
//使用基本 GPIO 接口时。 退出时、LCD 控制器
//已复位,已准备好接收命令和数据写入。
//
//\返回无。
//
//
静态空
InitGPIOLCDInterface (无符号长 ulClockMS)

/*
//
//将连接到 LCD 的引脚配置为 GPIO 输出。
//
GPIOPinTypeGPIOOutput (LCD_DATA_BASE、LCD_DATA_Pins);
GPIOPinTypeGPIOOutput (LCD_DC_BASE、LCD_DC_PIN);
GPIOPinTypeGPIOOutput (LCD_RD_BASE、LCD_RD_PIN);
GPIOPinTypeGPIOOutput (LCD_WR_base、LCD_WR_PIN);
GPIOPinTypeGPIOOutput (LCD_CS_BASE、LCD_CS_PIN);
GPIOPinTypeGPIOOutput (LCD_RST_BASE、LCD_RST_PIN);
*
//
//将连接到 LCD 的引脚配置为 GPIO 输出。
//

HWREG (GPIO_PORTD_BASE + GPIO_O_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTD_BASE + GPIO_O_CR)= 0xff;
GPIODirModeSet (LCD_DATA_BASE、LCD_DATA_PINS、GPIO_DIR_MODE_OUT);
GPIOPadConfigSet (LCD_DATA_BASE、LCD_DATA_Pins、GPIO_Strength _8mA、GPIO_PIN_TYPE_STD);
GPIODirModeSet (LCD_DC_BASE、LCD_DC_PIN、GPIO_DIR_MODE_OUT);
GPIOPadConfigSet (LCD_DC_BASE、LCD_DC_PIN、GPIO_Strength _8mA、GPIO_PIN_TYPE_STD);
GPIODirModeSet (LCD_RD_BASE、LCD_RD_PIN、GPIO_DIR_MODE_OUT);
GPIOPadConfigSet (LCD_RD_BASE、LCD_RD_PIN、GPIO_Strength _8mA、GPIO_PIN_TYPE_STD);
GPIODirModeSet (LCD_WR_base、LCD_WR_PIN、GPIO_DIR_MODE_OUT);
GPIOPadConfigSet (LCD_WR_base、LCD_WR_PIN、GPIO_Strength _8mA、GPIO_PIN_TYPE_STD);
GPIODirModeSet (LCD_CS_BASE、LCD_CS_PIN、GPIO_DIR_MODE_OUT);
GPIOPadConfigSet (LCD_CS_BASE、LCD_CS_PIN、GPIO_Strength _8mA、GPIO_PIN_TYPE_STD);
GPIODirModeSet (LCD_RST_BASE、LCD_RST_PIN、GPIO_DIR_MODE_OUT);
GPIOPadConfigSet (LCD_RST_BASE、LCD_RST_PIN、GPIO_Strength _8mA、GPIO_PIN_TYPE_STD);
GPIOPinTypeGPIOOutput (LCD_backlight_BASE、LCD_backlight_PIN);
//
//将 LCD 控制引脚设置为其默认值。 这也会将断言
// LCD 复位信号。
//
GPIOPinWrite (LCD_CS_BASE、LCD_CS_PIN、LCD_CS_PIN);
GPIOPinWrite (LCD_DATA_BASE、LCD_DATA_PINS、0x00);
GPIOPinWrite (LCD_DC_BASE、LCD_DC_PIN、0x00);
GPIOPinWrite (LCD_RD_BASE、LCD_RD_PIN、LCD_RD_PIN);
GPIOPinWrite (LCD_WR_base、LCD_WR_PIN、LCD_WR_PIN);
GPIOPinWrite (LCD_RST_BASE、LCD_RST_PIN、0x00);
GPIOPinWrite (LCD_CS_BASE、LCD_CS_PIN、0);
LCD_backlight_on ();

//
//延迟1ms。
//
SysCtlDelay (26666);

//
//使 LCD 复位信号无效。
//
GPIOPinWrite (LCD_RST_BASE、LCD_RST_PIN、LCD_RST_PIN);

//
// LCD 复位后延迟1ms。
//
SysCtlDelay (26666);


//
//
//! 初始化显示驱动程序。
//!
//! 此函数用于初始化面板上的 SSD1963显示控制器、
//! 准备显示数据。
//!
//! \无返回。
//
//
无效
Kentec480x272x16_SSD1963Init (空)

无符号超长整型 ulCount;

//
//获取当前处理器时钟频率。
//
//SysCtlClockGet ()/(3 * 1000);


//启用用于连接 SSD1963的 GPIO 外设。
//
SysCtlPeripheralEnable (LCD_DATA_Periph);
SysCtlPeripheralEnable (LCD_DC_Periph);
SysCtlPeripheralEnable (LCD_RD_Periph);
SysCtlPeripheralEnable (LCD_WR_Periph);
SysCtlPeripheralEnable (LCD_RST_Periph);
SysCtlPeripheralEnable (LCD_CS_Periph);
SysCtlPeripheralEnable (LCD_backlight_Periph);

//
//根据 LCD 的方式执行低级接口初始化
//连接到 Stellaris 微控制器。 这因情况而异
//连接子板后,可能会有子板
//可以直接驱动 LCD,而不是通过基本 GPIO 接口。
//

//
//初始化用于连接 LCD 控制器的 GPIO。
//
InitGPIOLCDInterface (26666);

WriteCommand (0x0001);//软件复位
//
//延迟1ms。
//
SysCtlDelay (26666);

WriteCommand (0x00E2);//PLL 乘法器、将 PLL 时钟设置为120M
WriteSeting (0x0014);/29
WriteSetting (0x0003);
WriteSetting (0x0004);

WriteCommand (0x00E0);// PLL 启用
WriteSetting (0x0001);
//
//延迟1/10ms。
//
SysCtlDelay (26666/10);

WriteCommand (0x00E0);
WriteSetting (0x0003);
//
//延迟1/5ms。
//
SysCtlDelay (26666/5);


PCLK 的 WriteCommand (0x00E6);//PLL 设置、取决于分辨率
WriteSeting (0x0003);//04
WriteSeting (0x00A0);//B9
WriteSeting (0x0000);//38

WriteCommand (0x00B0);//LCD 规范
WriteSeting (0x0020);//24
WriteSetting (0x0000);
WriteSeting (0x01);//Set HDP
WriteSetting (0xDF);
WriteSetting (0x01);
WriteSetting (0x0F);
WriteSetting (0x00);

WriteCommand (0x00B4);//HSYNC
WriteSetting (0x02);
WriteSetting (0x0D);
WriteSetting (0x00);
WriteSetting (0x25);
WriteSetting (0x02);
WriteSetting (0x00);
WriteSetting (0x00);
WriteSetting (0x00);

WriteCommand (0x00B6);//VSYNC
WriteSetting (0x01);
WriteSetting (0x1E);
WriteSetting (0x00);
WriteSetting (0x08);
WriteSetting (0x01);
WriteSetting (0x00);
WriteSetting (0x00);

WriteCommand (0xB8);
WriteSeting (0x0007);//GPIO3=输入、GPIO[2:0]=输出
WriteSeting (0x0001);//GPIO0 normal

WriteCommand (0xBA);
WriteSeting (0x000D);//GPIO[3:0] OUT 1 //GPIO[1]=0、复位 G2452

WriteCommand (0x36);//旋转
//WriteSeting (0x0000);
WriteSeting (0x0020);//@Saurabh_for vertical mode display

WriteCommand (0x00F0);//像素数据接口
// WriteSeting (0x0003);
WriteSetting (0x0000);

//
//延迟1ms。
//
SysCtlDelay (26666/2);

//lcd_clear();

WriteCommand (0x00BE);//为 B/L 设置 PWM
WriteSeting (0x0001);//06频率
WriteSeting (0x00FF);//C0 Duty
WriteSeting (0x0009);//bit[3]DBC 启用、bit[0] PWM 启用
WriteSeting (0x00FF);/C0 DBC 手动亮度
WriteSeting (0x0088);//10 DBC 最低亮度
WriteSeting (0x0000);//08亮度预分频器

WriteCommand (0x00d4);
WriteSetting (0x0000);
WriteSetting (0x001C);
WriteSetting (0x0020);
WriteSetting (0x0000);
WriteSetting (0x0046);
WriteSetting (0x0050);
WriteSetting (0x0000);
WriteSeting (0x00A8);
WriteSetting (0x00C0);

WriteCommand (0x00d0);//设置 DBC 配置
//WriteSeting (0x000D);//DBC 激进模式
//WriteSeting (0x0001);//DBC 禁用
WriteSeting (0x0029);//@Saurabh

//WriteCommand (0x0021);//Enter Invert Mode

WriteCommand (0x0029);//显示打开

//
//清除显示缓冲区的内容。
//
WriteCommand (0x002A);
WriteSetting (0);
WriteSetting (0);
WriteSetting((LCD_width-1)>>8);
WriteSetting ((LCD_width-1)&0x00ff);
WriteCommand (0x002b);
WriteSetting (0);
WriteSetting (0);
WriteSetting((LCD_height-1)>8);
WriteSetting ((LCD_height-1)&0x00ff);
WriteCommand (0x002c);
for (ulCount = 0;ulCount <(LCD_width * LCD_height);ulCount++)

WriteData (0x0000);


//
//
//! 在屏幕上绘制像素。
//!
//! \param pvDisplayData 是指向此驱动程序特定数据的指针
//! 显示驱动程序。
//! \param LX 是像素的 X 坐标。
//! \param Ly 是像素的 Y 坐标。
//! "\param ulValue"是像素的颜色。
//!
//! 此函数将给定像素设置为特定颜色。 坐标
//! 的像素被认为在显示屏的范围内。
//!
//! \无返回。
//
//
静态空
Kentec480x272x16_SSD1963PixelDraw (void * pvDisplayData、Int32_t LX、Int32_t Ly、
uint32_t ulValue)

//
//设置显示光标的 X 地址。
//
WriteCommand (0x2A);
WriteSetting (Mapped_X (Lx、Ly)>>8);
WriteSetting (Mapped_X (Lx、Ly)&0xff);
WriteSetting((LCD_width-1)>>8);
WriteSetting ((LCD_width-1)&0xff);

//
//设置显示光标的 Y 地址。
//
WriteCommand (0x2B);
WriteSetting (Mapped_Y (Lx、Ly)>>8);
WriteSetting (Mapped_Y (Lx、Ly)&0xff);
WriteSetting((LCD_height-1)>8);
WriteSetting ((LCD_height-1)&0xff);

//
//写入像素值。
//
WriteCommand (0x2C);
WriteData (ulValue);

无效
Kentec480x272x16_SSD1963PixelDraw_x (长 LX、长 Ly、
无符号超长整型值)

//
//设置显示光标的 X 地址。
//
WriteCommand (0x2A);
WriteSetting (Mapped_X (Lx、Ly)>>8);
WriteSetting (Mapped_X (Lx、Ly)&0xff);
WriteSetting((LCD_width-1)>>8);
WriteSetting ((LCD_width-1)&0xff);

//
//设置显示光标的 Y 地址。
//
WriteCommand (0x2B);
WriteSetting (Mapped_Y (Lx、Ly)>>8);
WriteSetting (Mapped_Y (Lx、Ly)&0xff);
WriteSetting((LCD_height-1)>8);
WriteSetting ((LCD_height-1)&0xff);

//
//写入像素值。
//
WriteCommand (0x2C);
WriteData (ulValue);


//
//
//! 在屏幕上绘制像素的水平序列。
//!
//! \param pvDisplayData 是指向此驱动程序特定数据的指针
//! 显示驱动程序。
//! \param LX 是第一个像素的 X 坐标。
//! \param Ly 是第一个像素的 Y 坐标。
//! param lX0是像素数据中的子像素偏移、对于1有效
//! 或每像素4位格式。
//! param lCount 是要绘制的像素数。
//! \param lBPP 是每个像素的位数;必须为1、4或8。
//! \param pucData 是指向像素数据的指针。 每像素1位和4位的分辨率
//! 格式、最高有效位表示最左侧的像素。
//! \param pucPalette 是用于绘制像素的调色板的指针。
//!
//! 此函数使用在屏幕上绘制像素的水平序列
//! 提供的调色板。 对于每像素1位的格式、调色板包含
//! 预翻译颜色;对于每像素4位和8位格式、调色板
//! 包含24位 RGB 值、必须在写入前进行转换
//! 显示屏。
//!
//! \无返回。
//
//
静态空
Kentec480x272x16_SSD1963PixelDrawMultiple (void *pvDisplayData、Int32_t LX、
int32_t ly、int32_t lX0、int32_t lCount、
int32_t lBPP、
const uint8_t * pucData、
const uint8_t * pucPalette)

uint32_t ulByte;

//
//将光标增量设置为从左到右,然后从上到下。
//
WriteCommand (0x36);
WriteSetting (make_entry_mode (HORIZ_DIRECTION));

//
//设置显示光标的 X 地址。
//
WriteCommand (0x2A);
WriteSetting (Mapped_X (Lx、Ly)>>8);
WriteSetting (Mapped_X (Lx、Ly)&0xff);
WriteSetting((LCD_width-1)>>8);
WriteSetting ((LCD_width-1)&0xff);

//
//设置显示光标的 Y 地址。
//
WriteCommand (0x2B);
WriteSetting (Mapped_Y (Lx、Ly)>>8);
WriteSetting (Mapped_Y (Lx、Ly)&0xff);
WriteSetting((LCD_height-1)>8);
WriteSetting ((LCD_height-1)&0xff);


//
//写入数据 RAM 写入命令。
//
WriteCommand (0x2C);

//
//确定如何根据位数解释像素数据
//每像素。
//
开关(lBPP)

//
//像素数据采用每像素1位格式。
//
案例1:

//
//循环,同时需要绘制更多像素。
//
while (lCount)

//
//获取图像数据的下一个字节。
//
ulByte =*pucData++;

//
//循环浏览此字节图像数据中的像素。
//
for (;(lX0 < 8)&& lCount;lX0++、lCount--)

//
//以适当的颜色绘制此像素。
//
WriteData (((unsigned long *) pucPalette)[(ulByte >>
(7 - lX0))和1]);

//
//从图像数据的下一个字节开始。
//
lX0 = 0;

//
//已绘制图像数据。
//
中断;

//
//像素数据采用每像素4位格式。
//
案例4:

//
//循环,同时需要绘制更多像素。 "Duff 的器件"是
//如果的第一个半字节,则用于跳转到循环的中间
//不应使用像素数据。 Duff 的器件利用了
//案例说明在中的任何位置都是合法的
// switch 语句的子块。 请参阅
// en.wikipedia.org/.../Duff's_device 了解详细信息
//有关 Duff 设备的信息。
//
开关(lX0和1)

情况0:
while (lCount)

//
//获取下一个像素数据字节的上半字节
//并从中提取相应的条目
//调色板。
//
ulByte =(* pucData >> 4)* 3;
ulByte =(*(unsigned long *)(pucPalette + ulByte)&
0x00ffff);

//
//翻译此调色板条目并将其写入
//屏幕。
//
WriteData (DPYCOLORTRANSLATE (ulByte));

//
//减少要绘制的像素数。
//
lCount--;

//
//查看是否有另一个像素要绘制。
//
if (lCount)

案例1:
//
//获取下一个像素字节的低半字节
//数据并从中提取相应的条目
//调色板。
//
ulByte =(* pucData++& 15)* 3;
ulByte =(*(unsigned long *)(pucPalette + ulByte)&
0x00ffff);

//
//翻译此调色板条目并将其写入
//屏幕。
//
WriteData (DPYCOLORTRANSLATE (ulByte));

//
//减少要绘制的像素数。
//
lCount--;


//
//已绘制图像数据。
//
中断;

//
//像素数据采用每像素8位格式。
//
案例8:

//
//循环,同时需要绘制更多像素。
//
while (lCount---)

//
//获取下一个字节的像素数据并提取
//调色板中的相应条目。
//
ulByte =* pucData++* 3;
ulByte =*(unsigned long *)(pucPalette + ulByte)& 0x00ffff;

//
//翻译此调色板条目并将其写入屏幕。
//
WriteData (DPYCOLORTRANSLATE (ulByte));

//
//已绘制图像数据。
//
中断;

// UARTprintf ("\n\Draw Multi Pixel finish \n");

//
//
//! 绘制水平线。
//!
//! \param pvDisplayData 是指向此驱动程序特定数据的指针
//! 显示驱动程序。
//! \param LX1是直线起点的 X 坐标。
//! \param lX2是直线末端的 X 坐标。
//! {\f2 \param Ly}是直线的{\f2 Y}坐标。
//! "\param ulValue"是线条的颜色。
//!
//! 此功能在显示屏上绘制水平线。 的坐标
//! 假定该行在显示屏的范围内。
//!
//! \无返回。
//
//
静态空
Kentec480x272x16_SSD1963LineDrawH (void *pvDisplayData、Int32_t LX1、Int32_t lX2、
int32_t Ly、uint32_t ulValue)

//
//将光标增量设置为从左到右,然后从上到下。
//
WriteCommand (0x36);
WriteSetting (make_entry_mode (HORIZ_DIRECTION));

//
//设置显示光标的 X 地址。
//
WriteCommand (0x2A);
WriteSetting (Mapped_X (LX1、Ly)>>8);
WriteSeting (Mapped_X (LX1、Ly)&0xff);
WriteSetting((LCD_width-1)>>8);
WriteSetting ((LCD_width-1)&0xff);

//
//设置显示光标的 Y 地址。
//
WriteCommand (0x2B);
WriteSetting (Mapped_Y (LX1、Ly)>>8);
WriteSeting (Mapped_Y (LX1、Ly)&0xff);
WriteSetting((LCD_height-1)>8);
WriteSetting ((LCD_height-1)&0xff);


//
//写入数据 RAM 写入命令。
//
WriteCommand (0x2C);

//
//循环显示该水平线的像素。
//
while (LX1+<= lX2)

//
//写入像素值。
//
WriteData (ulValue);

//UARTprintf ("\n\Draw Horiz finish %d \n",make_entry_mode (HORIZ_DIRECTION));

//
//
//! 绘制垂直线。
//!
//! \param pvDisplayData 是指向此驱动程序特定数据的指针
//! 显示驱动程序。
//! \param LX 是直线的 X 坐标。
//! \param ly1是线起点的 Y 坐标。
//! \param LY2是直线末端的 Y 坐标。
//! "\param ulValue"是线条的颜色。
//!
//! 此功能在显示屏上绘制垂直线。 的坐标
//! 线被认为在显示屏的范围内。
//!
//! \无返回。
//
//
静态空
Kentec480x272x16_SSD1963LineDrawV (void *pvDisplayData、Int32_t LX、Int32_t lY1、
int32_t LY2、uint32_t ulValue)

//
//将光标增量设置为从上到下,然后设置为从左到右。
//
WriteCommand (0x36);
WriteSetting (make_entry_mode (vert 方向));

//
//设置显示光标的 X 地址。
//
WriteCommand (0x2A);
WriteSetting (Mapped_X (Lx、lY1)>>8);
WriteSetting (Mapped_X (Lx、lY1)&0xff);
WriteSetting((LCD_width-1)>>8);
WriteSetting ((LCD_width-1)&0xff);

//
//设置显示光标的 Y 地址。
//
WriteCommand (0x2B);
WriteSetting (Mapped_Y (Lx、lY1)>>8);
WriteSetting (Mapped_Y (Lx、lY1)&0xff);
WriteSetting((LCD_height-1)>8);
WriteSetting ((LCD_height-1)&0xff);


//
//写入数据 RAM 写入命令。
//
WriteCommand (0x2C);

//
//循环显示该垂直线的像素。
//
while (lY1+<= LY2)

//
//写入像素值。
//
WriteData (ulValue);

//UARTprintf ("\n\Draw Vertical Over \n");

//
//
//! 填充矩形。
//!
//! \param pvDisplayData 是指向此驱动程序特定数据的指针
//! 显示驱动程序。
//! \param pRect 是指向描述矩形的结构的指针。
//! Param ulValue 是矩形的颜色。
//!
//! 此函数用于填充显示屏上的矩形。 的坐标
//! 假设矩形在显示屏和的范围内
//! 矩形规范是完全包含在内的(换句话说、sXMin 和
//! 绘制了 sXMax 以及 sYMin 和 sYMax)。
//!
//! \无返回。
//
//
静态空
Kentec480x272x16_SSD1963RectFill (void *pvDisplayData,const tRectangle *pRect,
uint32_t ulValue)

long lCount_x、lCount_y;
// unsigned int HDP_S=799;
// unsigned int VDP_S=479;

//
///将光标增量设置为从上到下,然后设置为从左到右。
//
WriteCommand (0x36);
WriteSetting (make_entry_mode (HORIZ_DIRECTION));


//
//将显示光标设置为矩形左上角(在应用程序中)
//坐标空间)。
//
WriteCommand (0x2A);
WriteSetting (Mapped_X (pRect->i16XMin、pRect->i16YMin)>>8);
WriteSetting (Mapped_X (pRect->i16XMin、pRect->i16YMin)&0xff);
#if (定义的纵向)||(定义的横向)
WriteSetting (Mapped_X (pRect->i16XMax、pRect->i16YMax)>8);
WriteSetting (Mapped_X (pRect->i16XMax、pRect->i16YMax)&0xff);

其他
WriteSetting (Mapped_X (pRect->i16XMin、pRect->i16YMin)>>8);
WriteSetting (Mapped_X (pRect->i16XMin、pRect->i16YMin)&0xff);

#endif

WriteCommand (0x2B);
WriteSetting (Mapped_Y (pRect->i16XMin、pRect->i16YMin)>>8);
WriteSetting (Mapped_Y (pRect->i16XMin、pRect->i16YMin)&0xff);
#if (定义的横向翻转)||(定义的纵向)
WriteSetting((Mapped_Y(pRect->i16XMin,pRect->i16YMin)|
(Mapped_Y (pRect->i16XMax、pRect->i16YMax)<<8);
WriteSetting((Mapped_Y(pRect->i16XMin,pRect->i16YMin)|
(Mapped_Y (pRect->i16XMax、pRect->i16YMax)<<8))&0xff);

其他
WriteSetting((Mapped_Y(pRect->i16XMax, pRect->i16YMax)|
(Mapped_Y(pRect->i16XMin、pRect->i16YMin)<<8);
WriteSetting((Mapped_Y(pRect->i16XMax, pRect->i16YMax)|
(Mapped_Y (pRect->i16XMin、pRect->i16YMin)<<8))&0xff);

#endif

//
//告诉控制器我们要将数据写入其 RAM 中。
//
WriteCommand (0x2C);

//
//循环显示此填充矩形的像素。
//
// for (lCount =((pRect->sXMax - pRect->sXMin + 1)*
//(pRect->sYMax - pRect->sYMin + 1);lCount >= 0;lCount-)
for (lCount_y =(pRect->i16YMax - pRect->i16YMin);lCount_y >= 0;lCount_y-)
{for (lCount_x =(pRect->i16XMax - pRect->i16XMin);lCount_x >= 0;lCount_x--)
//
//写入像素值。
//
WriteData (ulValue);

//
//
//! 将24位 RGB 颜色转换为特定于显示驱动程序的颜色。
//!
//! \param pvDisplayData 是指向此驱动程序特定数据的指针
//! 显示驱动程序。
//! "param ulValue"是24位 RGB 颜色。 最低有效字节是
//! 蓝色通道、下一个字节是绿色通道、第三个字节是
//! 红色通道。
//!
//! 此函数将24位 RGB 颜色转换为可能的值
//! 写入到显示屏的帧缓冲器中、以便重现该颜色、
//! 或该颜色的近似值。
//!
//! 返回显示驱动程序特定的颜色。
//
//
静态 uint32_t
Kentec480x272x16_SSD1963ColorTransate (void * pvDisplayData、
uint32_t ulValue)

//
//从24位 RGB 颜色转换为5-6-5 RGB 颜色。
//
RETURN (DPYCOLORTRANSLATE (ulValue));

//
//
//! 清空任何缓存的绘图操作。
//!
//! \param pvDisplayData 是指向此驱动程序特定数据的指针
//! 显示驱动程序。
//!
//! 此函数将任何缓存的绘图操作刷新到显示。 这种情况
//! 当局部帧缓冲器用于绘图操作时、和很有用
//! FLUSH 会将本地帧缓冲区复制到显示屏。 策略性污水排放计划
//! 驱动器、刷新是不操作。
//!
//! \无返回。
//
//
静态空
Kentec480x272x16_SSD1963Flush (void * pvDisplayData)

//
//没有任何事情要做。
//

//
//
//! 描述 Kentec Display 驱动程序的显示结构
//! 具有 SSD1963控制器的 K430WQC-V3-F TFT 面板。
//
//
const tDisplay g_sLcd480x272x16_8bit =

sizeof (tDisplay)、
0、
#if defined (纵向)|| defined (纵向)
LCD_Height、
LCD_width、
其他
LCD_width、
LCD_Height、
#endif
Kentec480x272x16_SSD1963PixelDraw、
Kentec480x272x16_SSD1963PixelDrawMultiple、
Kentec480x272x16_SSD1963LineDrawH、
Kentec480x272x16_SSD1963LineDrawV、
Kentec480x272x16_SSD1963RectFill、
Kentec480x272x16_SSD1963ColorTransate、
Kentec480x272x16_SSD1963Flush
};

//
//
//关闭 Doxygen 组。
//! @}
//
//

Kentec480x272x16_SSD1963_8bit.h

//
//
// Kentec480x272x16_ssd2119_8bit.h - Kentec K430WQC-V3-F/FF 的原型
//具有 SSD1963的显示驱动程序
//控制器。
//
//

#ifndef __KENTEC480X272X16_SSD1963_8bit_H__
#define __KENTEC480X272X16_SSD1963_8bit_H__

//
//
SRAM/Flash 子中 LCD 控制寄存器的//位定义
//板。
//
//
#define LCD_CONTRAL_nRESET 0x04
#define LCD_CONTRAL_YN 0x02
#define LCD_CONTRAL_XN 0x01

//
//读取起始位。 这与到的 LCD_COMMAND_PORT 或 LCD_DATA_PORT 进行或运算
//从 LCD 控制器启动读取请求。
//
#define LCD_READ_START 0x00000004

//
//
//此驱动程序导出的全局变量的原型。
//
//
extern void Kentec480x272x16_SSD1963Init (void);
extern const tDisplay g_sLcd480x272x16_8bit;
extern void Kentecx480x272x16_SSD1963SetLCDControl (无符号字符 ucMask、
unsigned char ucVal);
extern unsigned long Kentec480x272x16_SSD1963PixelRead (long Lx、long Ly);
extern void Kentec480x272x16_SSD1963PixelDraw_x (long Lx、long Ly、unsigned long ulValue);
extern void LCD_backlight_on (void);
extern void LCD_backlight_off (void);

#endif //__KENTEC480X272X16_SSD1963_H__

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我在 e2e 论坛中搜索是否有有关 TM4C 纵向模式中 Kentec 的文章、很遗憾我找不到、我自己也没有太多 LCD 体验。 可能不会产生影响、我想知道是否真正定义了纵向模式。 您能否注释或删除红色的所有行、然后重试?  

    #if! 已定义(纵向)&&! 已定义(纵向翻转)&&\
    !! 已定义(横向)&&! 已定义(横向翻转)
    //#define Landscape
    #define 纵向
    #endif

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    蔡 国荣、

    感谢您的回答。

    我也尝试过同样的方法、但运气不好。

    我需要了解如何使用横向配置初始化 LCD 的代码流程、非常感谢您在这方面提供的任何帮助。

    此致

    Saurabh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Saurabh、

    根据我所做的研究、此驱动程序似乎由 Kentec 自己提供、最初是为 EK-TM4C123GXL 设置的。 我查看了该固件包与您为 TM4C1294CNPDT 提供的固件包。 我没有太多人认为会引起问题的东西、比如你描述的。

    您能否使用 EK-TM4C123GXL 尝试使用 Kentac 显示、并验证纵向模式与为 EK-TM4C123GXL 提供的驱动程序是否按预期工作? 由于这不是我们发布的内容(据我所知、如果错误、请纠正我)、我不想假设到1294C 的端口导致了问题。