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

📄 lcd.h

📁 在LCD显示器上显示灰度图象
💻 H
字号:
/*********************************************************************************************
* File:	LCD.H
* Author:	embest	
* Desc:	LCD common macro define and function declare
* History:	
*********************************************************************************************/
#ifndef __LCD_H__
#define __LCD_H__

#include "def.h"

/*------------------------------------------------------------------------------------------*/
/*	 								macro define						 				    */
/*------------------------------------------------------------------------------------------*/
/* screen size */
#define TLCD_160_240		(0)
#define VLCD_240_160		(1)
#define CLCD_240_320		(2)
#define MLCD_320_240		(3)
#define ELCD_640_480		(4)
#define SLCD_160_160		(5)
#define LCD_TYPE			MLCD_320_240

#if(LCD_TYPE==TLCD_160_240)
#define SCR_XSIZE 			(160)  
#define SCR_YSIZE 			(240)
#define LCD_XSIZE 			(160)
#define LCD_YSIZE 			(240)
#elif(LCD_TYPE==VLCD_240_160)
#define SCR_XSIZE 			(240)  
#define SCR_YSIZE 			(160)
#define LCD_XSIZE 			(240)
#define LCD_YSIZE 			(160)
#elif(LCD_TYPE==CLCD_240_320)
#define SCR_XSIZE 			(240)  
#define SCR_YSIZE 			(320)
#define LCD_XSIZE 			(240)
#define LCD_YSIZE 			(320)
#elif(LCD_TYPE==MLCD_320_240)
#define SCR_XSIZE 			(320)  
#define SCR_YSIZE 			(240)
#define LCD_XSIZE 			(320)
#define LCD_YSIZE 			(240)
#elif(LCD_TYPE==ELCD_640_480)
#define SCR_XSIZE 			(640)  
#define SCR_YSIZE 			(480)
#define LCD_XSIZE 			(640)
#define LCD_YSIZE 			(480)
#elif(LCD_TYPE==SLCD_160_160)
#define SCR_XSIZE 			(160)  
#define SCR_YSIZE 			(160)
#define LCD_XSIZE 			(160)
#define LCD_YSIZE 			(160)
#endif

/* screen color */
#define MODE_MONO 			(1)
#define MODE_GREY4			(4)
#define MODE_GREY16 		(16)
#define MODE_COLOR 			(256)

#define Ascii_W 			8
#define XWIDTH 				6
#define BLACK 				0xf
#define WHITE 				0x0
#define LIGHTGRAY   		0x5
#define DARKGRAY    		0xa
#define TRANSPARENCY 		0xff

#define HOZVAL				(LCD_XSIZE/4-1)
#define HOZVAL_COLOR		(LCD_XSIZE*3/8-1)
#define LINEVAL				(LCD_YSIZE -1)
#define MVAL				(13)
#define M5D(n)				((n) & 0x1fffff)
#define MVAL_USED 			0

/* array size */
#define ARRAY_SIZE_MONO 	(SCR_XSIZE/8*SCR_YSIZE)
#define ARRAY_SIZE_GREY4   	(SCR_XSIZE/4*SCR_YSIZE)
#define ARRAY_SIZE_GREY16  	(SCR_XSIZE/2*SCR_YSIZE)
#define ARRAY_SIZE_COLOR 	(SCR_XSIZE/1*SCR_YSIZE)

/* clkval */
#define CLKVAL_MONO 		(12)
#define CLKVAL_GREY4 		(12)
#define CLKVAL_GREY16 		(12)
#define CLKVAL_COLOR 		(10)

/************************************************
因为是灰色的,只有16色,每两个象素占用一个字节,
所以定义LCD缓冲区的大小为SCR_XSIZE*SCR_YSIZE/2。
************************************************/
#define LCD_BUF_SIZE		(SCR_XSIZE*SCR_YSIZE/2)
#define LCD_ACTIVE_BUFFER	(0xc300000)
#define LCD_VIRTUAL_BUFFER 	(0xc300000 + LCD_BUF_SIZE)

#define LCD_PUT_PIXEL(x, y, c) \
	(*(UINT32T *)(LCD_VIRTUAL_BUFFER+ (y) * SCR_XSIZE / 2 + ( (x)) / 8 * 4)) = \
	(*(UINT32T *)(LCD_VIRTUAL_BUFFER+ (y) * SCR_XSIZE / 2 + ( (x)) / 8 * 4)) & \
	(~(0xf0000000 >> ((( (x))%8)*4))) |((c) << (7 - ( (x))%8) * 4)
#define LCD_ACTIVE_PUT_PIXEL(x, y, c)	\
	(*(UINT32T *)(LCD_ACTIVE_BUFFER + (y) * SCR_XSIZE / 2 + (319 - (x)) / 8 * 4)) = \
	(*(UINT32T *)(LCD_ACTIVE_BUFFER + (y) * SCR_XSIZE / 2 + (319 - (x)) / 8 * 4)) & \
	(~(0xf0000000 >> (((319 - (x))%8)*4))) |((c) << (7 - (319 - (x))%8) * 4)

#define GUISWAP(a, b){a^=b; b^=a; a^=b;}

/*------------------------------------------------------------------------------------------*/
/*	 								function declare						 				    */
/*------------------------------------------------------------------------------------------*/
void  lcd_init(void);
void  lcd_clr(void);
void  lcd_test(void);
void  lcd_dma_trans(void);
void  lcd_clr_rect(INT16T usLeft, INT16T usTop, INT16T usRight, INT16T usBottom, UINT8T ucColor);
void  lcd_draw_box(INT16T usLeft, INT16T usTop, INT16T usRight, INT16T usBottom, UINT8T ucColor);
void  lcd_draw_circle(INT16T Ox,INT16T Oy,UINT16T Rx,UINT8T ucColor);
void  lcd_draw_line(INT16T usX0, INT16T usY0, INT16T usX1, INT16T usY1, UINT8T ucColor, UINT16T usWidth);
void  lcd_draw_hline(INT16T usX0, INT16T usX1, INT16T usY0, UINT8T ucColor, UINT16T usWidth);
void  lcd_draw_vline(INT16T usY0, INT16T usY1, INT16T usX0, UINT8T ucColor, UINT16T usWidth);
void  lcd_anti_disp(UINT16T usX0, UINT16T usY0, UINT16T usX1, UINT16T usY1);
void  lcd_display_char(UINT16T usX0, UINT16T usY0, UINT8T ucChar);
void  lcd_display_string(UINT16T usX0, UINT16T usY0, UINT8T *pucStr);
void  lcd_display_short(INT16T sX, INT16T sY, UINT16T usInt);
void  zdma0_done(void) __attribute__ ((interrupt ("IRQ")));
void  lcd_disp_ascii6x8(UINT16T usX0, UINT16T usY0,UINT8T ForeColor, UINT8T* pucChar);
void  lcd_disp_ascii8x16(UINT16T x0, UINT16T y0, UINT8T ForeColor, UINT8T* s);
void  lcd_dsp_hz16(UINT16T x0, UINT16T y0, UINT8T ForeColor, UINT8T *s);
void  reverse_line(UINT32T ulHeight, UINT32T ulY);
UINT8T lcd_getpixel(UINT16T usX, UINT16T usY);

#endif /* __LCD_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -