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

📄 c1335_driver.c

📁 sed1335液晶驱动,包括菜单,已经在DSPIC30F6014A上调试通过.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include	"..\uv2_prj\config.h"
#include "config.h"    
#include	"c1335_define.h"
#include	"c1335_driver.h"
#include	"c1335_font.h"

//#include<math.h>   
//#include<intrins.h>
#define	paraP9		0x28		// 相对于320 X 240
unsigned char   code    OnlyBitTable[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; 
/*======================================================================**
**函 数 名:void DispBitmap(uchar *addr,uchar LineX,uchar RowY); 	**
**功能介绍:显示 2 区图形方式显示16*16汉字				**
**传人参数:汉字字符串地址 *addr,定位坐标LineX(0~239),RowY(0~39) 	**
**								  	**
**======================================================================*/
void DispBitmap(	unsigned char *addr,
					unsigned char X,
					unsigned char Y,
					unsigned char color, 
					unsigned char Length) 
{
	unsigned char i; 
	unsigned int XYtemp;
	i = color;
	XYtemp = Y * 40 + X+BasePart2*256;		//计算显示位置
	WriteCMD(CSR_DIR_D);
	WriteCMD(CSR_W);
	WriteDATA((unsigned char)XYtemp);
	WriteDATA((unsigned char)(XYtemp >> 8));
	WriteCMD(MEM_WRITE);
	for(i=0;i<Length;i++,addr++)
	{	 	 
    	if(!color)	WriteDATA(*addr);
		else	    WriteDATA(~(*addr));
	} 
}
void DispCHAR_16x8(	unsigned char *addr,
					unsigned char X,
					unsigned char Y,
					unsigned char color) 
{
	DispBitmap(addr,X,Y,color,16);
}
/*======================================================================**
**函 数 名:void DispHZ_16_16(uchar *addr,uchar LineX,uchar RowY); 	**
**功能介绍:显示 2 区图形方式显示16*16汉字				**
**传人参数:汉字字符串地址 *addr,定位坐标LineX(0~239),RowY(0~39) 	**
**								  	**
**======================================================================*/
void DispHZ_16_16(	unsigned char *addr,
					unsigned char X,
					unsigned char Y,
					unsigned char color) 
{  
	DispBitmap(addr,		X,		Y,		color,16);
	DispBitmap(addr+16,		X+1,	Y,		color,16);
}
	
/*======================================================================**
**函 数 名:Disp_ASCII(uchar *addr,uchar LineX,uchar RowY,bit Inverse);	**
**功能介绍:显示 2 区图形方式显示ASCII,要求以'\0'结尾		       	**
**传人参数:ASCII字符串地址 *addr,定位坐标LineX(0~239),RowY(0~39) 	**
**		-----(bit)Inverse,正常显示(0),反白显示(1)  ---		**
========================================================================*/
void DispASCIIStr(	unsigned char *addr,
					unsigned char X,
					unsigned char Y,
					unsigned char color)
{     
	unsigned int 	p;

	for ( ;*addr != 0;addr++ )
	{
		if(*addr < 0x80)//ASICII 字符
		{
			p = (*addr - 0x20)*16 ;		
			DispCHAR_16x8(ASCII_16+p,X,Y,color); 	//DispCHAR_16x8(&Ascii_16[p],Y0,X0,color);   
			X++;
		}
		else	// >=0x80,汉字
		{
			p = (*addr - 0x80)*32 ;		
			DispHZ_16_16(HZ_16X16+p,X,Y,color); 	//DispCHAR_16x8(&Ascii_16[p],Y0,X0,color);   
			X +=2;
		}
	}   
}
void	NumberToChar(unsigned int	nDecadeData,
					 unsigned char * pChar,
					 unsigned char Length)
{
	unsigned char	uc;
	for (uc = Length;uc ; )
	{
		pChar[--uc] = nDecadeData%10 + 0x30;
		nDecadeData /=10;
	}
}
#define	memset(x,y,z);		
/*======================================================================**
**函 数 DispBmp16x24(uchar *addr,uchar X,uchar Y,color);			**
**功能介绍:显示 2 区图形方式显示位图						       	**
**传人参数: 	**
**		-----color,正常显示(0),反白显示(1)  ---		**
========================================================================*/
void	DispDecimalNum(	unsigned int	nDecadeData,
						unsigned char	X,
						unsigned char	Y,
						unsigned char	Length,
						unsigned char	color)
{
	unsigned char	ucTemp[5];
	memset(ucTemp,0,sizeof(ucTemp));
	NumberToChar(nDecadeData,ucTemp,Length);
	DispASCIIStr(ucTemp,X,Y,color);
}
/*======================================================================**
**函 数 DispBmp16x24(uchar *addr,uchar X,uchar Y,color);			**
**功能介绍:显示 2 区图形方式显示位图						       	**
**传人参数: 	**
**		-----color,正常显示(0),反白显示(1)  ---		**
========================================================================*/
void	DispBmp16x24(unsigned char *addr,
					unsigned char X,
					unsigned char Y,
					unsigned char color) 
{
	DispBitmap(addr,		X,		Y,		color,16);
	DispBitmap(addr+16,		X+1,	Y,		color,16);
	DispBitmap(addr+16+16,	X+2,	Y,		color,16);
}

void	HorLine(unsigned 	char Data,
				unsigned 	char X,
				unsigned  	char Y,
				unsigned 	char Length)
{
	unsigned char	i;
	unsigned int   XYtemp;  
    XYtemp  =  (Y) * 40 + X + BasePart2*256;
	WriteCMD(CSR_DIR_R);
    WriteCMD(CSR_W);
	WriteDATA((unsigned char)XYtemp);
	WriteDATA((unsigned char)(XYtemp >> 8));
	WriteCMD(MEM_WRITE);
	for(i=0;i<Length;i++)
			WriteDATA(Data);
}
void	VerLine(unsigned 	char Data,
				unsigned 	char X,
				unsigned  	char Y,
				unsigned 	char Length)
{
	unsigned char	i;
	unsigned int   XYtemp;  
    XYtemp  =  (Y) * 40 + X + BasePart2*256;
	WriteCMD(CSR_DIR_D);
    WriteCMD(CSR_W);
	WriteDATA((unsigned char)XYtemp);
	WriteDATA((unsigned char)(XYtemp >> 8));
	WriteCMD(MEM_WRITE);
	for(i=0;i<Length;i++)
			WriteDATA(Data);
}
/*=================================================================**
**函 数 名:void DrawRect(unsigned int X,unsigned  char Y,unsigned char attr);**
**功能介绍:在(x,y)坐标绘制一个点。x=[0,319],y=[0,239]			   **
**传人参数:attr是 (1)画点,(0)消点                   **
===================================================================*/
void	DrawRect(unsigned int X,unsigned  char Y,unsigned char attr)
{
	unsigned char	i,Data;
	if(attr)  	Data = 0xc0;
	else		Data = 0x00;
	VerLine(Data,X,		Y,24);

	if(attr)  	Data = 0x03;
	else		Data = 0x00;
	VerLine(Data,X+4,	Y,24);

	if(attr)  	Data = 0xff;
	else		Data = 0x00;
	for(i=0;i<2;i++)		
		HorLine(Data,X,Y+i,5);
	for(i=22;i<24;i++)		
		HorLine(Data,X,Y+i,5);
}
/*======================================================================**
**函 数 名:DispRegNO(RowX,ColumnY,X,Y);							**
**功能介绍:显示 2 区图形方式显示ASCII,要求以'\0'结尾		       	**
**传人参数:ASCII字符串地址 *addr,定位坐标LineX(0~239),RowY(0~39) 	**
**		-----(bit)Inverse,正常显示(0),反白显示(1)  ---		**
========================================================================*/
void DispRegNO(		unsigned char RowX,
					unsigned char ColumnY,
					unsigned char X,
					unsigned char Y,
					unsigned char color)
{     
	unsigned int 	p;
	unsigned char	ucTemp;
	ucTemp = ColumnY*12 +RowX;
	if(ucTemp < 31)
	{
		p = 32*ucTemp;	
		DispHZ_16_16(PROVINCE_NAME+p,X,Y,color); 		
	}
	else if ((ucTemp > 30)&&(ucTemp < 72))
	{
		if(ucTemp < 46)		p = (ucTemp-20)*16;
		else				p = (ucTemp-13)*16 ;
		DispCHAR_16x8(ASCII_16+p,X,Y,color); 
	}
}
/*======================================================================**
**函 数 名:initLCD(); 													**
**功能介绍:初始化LCD													**
**传人参数:无														 	**
**								  										.
0**
**======================================================================*/
void initLCD()
{
  	unsigned  int i; 

	C8155=0x02; //B output,C&A input
  	C8155=0x02; //B output,C&A input

  	WriteCMD(SYSTEM_SET);//C1335=0x40;
  	for(i=0;i<8;i++)
  	{
    	WriteDATA(SYSTEMSET_PARAM[i]);//D1335 = SYS_PARA_TABLE8[i];

⌨️ 快捷键说明

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