📄 hdc1600.c
字号:
/*
*************************************************************************************************
* CM50012ACT6 65k color Graphical LCD Display Driver (HYVIX HDC1600 controller)
* All Rights Reserved
* File name : hdc1600.c
* Programmer : John Leung, TechToys Co. Hong Kong
* Web presence : www.TechToys.com.hk
* Note :
* Language : Keil C (C51) compiler, Eval version 7.09 under uVision2 IDE v2.40
* Hardware : AT89S8253-cLCD-STK1, & CM50010ACT6_BO
* Date : 24th August 2007
* Version : 1.0
*************************************************************************************************
* DESCRIPTION
*
* This module provides an interface to CM50012ACT6 65k color graphical LCD module of 128x160dots
* Display controller chip is Hyvix HDC1600
* Module requires 3.3V DC supply to Vdd, LED backlight requires 6.2-6.5V, 15mA typical
*
* LCD pinout function summarized as below
* --------- LCD MCU -----------------
* pin 1 LED-K - GND (Cathode for LED-backlight)
* pin 2 LED+A - LED backlight, requires 6.2-6.5V, 15mA typical
* pin 3 Vss - GND
* pin 4 Vdd - 3.3V Supply
* pin 5 n.c. - shunt to ground
* pin 6 n.c.
* pin 7 CS - chip select, low active
* pin 8 RST - reset, low active; wired to manual reset switch of the whole system
* pin 9 A0 - (H:Data, L:Command (data or command control))
* pin 10 WR - active low, L:Write; use with RD pin
* pin 11 RD - active low, L:Read; use with WR pin
* pin 12:19 D7:D0 - LCD_DATA
* pin 20 - Vss
***********************************************************************************************
*/
#include <REG51RB2.H>
#include <delay.h>
#include "hdc1600.h"
#if PIXEL_FONT_EN
#include "sysfont.h"
#endif
/*
*********************************************************************************************************
* LOCAL DEFINITIONS
*********************************************************************************************************
*/
#define OUTPUT 0
#define INPUT 1
#define HIGH 1
#define LOW 0
#define OSCILLATION_MODE_SET 0x02
#define DRIVER_OUTPUT_MODE_SET 0x10
#define BOOST_COEF_SET 0x22
#define DCDC_CLK_FREQ_SET 0x24 //DC-DC Clock division set
#define DCDC_AMP_ON_OFF_SET 0x26
#define TEMP_COMPENSATION_SET 0x28
#define CONTRAST_CONTROL3 0x29
#define CONTRAST_CONTROL1 0x2A
#define CONTRAST_CONTROL2 0x2B
#define STANDBY_MODE_OFF 0x2C
#define STANDBY_MODE_ON 0x2D
#define DDRAM_BURST_MODE_OFF 0x2E
#define DDRAM_BURST_MODE_ON 0x2F
#define N_LINE_INVERSION_SET 0x34
#define FRAME_FREQUENCY_CONTROL_SET 0x36
#define ENTRY_MODE_SET 0x40
#define X_ADDRESS_AREA_SET 0x42
#define Y_ADDRESS_AREA_SET 0x43
#define CURRENT_BIAS_SET 0x46
#define DISPLAY_OFF 0x50
#define DISPLAY_ON 0x51
#define SPEC_DISPLAY_PATTERN_SET 0x53
#define PARTIAL_DISPLAY_MODE_SET 0x55
#define PARTIAL_DISPLAY_1_START_LINE 0x56
#define PARTIAL_DISPLAY_1_END_LINE 0x57
#define SCROLL_START_1_MEM_SET 0x5A
#define MPE_MODE_OFF 0x5C
#define MPE_MODE_ON 0x5D
#define PARTIAL_DISPLAY_2_START_LINE 0x60
#define PARTIAL_DISPLAY_2_END_LINE 0x62
#define SCROLL_START_2_MEM_SET 0x64
#define COMMON_SCAN_MODE_SET 0x66
#define COMMON_SCAN_MODE_OFF 0x67
#define Y_ADDRESS_DEC_SET 0x68
#define Y_ADDRESS_DEC_OFF 0x69
#define BLANK_TIME_SET 0x6A
#define RED_PALETTE_SET 0x70
#define GREEN_PALETTE_SET 0x71
#define BLUE_PALETTE_SET 0x72
/*
*********************************************************************************************************
* LOCAL FUNCTIONS PROTOTYPE
*********************************************************************************************************
*/
static void cDispRstArea(void);
/*
*********************************************************************************************************
* RESET DISPLAY AREA TO 128*160 MATRIX
*
* Description : This function resets the display area to 128*160 matrix, local function
* Arguments : none
*
* Returns : none
* Note : This function is a local function.
* Dependency on cDispWrCmd(DRIVER_OUTPUT_MODE_SET) under cDispInit() because
* display direction changed on SDIR, and CDR=0 (by hardware).
*********************************************************************************************************
*/
static void cDispRstArea(void)
{
cDispWrCmd(X_ADDRESS_AREA_SET); //X-address counter set, offset from 0~159 for 160 dots
cDispWrCmd(0);
cDispWrCmd(159);
cDispWrCmd(Y_ADDRESS_AREA_SET); //Y-address counter set, offset from 0~127 for 128 dots
cDispWrCmd(0);
cDispWrCmd(127);
}
/*
*********************************************************************************************************
* DISPLAY INITIALIZATION
*
* Description : This function initializes the LCD module
* Arguments : none
*
* Returns : none
* Note : This function should be called once before any of the other functions
*********************************************************************************************************
*/
void cDispInit(void)
{
//INT8U p;
cDispInitPort();
cDispWrCmd(STANDBY_MODE_OFF); //Standby mode off
cDispWrCmd(DCDC_CLK_FREQ_SET); //DC-DC clock freq. set 12kHz
cDispWrCmd(0x03);
cDispWrCmd(FRAME_FREQUENCY_CONTROL_SET);//Main clock frequency set (90Hz)
cDispWrCmd(0x12); //1A:1.2+(0.025*1AH) = 1.85MHz
//Frame rate :1/(128*160*(1/1.85M))=90Hz
cDispWrCmd(OSCILLATION_MODE_SET); //oscillator mode set
cDispWrCmd(0x05); //Internal DC-DC clock input
//internal DCDC osc. ON, internal main clock input, internal osc ON
cDispSetQuali(BRIGHTNESS, CONTRAST);
cDispWrCmd(CURRENT_BIAS_SET);
cDispWrCmd(0x07);
cDispWrCmd(BOOST_COEF_SET);
cDispWrCmd(0x06);
cDispWrCmd(TEMP_COMPENSATION_SET); //set the temperature compensation ratio
cDispWrCmd(0x00);
cDispWrCmd(DRIVER_OUTPUT_MODE_SET); //SDIR=0(Y-address 00H to 7FH), SWP=0 (normal state, D7-D0 or D15-D0 written
cDispWrCmd(0x20); //to the RAM as it is the initial state
cDispWrCmd(DDRAM_BURST_MODE_ON); //burst mode ON for data RAM write
cDispWrCmd(ENTRY_MODE_SET); //entry mode set, non-reverse, X address count mode, automatic address increment
cDispWrCmd(0x00);
cDispWrCmd(COMMON_SCAN_MODE_SET);
cDispWrCmd(DCDC_AMP_ON_OFF_SET);
cDispWrCmd(0x0F);
cDispRstArea();
cDispWrCmd(SPEC_DISPLAY_PATTERN_SET); //normal display
cDispWrCmd(0x00);
cDispWrCmd(PARTIAL_DISPLAY_MODE_SET); //partial display normal disabled
cDispWrCmd(0x00);
cDispWrCmd(MPE_MODE_OFF);
cDispWrCmd(Y_ADDRESS_DEC_SET);
cDispWrCmd(0x00);
cDispWrCmd(BLANK_TIME_SET);
cDispWrCmd(0x00);
cDispWrCmd(0x00);
//For sack of saving program space, palette setting below is not used for Keil C 2k limit
/*
// RED
p = PALETTE_RED;
cDispWrCmd(RED_PALETTE_SET);
cDispWrCmd(0);
cDispWrCmd(10+p);
cDispWrCmd(18+p);
cDispWrCmd(24+p);
cDispWrCmd(28+p);
cDispWrCmd(32+p);
cDispWrCmd(35+p);
cDispWrCmd(38+p);
cDispWrCmd(41+p);
cDispWrCmd(44+p);
cDispWrCmd(47+p);
cDispWrCmd(50+p);
cDispWrCmd(53+p);
cDispWrCmd(56+p);
cDispWrCmd(59+p);
cDispWrCmd(62+p);
cDispWrCmd(65+p);
cDispWrCmd(68+p);
cDispWrCmd(71+p);
cDispWrCmd(74+p);
cDispWrCmd(77+p);
cDispWrCmd(80+p);
cDispWrCmd(83+p);
cDispWrCmd(86+p);
cDispWrCmd(89+p);
cDispWrCmd(92+p);
cDispWrCmd(95+p);
cDispWrCmd(99+p);
cDispWrCmd(103+p);
cDispWrCmd(109+p);
cDispWrCmd(117+p);
cDispWrCmd(127);
// BLUE
p = PALETTE_BLUE;
cDispWrCmd(BLUE_PALETTE_SET);
cDispWrCmd(0);
cDispWrCmd(10+p);
cDispWrCmd(18+p);
cDispWrCmd(24+p);
cDispWrCmd(28+p);
cDispWrCmd(32+p);
cDispWrCmd(35+p);
cDispWrCmd(38+p);
cDispWrCmd(41+p);
cDispWrCmd(44+p);
cDispWrCmd(47+p);
cDispWrCmd(50+p);
cDispWrCmd(53+p);
cDispWrCmd(56+p);
cDispWrCmd(59+p);
cDispWrCmd(62+p);
cDispWrCmd(65+p);
cDispWrCmd(68+p);
cDispWrCmd(71+p);
cDispWrCmd(74+p);
cDispWrCmd(77+p);
cDispWrCmd(80+p);
cDispWrCmd(83+p);
cDispWrCmd(86+p);
cDispWrCmd(89+p);
cDispWrCmd(92+p);
cDispWrCmd(95+p);
cDispWrCmd(99+p);
cDispWrCmd(103+p);
cDispWrCmd(109+p);
cDispWrCmd(117+p);
cDispWrCmd(127);
// GREEN
p = PALETTE_GREEN;
cDispWrCmd(GREEN_PALETTE_SET);
cDispWrCmd(0);
cDispWrCmd(5+p);
cDispWrCmd(10+p);
cDispWrCmd(14+p);
cDispWrCmd(18+p);
cDispWrCmd(21+p);
cDispWrCmd(24+p);
cDispWrCmd(26+p);
cDispWrCmd(28+p);
cDispWrCmd(30+p);
cDispWrCmd(32+p);
cDispWrCmd(34+p);
cDispWrCmd(35+p);
cDispWrCmd(37+p);
cDispWrCmd(38+p);
cDispWrCmd(40+p);
cDispWrCmd(41+p);
cDispWrCmd(43+p);
cDispWrCmd(44+p);
cDispWrCmd(46+p);
cDispWrCmd(47+p);
cDispWrCmd(49+p);
cDispWrCmd(50+p);
cDispWrCmd(52+p);
cDispWrCmd(53+p);
cDispWrCmd(55+p);
cDispWrCmd(56+p);
cDispWrCmd(58+p);
cDispWrCmd(59+p);
cDispWrCmd(61+p);
cDispWrCmd(62+p);
cDispWrCmd(63+p);
cDispWrCmd(64+p);
cDispWrCmd(65+p);
cDispWrCmd(67+p);
cDispWrCmd(68+p);
cDispWrCmd(70+p);
cDispWrCmd(71+p);
cDispWrCmd(73+p);
cDispWrCmd(74+p);
cDispWrCmd(76+p);
cDispWrCmd(77+p);
cDispWrCmd(79+p);
cDispWrCmd(80+p);
cDispWrCmd(82+p);
cDispWrCmd(83+p);
cDispWrCmd(85+p);
cDispWrCmd(86+p);
cDispWrCmd(88+p);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -