📄 lcd.c
字号:
//#include "..\inc\44b.h"
//#include "..\inc\44blib.h"
#include "..\inc\clock.h"
#include "..\inc\ASII.H"
#define INT32U unsigned int
#define INT16U unsigned short
#define S32 int
#define S16 short int
#define INT8U unsigned char
#define U16 unsigned short int
#define INT16 short
/
/*******************************************
英文显示
******************************************/
void dischar(char hao,unsigned char line,unsigned char xdot)
{
unsigned char *pbuffer;
unsigned int i;
if(xdot%2==0)xdot+=1;
else xdot-=1;
pbuffer =(unsigned char *) 0xc400000;
for (i=0;i<16;i++)
{
pbuffer[20*i+16*20*line+xdot*2]=hzdot[2*i+1+32*hao];
pbuffer[20*i+16*20*line+xdot*2+1]=hzdot[2*i+32*hao];
}
}
/*******************************************
英文字符串显示
******************************************/
void disstr( char * hao,unsigned char line,unsigned char xdot)
{
char * m=hao;
while(* m!=0)
{
if(xdot>=10){xdot-=10;line++;}
dischar(* m,line,xdot);
m++;
xdot++;
}
}
/*******************************************
沿时程序
********************************************/
void delay(long n)
{
long i;
long k;
long j;
for(i=0;i<n;i++)
{
for(k=0;k<600;k++)
{
for(j=0;j<1000;j++)
{
int n=1;
int m=2;
}
}
}
}
/*******************************************
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 0XFFFFFFFF
#define WHITE 0X0
/*****************************************
*S3C44B0X的lcd控制寄存器访问地址
*******************************************/
/*#define rLCDCON1 (*(voatile unsigned *)0x1f00000)
#define rLCDCON2 (*(voatile unsigned *)0x1f00004)
#define rLCDCON3 (*(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 (160)
#define SCR_YSIZE (240)
#define LCD_XSIZE (160)
#define LCD_YSIZE (240)
/*********************************************
*s3c44b0x的lcd控制器宏定义
************************************************/
#define MIDE_GREY16 (16)
#define CLKVAL_GREY16 (13)
#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=(0X0<<27)|(((LCD_ACTIVE_BUFFER>>22)<<21)|M5D(LCD_ACTIVE_BUFFER>>1));
/*---------------设置:16级灰度,LCDBANK,LCDBDEU----------------*/
rLCDSADDR2=M5D(((LCD_ACTIVE_BUFFER+(SCR_XSIZE*LCD_YSIZE/2/4))>>1))|(MVAL<<21);
rLCDSADDR3=(LCD_XSIZE/4/4)|(((SCR_XSIZE-LCD_XSIZE)/4/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/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/8);i++)
{
*pDisp++=WHITE;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -