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

📄 lpc_lib_mylcd.c

📁 使用embest IDE开发工具开发的基于LPC2294 的触摸屏开发
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
**********************************************************************************************
*
*     		  Embest Info&Tech Co., Ltd.  All rights reserved.
*                   		  www.embedinfo.com
*			
*file:     		lpc_lib_LCD.c 
*author:   		z.x.q. embest 
*establish: 	2006.xx.xx
*modify:		xx
*notes:			xx
**********************************************************************************************
*/

/*
**********************************************************************************************
*                                       include files
**********************************************************************************************
*/

#include 	"..\..\com\lpc_lib_mylcd\lpc_lib_mylcd.h"

#include 	"..\..\com\lpc_lib_mylcd\image.h"
#include 	"..\..\com\lpc_lib_mylcd\han.h"
#include 	"..\..\com\lpc_lib_mylcd\ascii.h"
//#define COM_FTF      (x/256)<<2
/*
**********************************************************************************************
*                               extern function/variable declare
**********************************************************************************************
*/

/*
**********************************************************************************************
*                                  global variable define 
**********************************************************************************************
*/


/*
**********************************************************************************************
函数声明
**********************************************************************************************
*/	
/*
void myLCD_init(void);
void myLCD_wrcom(INT8U comd);
void myLCD_wrdata(INT8U data);
void Delayms(INT32U value);
void myLCD_Xaddr(INT16U xadd);
void myLCD_Yaddr(INT8U yadd);
void myLCD_fore_on(INT8U on_off);
void disp_line_byte(INT8U datain,INT8U front,INT8U back);
void disp_line_byte_fore(INT8U datain,INT8U front,INT8U x,INT8U y);
void myLCD_sendch_zc(INT8U data);
void myLCD_sendch(INT8U data);
void myLCD_sendstr(INT8U *str);
void myLCD_printf(INT8U *fmt,...);
void myLCD_send_han_data(INT8U data[]);
void myLCD_send_han(INT8U han_code);
void mycls_back();
void mycls(INT8U col);
void myposi_set(INT8U lineth,INT8U colth);
void myposi_piexl_start(INT16U x,INT8U y);
void myposi_piexl_end(INT16U x,INT8U y);
void myLCD_disp_picture_full(INT8U data[]);
void myLCD_disp_picture(INT8U data[]);
void myLCD_disp_picture_fore(INT8U data[]);
void myLCD_line(INT8U col);
void myLCD_line_xie(INT8U col);
void myLCD_line_0(INT8U col);
void myLCD_line_rectangle(INT8U col);
void color_set(INT16U fcolor,INT16U bcolor);
void clear_line(INT8U line_num);
*/
INT8U myglineth=0;		//line number	
INT8U mygcolth=0;			//column number
INT8U mygfore_clr=0x0;	 //fore color
INT8U mygback_clr=0xe0; //back color
INT16U x_piexl_start=0;     // x轴像素开始坐标
INT8U y_piexl_start=0;     // y轴像素开始坐标
INT16U x_piexl_end=0;     // x轴像素结束坐标
INT8U y_piexl_end=0;     // y轴像素结束坐标
INT8U fore_on=0;         //是否开只显示前景功能


/*
**********************************************************************************************
* name:		myLCD_init
* func:		initialize LCD screen
* para:		none
* ret:		none
* modify:
* comment:		
**********************************************************************************************
*/		
void myLCD_init(void)
{	      

}
/*
**********************************************************************************************
* name:		myLCD_wrcom
* func:		write command
* para:		command data
* ret:		none
* modify:
* comment:		
**********************************************************************************************
*/
void delay_write(INT8U i)
{
 INT8U j;
 for(;i>0;i--)
   for(j=0;j<1;j++);
 
}
/*
**********************************************************************************************
* name:		myLCD_wrcom
* func:		write command
* para:		command data
* ret:		none
* modify:
* comment:		
**********************************************************************************************
*/		
void myLCD_wrcom(INT8U comd)
{
	ADDR_myCOM=comd;
//	delay_write(1);
}
/*
**********************************************************************************************
* name:		myLCD_wrdata
* func:		effect
* para:		form parameter
* ret:		return value description
* modify:
* comment:		
**********************************************************************************************
*/		
void myLCD_wrdata(INT8U data)
{
	ADDR_myDATA=data;
//	delay_write(1);
}
/*
**********************************************************************************************
* name:		myDelayms
* func:		delay time in ms 
* para:		value: delayed value ,unit:ms
* ret:		none
* modify:
* comment:		
**********************************************************************************************
*/
void myDelayms(INT32U value)
{
	INT32U i;
	for(;value>0;value--)
		for(i=0;i<500;i++);
}
//set x address
void myLCD_Xaddr(INT16U xadd)
{
    ADDR_XADD=xadd%256;    //因为x寄存器是8位的,而数据可以是大于256的。
//    delay_write(1);
}
//set y address
void myLCD_Yaddr(INT8U yadd)
{
    ADDR_YADD=yadd;
//    delay_write(1);
}
//设只显示前景色功能
void myLCD_fore_on(INT8U on_off)
{
 fore_on=on_off;
}
/*
****************************************************************************
* name:		disp_line_byte
* func:		用于写一行8个像素的数据 
* para:		datain:所传的数据编码,front:显示的前景色,back:显示的背景色
* ret:		none
* modify:   
* comment:  当datain的某位为1时,那个像素显示前景色,为0时,显示背景色
*****************************************************************************
*/
void disp_line_byte(INT8U datain,INT8U front,INT8U back)
{
INT8U i,j,data;
for( i=0,j=0x80; i<8; i++,j=(j>>1))
{
 data=datain&j ? front: back; 

 myLCD_wrdata(data);
}
}
/*
****************************************************************************
* name:		disp_line_byte_fore
* func:		用于只显示前景色 
* para:		datain:所传的数据编码,front:显示的前景色,x:x轴像素位置,y:y轴像素位置
* ret:		none
* modify:   
* comment:  当datain的某位为1时,那个像素显示前景色,为0时,不变色
*****************************************************************************
*/
void disp_line_byte_fore(INT8U datain,INT8U front,INT8U x,INT8U y)
{
 INT8U i,k,com;
 for(k=0x80,i=0;i<8;i++,k=(k>>1),x++)
 {
  if(datain&k)
  {
   myLCD_Xaddr(x);
   myLCD_Yaddr(y);
   com=(x/256)<<2;
   myLCD_wrcom(com);
   myLCD_wrdata(front);
  }
 }
}
/*
****************************************************************************
* name:		disp_line_sendch_zc
* func:	    发送字母显示的一个子程,专用于显示的
* para:		data:所传的数据编码
* ret:		none
* modify:   
* comment:  
*****************************************************************************
*/
void myLCD_sendch_zc(INT8U data)
{
  INT8U i;
  INT32U k;
  INT16U xaddr;
  INT8U yaddr;
  INT8U data1;
 		
//  xaddr=mygcolth*8+X_SPACE0;
//  yaddr=myglineth*16+Y_SPACE0;

  xaddr=x_piexl_start+mygcolth*8;
  
  yaddr=y_piexl_start+7;
  
  k=(data-0x20)*16;                //存数据时,0x20的数据放在第一个,一个字母16个数据

  for(i=0;i<16;i++,yaddr++)
  {	
   data1=ascii8x16[k+i];
   if(!fore_on)                 //关只显前景色功能
   {
    myLCD_Xaddr(xaddr);
	myLCD_Yaddr(yaddr);
	disp_line_byte(data1,mygfore_clr,mygback_clr); 	
   } 
   else                         //开只显前景色功能
   {
    disp_line_byte_fore(data1,mygfore_clr,xaddr,yaddr);
   }	
  }
   mygcolth++;                    //写完一个字母,换行
   if(!(mygcolth%z_column_num))  //如果写满一行,换行
   {
	myglineth++;
	mygcolth=0;
   }		
}
/*
**********************************************************************************************
* name:		myLCD_sendch
* func:		display a char in LCD
* para:		the displaying data
* ret:		none
* modify:
* comment:	there are 38 ascii chars in every line, 19 lines in all.
			dscription about one ascii char:8*16 dots. 
			so LCD panel: x: 8*38+X_SPACE0+X_SPACE1=320
						  y: 16*14+Y_SPACE0+Y_SPACE1=240		
**********************************************************************************************
*/
void myLCD_sendch(INT8U data)
{
	if(data=='\n')      //换行符号
	{
		myglineth++;
		mygcolth=0;
	}
	else if(data=='\r')     //回到行首
		mygcolth=0;
//0x20~0x7f为键盘输入的ascii范围,也是常用数据,后面的判断是防止参数超出范围	
	else if((data>=0x20)&&(data<=0x7e)&&(mygcolth<z_column_num)&&(myglineth<z_line_num))   
	{
     myLCD_sendch_zc(data);
	}
}
/*
**********************************************************************************************
* name:		myLCD_sendstr
* func:		send string to LCD display
* para:		string pointer
* ret:		none
* modify:
* comment:		
**********************************************************************************************
*/
void myLCD_sendstr(INT8U *str)
{
	while(*str)
	{
		myLCD_sendch(*str++);			
		if(myglineth>z_line_num-1)           //只有14行,从0~13
		{
			myglineth=0;
			mygcolth=0;
			mycls(0xe0);                          //写满屏幕后,没程序
		}
	}
}
/*
**********************************************************************************************
* name:		myLCD_printf
* func:		print string in LCD
* para:		variable parameter pointer
* ret:		none
* modify:
* comment:	use function vsprintf,included in stdarg.h 	
**********************************************************************************************
*/

//   这是最后用来显示字符的
void myLCD_printf(INT8U *fmt,...)
{
	 va_list ap;
	 INT8U string[50];
	 va_start(ap,fmt);
	 vsprintf(string,fmt,ap);
	 myLCD_sendstr(string);
	 va_end(ap);
}
/*
**********************************************************************************************
* name:		myLCD_send_han_data
* func:		用于显示汉字
* para:		data为这个汉字数组
* ret:		none
* modify:
* comment:	use function vsprintf,included in stdarg.h 	
            一个汉字用32个数据,mygcolth,myglineth对于字母的位置来说的,不是汉字
            一个字母对应于1个mygcolth,1个myglineth,而1个汉字对应于2个mycolth,1个myglineth
**********************************************************************************************
*/
void myLCD_send_han_data(INT8U data[])
{
   INT8U i=0,y,com,data1;
   INT16U x;
   INT8U k=0;
   
   y=myglineth*16+Y_SPACE0;
   x=mygcolth*8+X_SPACE0;
  if((mygcolth<z_column_num)&&(myglineth<z_line_num)) 
  {
   for(i=0;i<16;i++,y++)  
   {
     if(!fore_on)
     {
      myLCD_Yaddr(y);
      myLCD_Xaddr(x);	
      com = (x/256)<<2;//TFT板为CMD = ( x/256)<<2;,CSTN板为CMD = (( x/256)<<6)|0x04;
      myLCD_wrcom(com);
      disp_line_byte(data[k++],mygfore_clr,mygback_clr);//左边字节
      disp_line_byte(data[k++],mygfore_clr,mygback_clr);//右边字节     
      }
      else
      {
       disp_line_byte_fore(data[k++],mygfore_clr,x,y);
       x=x+8;
       disp_line_byte_fore(data[k++],mygfore_clr,x,y);
       x=x-8;
      } 
    }
    mygcolth=mygcolth+2;            //1个汉字对应于2个mygcolth
	if(!(mygcolth%z_column_num))    //写满换行
	{
	 myglineth++;
	 mygcolth=0;
	}
   }  
}
/*
**********************************************************************************************
* name:		myLCD_send_han
* func:		用于显示汉字
* para:		han_code为这个汉字在字库中的位置
* ret:		none
* modify:
* comment:	use function vsprintf,included in stdarg.h 	
            一个汉字用32个数据,mygcolth,myglineth对于字母的位置来说的,不是汉字
            一个字母对应于1个mygcolth,1个myglineth,而1个汉字对应于2个mycolth,1个myglineth
**********************************************************************************************
*/

//最后用于汉字输出的
void myLCD_send_han(INT8U han_code)
{
   INT8U i=0,y,com,data1;
   INT16U x;
   INT32U k;
   
   y=myglineth*16+Y_SPACE0;
   x=mygcolth*8+X_SPACE0;
   k=han_code*32;                  //一个中文是32个数据  
  if((mygcolth<z_column_num)&&(myglineth<z_line_num)) 
  {
   for(i=0;i<16;i++,y++)  
   {
     if(!fore_on)
     {

⌨️ 快捷键说明

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