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

📄 lcd.c

📁 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 + -