📄 lcd.c
字号:
#include "..\inc\44b.h"
//#include "..\inc\44blib.h"
#define INT32U unsigned int
#define INT16U unsigned short
#define S32 int
#define S16 short int
#define INT8U unsigned char
#define INT16 short
void GUISWAP(INT16 * usY1,INT16 * usY0)
{ short M;
M=* usY1;
*usY1=*usY0;
*usY0=M;
return 0;
}
/*******************************************
s3sev40 lcd像素显示宏定义
lcd_PutPixel(x,y,c)-----把像素发送到显示数据暂存区
lcd_Active_PutPixel-----发送到显示缓冲区(直接驱动lcd)
**********************************/
#define LCD_PutPixel(x,y,c) \
(*(INT32U *)(LCD_VIRTUAL_BUFFER+(y)*SCR_XSIZE/2+((x))/8*4))=\
(*(INT32U *)(LCD_VIRTUAL_BUFFER+(y)*SCR_XSIZE/2+((x))/8*4))&\
(~(0xf0000000>>((((x))%8)*4)))|((c)<<(7-((x))%8)*4)
#define LCD_Active_PutPixel(x,y,c) \
(*(INT32U *)(LCD_ACTIVE_BUFFER+(y)*SCR_XSIZE/2+(319-(x))/8*4))=\
(*(INT32U *)(LCD_ACTIVE_BUFFER+(y)*SCR_XSIZE/2+(319-(x))/8*4))&\
(~(0xf0000000>>(((319-(x))%8)*4)))|((c)<<(7-(319-(x))%8)*4)
/*****************************************
*Embest arm教学系统软件宏定义
*****************************************/
#define M5D(n) ((n)&0x1fffff) //高3位清0宏
#define BLACK 0XF
#define WHITE 0X0
/*****************************************
*S3C44B0X的lcd控制寄存器访问地址
*******************************************/
/*#define rLCDCIN1 (*(voatile unsigned *)0x1f00000)
#define rLCDCIN2 (*(voatile unsigned *)0x1f00004)
#define rLCDCIN3 (*(voatile unsigned *)0x1f00040)
#define rLCDSADDR1 (*(voatile unsigned *)0x1f00008)
#define rLCDSADDR2 (*(voatile unsigned *)0x1f0000c)
#define rLCDSADDR3 (*(voatile unsigned *)0x1f00010)
#define rREDLUT (*(voatile unsigned *)0x1f00014)
#define rGREENLUT (*(voatile unsigned *)0x1f00018)
#define rBLUELUT (*(voatile unsigned *)0x1f0001c)
#define rDP1_2 (*(voatile unsigned *)0x1f00020)
#define rDP4_7 (*(voatile unsigned *)0x1f00024)
#define rDP3_5 (*(voatile unsigned *)0x1f00028)
#define rDP2_3 (*(voatile unsigned *)0x1f0002c)
#define rDP5_7 (*(voatile unsigned *)0x1f00030)
#define rDP3_4 (*(voatile unsigned *)0x1f00034)
#define rDP4_5 (*(voatile unsigned *)0x1f00038)
#define rDP6_7 (*(voatile unsigned *)0x1f0003c)
#define rDITHMODE (*(voatile unsigned *)0x1f00044)*/
/********************************************
s3cev40实验系统的lcd属性定义
********************************************/
#define MLCD_320_240 (3)
#define LCD_TYPE MLCD_320_240
#define SCR_XSIZE (320)
#define SCR_YSIZE (240)
#define LCD_XSIZE (320)
#define LCD_YSIZE (240)
/*********************************************
*s3c44b0x的lcd控制器宏定义
************************************************/
#define MIDE_GREY16 (13)
#define CLKVAL_GREY16 (12)
#define HOZVAL (LCD_XSIZE/4-1)
#define LINEVAL (LCD_YSIZE-1)
#define MVAL (13)
#define MVAL_USED 0
/**********************************************
*embest arm教学系统的lcd显示缓冲区
***********************************************/
#define ARRAY_SIZE_GREY16 (SCR_XSIZE/2*SCR_YSIZE)
#define LCD_BUF_SIZE (SCR_XSIZE*SCR_YSIZE/2)
#define LCD_ACTIVE_BUFFER (0XC400000)
#define LCD_VIRTUAL_BUFFER (0XC400000+LCD_BUF_SIZE)
/************************************************
*函数名:Lcd_Init()
*功能: 初始化lcd控制器
*参数: 无
*返回: 无
**************************************************/
void Lcd_Init(void)
{
rDITHMODE= 0X1223a;
rDP1_2 = 0x5a5a;
rDP4_7 = 0x366cd9b;
rDP3_5 = 0xda5a7;
rDP2_3 = 0xad7;
rDP5_7 = 0xfeda5b7;
rDP3_4 = 0xebd7;
rDP4_5 = 0xebfd7;
rDP6_7 = 0x7efdfbf;
/*---------------LCDCON1控制字清0----------------*/
rLCDCON1=(0)|(1<<5)|(MVAL_USED<<7)|(0X3<<8)|(0X3<<10)|(CLKVAL_GREY16<<12);
/*---------------LCDCON2控制字设置lcd分辨率320*240,水平线扫描空闲时间10mclk----------------*/
rLCDCON2=(LINEVAL)|(HOZVAL<<10)|(10<<21);
/*---------------LCDSADDR1-3为帧缓冲区起始地址----------------*/
rLCDSADDR1=(0X2<<27)|(((LCD_ACTIVE_BUFFER>>22)<<21)|M5D(LCD_ACTIVE_BUFFER>>1));
/*---------------设置:16级灰度,LCDBANK,LCDBDEU----------------*/
rLCDSADDR2=M5D(((LCD_ACTIVE_BUFFER+(SCR_XSIZE*LCD_YSIZE/2))>>1))|(MVAL<<21);
rLCDSADDR3=(LCD_XSIZE/4)|(((SCR_XSIZE-LCD_XSIZE)/4)<<9);
//重新设置lcdcon1:4位单扫描模式;WDLY=8CLK,WLH=8CLK
rLCDCON1=(1)|(1<<5)|(MVAL_USED<<7)|(0X3<<8)|(0X3<<10)|(CLKVAL_GREY16<<12);
rBLUELUT=0xfa40;
/*---------------LCD驱动逻辑使能,打开背光----------------*/
rPDATE=rPDATE&0X0e;
}
/************************************************
//函数名 Lcd_Clr()
//功能 清显示屏
//参数 无
//返回 无
*************************************************/
void Lcd_Clr(void)
{
INT32U i;
INT32U * pDisp=(INT32U *)LCD_VIRTUAL_BUFFER;
for(i=0;i<(SCR_XSIZE*SCR_YSIZE/2/4/8);i++)
{
*pDisp++=BLACK;
}
return;
}
//函数名 Lcd_Active_Clr()
//功能 清屏
//参数 无
//返回 无
void Lcd_Active_Clr(void)
{
INT32U i;
INT32U * pDisp=(INT32U *)LCD_ACTIVE_BUFFER;
for(i=0;i<(SCR_XSIZE*SCR_YSIZE/2/4/8);i++)
{
*pDisp++=WHITE;
}
return;
}
//函数名 Lcd_Draw_HLine()
//功能 用指定颜色画水平线
//参数 usX0,usY0 起始坐标
// usX1 结束X坐标
// ucColor 线条颜色
// usWidth 线条宽度
//返回 无
void Lcd_Draw_HLine(INT16 usX0,INT16 usX1,INT16 usY0,INT8U ucColor,INT16U usWidth)
{
INT16 usLen;
if(usX1<usX0)
{
GUISWAP(&usX1,&usX0);
}
while((usWidth--)>0)
{
usLen=usX1-usX0+1;
while((usLen--)>0)
{
LCD_PutPixel(usX0+usLen,usY0,ucColor);
}
usY0++;
}
return;
}
/************************************************
//函数名 Lcd_Draw_VLine()
//功能 用指定颜色画水平线
//参数 usX0,usY0 起始坐标
// usX1 结束X坐标
// ucColor 线条颜色
// usWidth 线条宽度
//返回 无
************************************************/
void Lcd_Draw_VHine(INT16 usY0,INT16 usY1,INT16 usX0,INT8U ucColor,INT16U usWidth)
{
INT16 usLen;
if(usY1<usY0)
{
GUISWAP(usY1,usY0);
}
while((usWidth--)>0)
{
usLen=usY1-usY0+1;
while((usLen--)>0)
{
LCD_PutPixel(usX0,usY0+usLen,ucColor);
}
usX0++;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -