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__