⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hdc1600.c

📁 Display driver for Hyvix HDC1600 LCD controller in Keil C for 8051
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
*************************************************************************************************
*		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 + -