欢迎光临~啄木鸟电子科技

软件设计

SO12864 LCD12864



/******************************************************************
  Copyright (C), 2008-2009, 力天电子,LiTian Tech.Co.Ltd.
  Module Name   : SO12864              
  File Name     : SO12864.c	            
  Author   	    : HE CHENG         
  Create Date  	: 2009/10/19         
  Version   	: 1.0                
  Function      : SO12864液晶屏实验                
  Description  	: 实验前将液晶屏插好          
  Support     	: www.LT430.com  QQ:330508762                  
******************************************************************/
#include <NXP/iolpc2148.h>
#include "config.h"
#include "includes.h"

typedef unsigned char  uint8;                   /* 无符号8位整型变量                        */
typedef signed   char  int8;                    /* 有符号8位整型变量                        */

typedef unsigned short uint16;                  /* 无符号16位整型变量                       */
typedef signed   short int16;                   /* 有符号16位整型变量                       */

typedef unsigned int   uint32;                  /* 无符号32位整型变量                       */
typedef signed   int   int32;                   /* 有符号32位整型变量                       */

typedef float          fp32;                    /* 单精度浮点数(32位长度)                 */
typedef double         fp64;                    /* 双精度浮点数(64位长度)					*/


//管脚宏定义
#define         SCLK  0x01<<24  //595时钟端
#define         MISO  0x01<<5   //数据输入端
#define         MOSI  0x01<<6   //数据输出端
#define         RCK   0x01<<7   //SO12864时钟输入端


//	LCD Define	
#define	 LCD_A			1<<30	//命令数据选择端,高电平:数据,低电平:命令.
#define	 LCD_CLK		1<<4	//时钟端
#define  LCD_DATA               MOSI	//数据端
#define  B_LED			1<<13	//背光

#define Sclk_L() IO0CLR |= LCD_CLK	//时钟高电平
#define Sclk_H() IO0SET |= LCD_CLK	//时钟低电平

#define Res_L()	HC595_DATA &= ~(1<<2);Write595()             //复位低电平
#define Res_H()	HC595_DATA |= (1<<2);Write595()	      //复位高电平

#define	Data_L() IO0CLR |= LCD_DATA	//数据低电平
#define	Data_H() IO0SET |= LCD_DATA	//数据高电平

#define CS_L() HC595_DATA &= ~1;Write595()	//片选低电平
#define CS_H() HC595_DATA |= 1;Write595()	//片选高电平

#define Write_C() IO0CLR |= LCD_A	//选择写命令
#define Write_D() IO0SET |= LCD_A	//选择写数据

//函数声明
void Delayn(unsigned long n);
void Write595();
void HC595_Init(void);
void Lcd_Init(void);
void display_map(unsigned char  *p);

//全局变量
unsigned int HC595_DATA = 0xFFFFFFFF;

unsigned char gui_disp_buf[GUI_LCM_XMAX*GUI_LCM_YMAX/8]={       //取的字模
0x20,0x30,0xAC,0x63,0x32,0x00,0xFC,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xBC,0x00,0x00,
0x00,0x08,0x06,0x82,0xFA,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x9A,0x96,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3F,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0xF0,0x1C,0x07,0xE2,0x24,0x24,0x24,0xE4,0x04,0x04,0xFC,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x11,0x09,0x49,0x21,0x1C,0x03,0x7F,0x04,0x3F,0x04,0x3F,0x44,0x7F,0x00,0x00,
0x00,0x04,0x04,0x04,0x05,0x04,0x04,0x04,0x04,0x04,0x46,0x84,0x60,0x1F,0x00,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x01,0x06,0x0C,0x18,0x30,0x60,0x20,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0x00,0x00,0x07,0x02,0x02,0x02,0x07,0x20,0x40,0x3F,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x40,0x40,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,
0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,
0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00,


0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,
0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x08,0x4A,0x4A,0xFE,0x4A,0x4A,0x7E,0x00,
0x09,0x4A,0x4C,0xF8,0x4C,0x4B,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,
0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,0x08,0x04,0x7F,0x22,0x22,0x22,0x7E,0x00,
0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

//初始化595接口
void HC595_Init(void)
{
  IO0DIR |= MOSI|RCK;
  IO1DIR |= SCLK;
  IO1CLR |= SCLK;
  IO0DIR |= RCK;
  
  HC595_DATA = 0xFFFFFFFF;  Write595();
}

//写字节
void WriteByte(unsigned char data)
{
  unsigned char i;
  //IO0CLR = RCK;
  for(i=0;i<8;i++)
  {
    if(data&0x01)      IO0SET = MOSI;
    else      IO0CLR = MOSI;
    IO1SET=SCLK;
    data>>=1;
    IO1CLR=SCLK;
  }
  //IO0SET = RCK;
}

//刷新595的数据
void Write595()
{
  IO0CLR = RCK;
  WriteByte(HC595_DATA&0xff);
  WriteByte((HC595_DATA&0xff00)>>8);
  WriteByte((HC595_DATA&0xff0000)>>16);
  WriteByte((HC595_DATA&0xff000000)>>24);
  IO0SET = RCK;
}
//延时周期数
void Delayn(unsigned long n)
{
  while(n--);
}

//向SPI总线上写一个字节的数据
void LCDWriteByte(unsigned char data)
{
  unsigned char i,s;
  s = data;
  for(i=0;i<8;i++)
  {
    if(s&0x80)      Data_H();
    else      Data_L();
    Sclk_H();
    s<<=1;
    Sclk_L();
  }
}

//向液晶屏些数据
void WriteData (unsigned char Data)
{   
  Write_D();  
  CS_L();                         
  LCDWriteByte(Data);
  CS_H();
}

//向液晶屏写命令
void WriteCommand (unsigned char Command)
{
  Write_C(); 
  CS_L(); 
  LCDWriteByte(Command); 
  CS_H();
}

//打开液晶背光  0:关闭     1:打开  
void Lcd_BackLed(unsigned char on)
{
  if(on==1){
    IO0CLR=B_LED;		//打开背光
  }
  else if(on==0){
    IO0SET=B_LED;		//关闭背光
  }
}

//液晶复位
void Lcd_Reset(void){
  Res_L();
  Delayn(1000000);
  Res_H();
}

//列顺序翻转,左右翻转 0:正常  1:翻转
void Lcd_ColRev(unsigned char i){ 
  WriteCommand(0xa0|(i&0x01));
}

//液晶初始化
void Lcd_Init(void)
{
  HC595_Init();   //初始化74HC595
  
  //初始化IO口
  IO0DIR |= LCD_A|B_LED|LCD_CLK;
  
  Lcd_Reset();		//液晶复位
  Lcd_BackLed(1);		//打开液晶背光

  WriteCommand(0xaf);       	//打开显示
  WriteCommand(0x40);			//开始显示
  WriteCommand(0xa0);         //ADC NORMAL 
  WriteCommand(0xa6);         // 
  WriteCommand(0xa4);        	//清除
  WriteCommand(0xa2);       	//1/9BIAS 
  WriteCommand(0xc8);       	//COMMON OUTPUT DIRECTION 
  WriteCommand(0x2f);        	//POWER CONTROL 
  WriteCommand(0x24);      	//RESISTER RATIO 
  WriteCommand(0x81);       	//VOLUM MODE SET 
  WriteCommand(0x24);       	//RESISTER RATIO
  
  Lcd_ColRev(1);				//左右翻转
}

//显示一副图象
void display_map(unsigned char  *p) //P是图片数据的首地址 
{
  	unsigned char  seg,page,tmp; 
  	for(page=0xb0;page<0xb8;page++)  //写页地址共 8 页  0xb0----0xb8 
  	{   
	    WriteCommand(page);                      
	    WriteCommand(0x10);           //列地址,高低字节两次写入,从第 0 列开始 
	    WriteCommand(0x00); 
	    for(tmp=0;tmp<4;tmp++)
	    {
	      	WriteData(0);
	    }
	    for(seg=0; seg<128; seg++)//写 128 列 
	    {
	       	WriteData(*p++);
	      	//WriteData(0xFE);    //TEST
	    }
  	} 
}

//刷新整个缓冲区
void LCD_UpdateAll(void)
{
   	display_map(gui_disp_buf);
}

//以一种颜色填充图像
void LCD_FillAll(TCOLOR dat)
{
  	uint32  i, j;
  	for(i=0; i<GUI_LCM_XMAX; i++)		// 历遍所有行
  	{
    	for(j=0; j<GUI_LCM_YMAX/8; j++)	// 历遍所有行
	    {
	      	gui_disp_buf[j*128 + i] = dat;		// 填充数据
	    }
  }
  
  LCD_UpdateAll();                      //更新显示数据
}

//更新一个点的显示
void  LCD_UpdatePoint(uint32 x, uint32 y)
{
	WriteCommand(0xb0 + (7-((y>>3)&0x0F))); //页地址                  
	WriteCommand(0x10 + (((x+4)>>4)&0x0F));        //列地址,高低字节两次写入,从第 0 列开始 
	WriteCommand(0x00 + ((x+4)&0x0F));          
	  
	WriteData(gui_disp_buf[(x)+128*(8-(y/8)-1)-1]);              //写入数据
}

/***********************************************************************
函数: Put_Pixel
功能:在液晶屏上打印一个像素
参数说明:  
坐标(x,y)(以左上角为坐标原点)
x 取值0~127 
y的取值 0~64

flag = 0 将此点清零
flag = 1 将此点显示
flag = 2 将此点取反
***********************************************************************/
void Put_Pixel(unsigned char x,unsigned char y,unsigned char flag)
{
  if(x<128 && y<64)
  {
    switch(flag)
    {
    case 1://置1
        gui_disp_buf[(x)+128*(8-(y/8)-1)-1] |=(1<<(7-(y%8)));  
        break;
    case 0://清零
        gui_disp_buf[(x)+128*(8-(y/8)-1)-1] &=(~(1<<(7-(y%8))));  
        break;
    case 2://取反
        gui_disp_buf[(x)+128*(8-(y/8)-1)-1] ^=(1<<(7-(y%8)));
        break;
    }
    LCD_UpdatePoint(x,y);
  }
}

/***********************************************************************
画一条x1,y1 到 x2,y2 的直线
(flag=1画点,flag=0清点)
***********************************************************************/
void Draw_Line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char flag)
{
  int dy ;
  int dx ;
  int stepx, stepy, fraction;
  dy = y2 - y1;
  dx = x2 - x1;
  if (dy < 0) 
  {
    dy = -dy;
    stepy = -1;
  }
  else 
  {
    stepy = 1;
  }
  if (dx < 0)
  {
    dx = -dx;
    stepx = -1;
  }
  else
  {
    stepx = 1;
  }
  dy <<= 1;
  dx <<= 1;
  Put_Pixel(x1,y1,flag);
  if (dx > dy)
  {
    fraction = dy - (dx >> 1); 
    while (x1 != x2)
    {
      if (fraction >= 0)
      {
        y1 += stepy;
        fraction -= dx;
      }
      x1 += stepx;
      fraction += dy;  
      Put_Pixel(x1,y1,flag);
    }
  }
  else
  {
    fraction = dx - (dy >> 1);
    while (y1 != y2)
    {
        if (fraction >= 0)
        {
                x1 += stepx;
                fraction -= dy;
        }
        y1 += stepy;
        fraction += dx;
        Put_Pixel(x1,y1,flag);
    }
  }
}

//加载 16x1 6的汉字
void LcdDispHz16 (uint16 x0, uint16 y0, uint8 ForeColor, uint8 *s)
{
  int16 j,k,x,y,xx;
  uint8 qm,wm;
  uint32 ulOffset;
  char hzbuf[32]/*,temp[2]*/;

  if(((uint8)(*s)) < 161)
  {
    //temp[0] = *(s+i);
    //temp[1] = '\0';
    return;
  }
  else
  {
    qm = *(s) - 161;
    wm = *(s + 1) - 161;
    ulOffset = (uint32)(qm * 94 + wm + 2) * 32 + 4;
    for (j = 0; j < 32; j ++)
    {
      hzbuf[j] = g_auc_HZK_Dot[ulOffset + j];
    }
    
    for(y = 0; y < 16; y++)
    {
      for(x = 0; x < 16; x++) 
      {
        k = x % 8;
        if (hzbuf[y * 2 + (x / 8)]  & (0x80 >> k))
        {
          xx = x0 + x;
          Put_Pixel( xx, y + y0, (uint8)ForeColor);
        }
      }
    }
  }
  //LCD_UpdateAll();
}


//显示汉字
void Lcd_DispHZ(uint16 usX, uint16 usY, uint16 usForeColor,  uint8 *pucStr)
{
  uint16 i = 0;
  //uint8 ucLen;
  
  while (*pucStr != 0)
  {
    if (*pucStr >= 161)
    {
      if ((usX + i * 8) >= GUI_LCM_XMAX - 16 ||(usY >= GUI_LCM_YMAX))
      {
        break;
      }
      LcdDispHz16(usX + i * 8, usY, usForeColor,  pucStr);
      i += 2;
      pucStr += 2;
    }
  }
}

/****************************************************************************
*                    相关的 GUI 接口函数
****************************************************************************/

/****************************************************************************
* 名称:GUI_FillSCR()
* 功能:全屏填充。直接使用数据填充显示缓冲区。
* 入口参数:dat		填充的数据(对于黑白色LCM,为0的点灭,为1的点显示)
* 出口参数:无
****************************************************************************/
void  GUI_FillSCR(TCOLOR dat)
{
  	LCD_FillAll(dat);
}

/****************************************************************************
* 名称:GUI_Initialize()
* 功能:初始化GUI,包括初始化显示缓冲区,初始化LCM并清屏。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  GUI_Initialize(void)
{  
  Lcd_Init();					// 初始化LCM模块工作模式,纯图形模式
  GUI_FillSCR(0x00);			// 初始化缓冲区为 0x00,并输出屏幕(清屏)
} 

/****************************************************************************
* 名称:GUI_ClearSCR()
* 功能:清屏。
* 入口参数:无
* 出口参数:无
* 说明:用户根据 LCM 的实际情况编写此函数。
****************************************************************************/
void  GUI_ClearSCR(void)
{
  	GUI_FillSCR(0x00);
}

uint8 const  DCB_HEX_TAB[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数: x		指定点所在列的位置
*            y		指定点所在行的位置
*            color	显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。(操作失败原因是指定地址超出有
*           效范围)
* 说明:用户根据LCM的实际情况编写此函数。对于单色,只有一个位有效,则要使用左移的方法
*      实现point_dat = (point_dat&MASK_TAB [i]) | (color<<n),其它位数的一样
*      处理。
****************************************************************************/
uint8  GUI_Point(unsigned int x, unsigned int y, TCOLOR color)
{  
  Put_Pixel(x,y,color);

  //刷新显示
  //LCD_UpdatePoint(x, y);
  //LCD_UpdateAll();
  return(1);
}
/****************************************************************************
* 名称:GUI_ReadPoint()
* 功能:读取指定点的颜色。
* 入口参数:x			指定点所在列的位置
*          y		指定点所在行的位置
*          ret		保存颜色值的指针
* 出口参数:返回0时表示指定地址超出有效范围。
* 说明:对于单色,设置ret的d0位为1或0,4级灰度则为d0、d1有效,8位RGB则d0--d7有效,
*      RGB结构则R、G、B变量有效。
****************************************************************************/
int  GUI_ReadPoint(uint32 x, uint32 y, TCOLOR *ret)
{
  TCOLOR  bak;
  
  //参数过滤
  if(x>=GUI_LCM_XMAX) return(0);
  if(y>=GUI_LCM_YMAX) return(0);
  
  // 取得该点颜色(用户自行更改)
  bak = gui_disp_buf[(x)+128*(8-(y/8)-1)-1];
  if((bak&DCB_HEX_TAB[y&0x07])!=0) *ret = 1;
    else  *ret = 0;
  
  return(1);
}
/****************************************************************************
* 名称:GUI_HLine()
* 功能:画水平线。
* 入口参数: x0		水平线起点所在列的位置
*           y0		水平线起点所在行的位置
*           x1      水平线终点所在列的位置
*           color	显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void  GUI_HLine(uint32 x0, uint32 y0, uint32 x1, uint8 color) 
{  
  Draw_Line(x0,y0,x1,y0,color);
  //LCD_UpdateAll();
}

/****************************************************************************
* 名称:GUI_RLine()
* 功能:画垂直线。
* 入口参数: x0		垂直线起点所在列的位置
*           y0		垂直线起点所在行的位置
*           y1      垂直线终点所在行的位置
*           color	显示颜色(对于黑白色LCM,为0时灭,为1时显示)
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void  GUI_RLine(uint32 x0, uint32 y0, uint32 y1, uint8 color) 
{    
  Draw_Line(x0,y0,x0,y1,color);
  //LCD_UpdateAll();//这样更新太慢
}

//显示汉字
void GUI_DispHZ(uint16 usX, uint16 usY, uint16 usForeColor,  uint8 *pucStr)
{
  Lcd_DispHZ(usX,usY,usForeColor,pucStr);
}

上一个:软件:FFT 算i法 下一个:字库

联系我们

联系人:客服在线

手机:全工:13903011251

电话:李R:13530006400

邮箱:729986191@qq.com

地址: GUANGDONG PROVINCE

用手机扫描二维码关闭
二维码