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

📄 lcm.c

📁 一个基于XMODEM协议的下载字库的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
程序名:	LcmSetCurPoint
说  明:	光标指针地址设置(addry 为水平位置(列),addrx 为垂直位置(行))
********************************************************************************/
void LcmSetCurPoint(INT8U addrx, INT8U addry)
{
	INT16U wc;
	
	wc = ((INT16U)addrx)*2 + 1;
	wc <<= 8;
	wc += (INT16U)addry;
	LcmWrTwoPara(wc);
	LcmWrCmd(LCM_SET_CURS_POINT);
}
/*******************************************************************************
程序名:	LcmSetAddrPoint
说  明:	显示缓冲区地址指针设置
********************************************************************************/
void LcmSetAddrPoint(INT16U addr)
{
	LcmWrTwoPara(addr);
	LcmWrCmd(LCM_SET_ADDR_POINT);
} 
/*******************************************************************************
程序名:	LcmDataOnceIncWr
说  明:	一次写一字节数据,且完后,地址指针自动加一
********************************************************************************/
void LcmDataOnceIncWr(INT8U da)
{
	LcmWrOnePara(da); 
	LcmWrCmd(LCM_DATA_ONCE_INC_WR);
}
/*******************************************************************************
程序名:	LcmDataOnceIncWr
说  明:	一次写一字节数据,且完后,地址指针不变
********************************************************************************/
void LcmDataOnceOnlyWr(INT8U da)
{
	LcmWrOnePara(da); 
	LcmWrCmd(LCM_DATA_ONCE_ONLY_WR);
} 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*******************************************************************************
程序名:	GraphChar0808
说  明:	图形方式写一个8x8 ascii字符 ,(addrx,addry)为位置,da为写入字符 ,y_n_bit为正反显标志
********************************************************************************/ 
void GraphChar0808(INT8U addrx, INT8U addry, INT8U da, BOOLEAN y_n_bit)
{
	INT8U i;
	INT16U wc;
	
	wc = ((INT16U)addrx) * HT6963C_GRAPH_Y*8 + (INT16U)addry;
	ReadZK(1, da, 0, y_n_bit);
	
	for(i=0; i<8; i++)
	{
		LcmSetAddrPoint(wc + HT6963C_GRAPH_HOME_ADDDR + i * HT6963C_GRAPH_Y);
		LcmDataOnceOnlyWr(chZK[i]);
	}
}
/*******************************************************************************
程序名:	GraphChar0816
说  明:	图形方式写一个8*16 ascii字符 ,(addrx,addry)为位置,da为写入字符 ,y_n_bit为正反显标志
********************************************************************************/	

INT8U ConvertXAChar1(INT8U da)
{
  SfrByte = da;	
  if(!(SB0 ^ SB7)); else { SB0 = ~SB0;SB7 = ~SB7;}
  if(!(SB1 ^ SB6)); else { SB1 = ~SB1;SB6 = ~SB6;}
  if(!(SB2 ^ SB5)); else { SB2 = ~SB2;SB5 = ~SB5;}
  if(!(SB3 ^ SB4)); else { SB3 = ~SB3;SB4 = ~SB4;}
  
  return(SfrByte);
}

void GraphChar0816(INT8U addrx,INT8U addry,INT8U da,BOOLEAN y_n_bit)
{
	INT8U i;
	INT16U wc;
  
	wc = (INT16U)addrx * HT6963C_GRAPH_Y * 16 + (INT16U)addry;
	ReadZK(2, da, 0, y_n_bit);
	for(i=0; i<16; i++)
	{
		LcmSetAddrPoint(wc + HT6963C_GRAPH_HOME_ADDDR + i * HT6963C_GRAPH_Y);
		LcmDataOnceOnlyWr(ConvertXAChar1(chZK[i]));
	}
}	
/*******************************************************************************
程序名:	GraphChar1616
说  明:	写一汉字在位置(addrx,addry),汉字区号为da1,位号为da2 ,y_n_bit为正反显标志
********************************************************************************/	
void GraphChar1616(INT8U addrx, INT8U addry, INT8U da1, INT8U da2, BOOLEAN y_n_bit)
{
	INT8U i, j;
	INT16U wc;
		
	ReadZK(3, da1, da2, y_n_bit);
	wc = (((INT16U)addrx) * HT6963C_GRAPH_Y)*16 + ((INT16U)addry)*2;
	for(i=0; i<16; i++)	  
	{
		LcmSetAddrPoint(wc + HT6963C_GRAPH_HOME_ADDDR + i * HT6963C_GRAPH_Y);
		j = i<<1;
		LcmDataOnceIncWr(chZK[j]);
		LcmDataOnceIncWr(chZK[j+1]);
	}
}
/*******************************************************************************
程序名:	GraphStr0816
说  明:	图形方式写一个8x16 ascii字符串 ,(addrx,addry)为起始位置,
			*p为写入字符串指针 ,y_n_bit为正反显标志 num为最多显示的字符数
********************************************************************************/
void GraphStr0816(INT8U addrx, INT8U addry, INT8U *p, BOOLEAN y_n_bit, INT8U num)
{
	INT8U i,j,k,n=0;
	
	k = addry;
	for(i = addrx; i < HT6963C_GRAPH_HALFX; i++)	//不能超过一屏的范围
	{
		for(j = k; j < HT6963C_GRAPH_Y; j++)
		{
        	if(*p == 0x0)return;
        	GraphChar0816(i, j, *p++, y_n_bit);
        	n++;
        	if(n == num)return;
     	}
     	k = 0;
	}      
}
/*******************************************************************************
程序名:	GraphStr1616
说  明:	图形方式写一个汉字串 ,(addrx,addry)为起始位置,
			*p为写入汉字串指针 ,y_n_bit为正反显标志
********************************************************************************/
void GraphStr1616(INT8U addrx, INT8U addry, INT8U *p, BOOLEAN y_n_bit)
{
	INT8U i,j,k;
	
	k = addry;
	for(i = addrx; i < HT6963C_GRAPH_HALFX; i++)
	{
		for(j = k; j < HT6963C_GRAPH_HALFY; j++)
		{
			if(*p == 0x0)	return;
			GraphChar1616(i, j, *p++, *p++, y_n_bit);
     	}
     	k = 0;
	}      
}
/*******************************************************************************
程序名:	GraphDSChin
说  明:	图形方式写一个数字汉字串 ,(addrx,addry)为起始位置,
			*p为写入汉字串指针 ,y_n_bit为正反显标志
********************************************************************************/
void GraphDS1616(INT8U addrx, INT8U addry, INT8U *p, BOOLEAN y_n_bit)
{
	INT8U i,j,k;
	
	k = addry;
	for(i = addrx; i < HT6963C_GRAPH_HALFX; i++)
	{
		for(j = k; j < HT6963C_GRAPH_HALFY; j++)
		{
			if(*p == 0x0)return;
			GraphChar1616(i, j, 0x23, *p++, y_n_bit);
     	}
     	k = 0;
	}      
}
/*******************************************************************************
程序名:	ClearLcm
说  明:	清屏
********************************************************************************/
void ClearLcm(void)
{
	INT16U i;
	
	LcmSetAddrPoint(HT6963C_GRAPH_HOME_ADDR);								//清除图像
	for(i=0; i<HT6963C_GRAPH_Y * HT6963C_GRAPH_X * 8; i++)
		LcmDataOnceIncWr(0x00);
		
	LcmSetAddrPoint(HT6963C_TEXT_HOME_ADDR);								//清除文本
	for(i = 0; i < HT6963C_TEXT_Y * HT6963C_TEXT_X + 30; i++)
		LcmDataOnceIncWr(0x00);
}
/*******************************************************************************
程序名:	OutBmp
说  明:	开机界面
********************************************************************************/ 
void OutBmp(INT8U start_col,INT8U start_row,INT8U col,INT8U row)
{
    INT16U offset,k = 0;
    INT8U i,j;

	col = col;
	row = row;
    offset = HT6963C_GRAPH_HOME_ADDDR + 480 + start_row * 30 + start_col;       //30=1(rows)*30(bytes)
    LcmSetAddrPoint(offset);

	for(i = 0; i< 80; i++)
	{
		ReadZK(0, i, 0, 1);
		for(j=0; j<30; j++)
		{
			LcmDataOnceIncWr(chZK[j]);
		}
		delay_10ms();
		offset += 30;
		LcmSetAddrPoint(offset);
	}
}
/*******************************************************************************
程序名:	InitLcm
说  明:	液晶屏初始化
********************************************************************************/  
void InitLcm(void)
{	
	LcmWrTwoPara(HT6963C_GRAPH_HOME_ADDR);		//设置图形界面首地址
	LcmWrCmd(LCM_SET_GRAPH_HOME_ADDR);

	LcmWrTwoPara(HT6963C_GRAPH_Y & 0x00ff); 	 //图形显示区域设置设置--函数参数的低八位为区域值
	LcmWrCmd(LCM_SET_GRAPH_Y);
	
	LcmWrTwoPara(HT6963C_TEXT_HOME_ADDR);		//文本显示区首地址设置
	LcmWrCmd(LCM_SET_TEXT_HOME_ADDR);
	
	LcmWrTwoPara(HT6963C_TEXT_Y & 0x00ff);		//文本显示区域设置--函数参数的低八位为区域值
	LcmWrCmd(LCM_SET_TEXT_Y);			   	
	
	LcmWrCmd(LCM_SET_DISP_MODE+8);				//图形方式开

	LcmWrCmd(LCM_SET_CGROM_MODE_OR);
	
	LcmWrCmd(LCM_SET_CURS_FIGU+0);				//光标形状设置,1行光标

	ClearLcm();									//清显示屏
}
/*******************************************************************************
程序名:	ClearGraph
说  明:	清除图像
********************************************************************************/
void ClearGraph(void)
{
	INT16U i;
	
	LcmSetAddrPoint(HT6963C_GRAPH_HOME_ADDDR + 480);
	for(i = 0; i < HT6963C_OPER_AREA; i++)
		LcmDataOnceIncWr(0x0);
}

void CheckGraph(void)
{
	INT8U i;

	ClearGraph();
	OutBmp(0,0,30,80);
	delay_1sec();
	delay_1sec();
	delay_1sec();
	ClearGraph();
	for(i=0; i<10; i++)
	{
		GraphChar0808(2, i, i+0x30, 1);
		GraphChar0808(3, i, i+0x40, 1);
	}
	delay_1sec();
	delay_1sec();
	delay_1sec();
	ClearGraph();
	GraphStr1616(1, 0, "以热爱祖国为荣,以危害祖国为耻以服务人民为荣,以背离人民为耻以崇尚科学为荣,以愚昧无知为耻以辛勤劳动为荣,以好逸恶劳为耻以团结互助为荣,以损人利己为耻", 1);
	delay_1sec();
	delay_1sec();
	delay_1sec();
}

⌨️ 快捷键说明

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