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

📄 lcm240128.c

📁 完整的LM240128的显示程序,可以通过修改程序中的变量来改变显示内容,P89C668环境,其他51内核单片机均可移植,也可以加入控制程序在不同的情况下显示不同的内容.经过调试可用.
💻 C
📖 第 1 页 / 共 4 页
字号:
	 	fnPR12(LC_AUT_OVR);      	// 自动写结束
		fnSetPos(uRow+j+1,uCol);
	}
  
  	fnPR1(LC_ADD_POS,0x00,0x00);  	// 重置地址指针
  	gCurRow = 0;        		// 置地址指针存储变量
  	gCurCol = 0;
}
/********************************************************/
/* LCM 初始化            				*/
/********************************************************/
char fnLCMInit(void)
{
  	if(fnPR1(LC_TXT_STP,0x00,0x00) != 0)  	// 文本显示区首地址
    		return (0xff);
  	fnPR1(LC_TXT_WID,0x1E,0x00);    	// 文本显示区宽度
  	fnPR1(LC_GRH_STP,0x00,Addr_High>>8);    	// 图形显示区首地址(cmd,Low,High)
  	fnPR1(LC_GRH_WID,0x1e,0x00);    	// 图形显示区宽度
  	fnPR12(LC_CUR_SHP | 0x01);    		// 光标形状
 	fnPR12(LC_MOD_OR);      		// 显示方式设置
//		fnPR12(LC_MOD_TCH);
  	fnPR12(LC_DIS_SW | 0x0f);    		// 显示开关设置
  	fnPR1(0x21,0,0);
  	return 0;
}
/********************************************************/
/* ASCII(8*16) 及 汉字(16*16) 显示函数      */
/********************************************************/
uchar dprintf(uchar x,uchar y, char *ptr)
{

  	uchar  c1,c2,cData;
  	uchar i,j,uLen,uRow,uCol;
  	uint  k;
	char *ptr2;
    	uLen=0;
    	i=0;
  	uRow = y;
  	uCol = x;
  	fnSetPos(uRow*16,uCol);      					//起点定位
  	while (ptr[uLen]!=0){uLen++;};    				//探测字串长度
	if(DispFlag==1)
		ptr2=ASC_MSK;
	else
		ptr2=ASC_MSK_FAN;
  	while(i<uLen)
  	{
    		c1 = ptr[i];
    		c2 = ptr[i+1];
//ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
    		uRow = fnGetRow();    
    		uCol = fnGetCol();
    		if(c1 <=128)          					// ASCII
      		{
      			for(j=0;j<16;j++)      				//写16行
        		{
        			fnPR12(LC_AUT_WR);    			// 写数据(命令)
        			if (c1 >= 0x20)/*为字符*/
          			{
            				fnPR13(ptr2[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
          			}
        			else
          				fnPR13(cData);
         			fnPR12(LC_AUT_OVR);  			//写数据结束
                    		fnSetPos(uRow+j+1,uCol);
        		}
        		if(c1 != BS)      				// 非退格
          			uCol++;      				// 列数加1
      		}
    		else           						// 中文
      		{
      			for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)  	// 查找定位
        		{
        			if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
          				break;
        		}
      			for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
        		{
        			fnSetPos(uRow+k,uCol);
        			fnPR12(LC_AUT_WR);      		// 写数据
        			if(j < sizeof(GB_16)/sizeof(GB_16[0]))
          			{
          				fnPR13(GB_16[j].Msk[k*2]);
          				fnPR13(GB_16[j].Msk[k*2+1]);
          			}
        			else      				// 未找到该字
          			{
          				if(k < sizeof(GB_16[0].Msk)/4)
            				{
            				fnPR13(0x00);
            				fnPR13(0x00);
            				}
         				else
            				{
            					fnPR13(0xff);
						fnPR13(0xff);
            				}
          			}
        			fnPR12(LC_AUT_OVR);
        		}
      			uCol += 2;
      			i++;
      		};
    		if(uCol >= 30)      					// 光标后移
      		{
      			uRow += 16;
      			if(uRow < 0x80)
        		uCol -= 30;
      			else
        		{
        			uRow = 0;
        			uCol = 0;
        		}
      		}
    		fnSetPos(uRow,uCol);
    		i++;
  	}
	return uLen;        //返回字串长度,汉字按2字节计算
}  

/*==============================*/
/* 延时        */
/*==============================*/
void shortdelay(uint tt)
{
	uchar i;
        while (tt)
	{
		i=100;
                while (i)i--;
                tt--;
        };
}        



        
/****************************************************************************
Function:hextobcd
Parameter:unsigned int
Retrun:void
Description:输入一个十六进制,返回BCD码
*****************************************************************************/
void hextobcd(unsigned int hex_data)
{
	uchar i,j;
	if(hex_data>=10000)
		{
			j=4;
		    k[0]=(hex_data)/10000;
			k[1]=(hex_data-k[0]*10000)/1000;
			k[2]=(hex_data-k[0]*10000-k[1]*1000)/100;
			k[3]=(hex_data-k[0]*10000-k[1]*1000-k[2]*100)/10;
			k[4]=hex_data-k[0]*10000-k[1]*1000-k[2]*100-k[3]*10;
			for(i=0;i<=4;i++)
				k[i]=k[i]+0x30;
		}
	else if(hex_data>=1000)
		{
			j=3;
		    k[0]=0x20;
			k[1]=(hex_data)/1000;
			k[2]=(hex_data-k[1]*1000)/100;
			k[3]=(hex_data-k[1]*1000-k[2]*100)/10;
			k[4]=hex_data-k[1]*1000-k[2]*100-k[3]*10;		
			for(i=1;i<=4;i++)
				k[i]=k[i]+0x30;
		}
	else if(hex_data>=100)
		{
			j=2;
			k[0]=0x20;
		    k[1]=0x20;
			k[2]=(hex_data)/100;
			k[3]=(hex_data-k[2]*100)/10;
			k[4]=hex_data-k[2]*100-k[3]*10;	
			for(i=2;i<=4;i++)
				k[i]=k[i]+0x30;		
		}
	else if(hex_data>=10)
		{
			j=1;
			k[0]=0x20;
		    k[1]=0x20;
		    k[2]=0x20;
			k[3]=(hex_data)/10;
			k[4]=hex_data-k[3]*10;			
			for(i=3;i<=4;i++)
				k[i]=k[i]+0x30;
		}
	else
		{
			j=0;
			k[0]=0x20;
		    k[1]=0x20;
		    k[2]=0x20;
			k[3]=0x20;
			k[4]=hex_data;			
			for(i=4;i<=4;i++)
				k[i]=k[i]+0x30;
		}
	   k[5]=0x20;
	   if(Uc_Status2==1)/*Freq*/
	   		{
				k[5]=k[4];
				k[4]=0x2e;
				if(k[3]==0x20)
					{
						k[3]=0x30;
					}
			}
		else if(Uc_Status2==2)/*Chain*/
			{
				k[5]=k[4];
				k[4]=k[3];
				k[3]=k[2];
				k[2]=k[1];
				k[1]=k[0];
				k[0]=0x20;
			}
		else if(Uc_Status2==3)/*dBm*/
			{
				k[5]=k[4];
				k[4]=0x2e;
				if(k[3]==0x20)
					{
						k[3]=0x30;
					}							
			}
		else if(Uc_Status2==4)/*mW*/
			{
				k[5]=k[4];
				k[4]=0x2e;
				if(k[3]==0x20)
					{
						k[3]=0x30;
					}					
			}
		else if(Uc_Status2==5)/*SC, 只有三个位*/
			{
				k[5]=k[4];
				k[4]=k[3];
				k[3]=k[2];
				k[2]=k[1];/*0x20*/
				k[6]=0;/*结束字符*/
			}
		else if(Uc_Status2==6)/*Actural Pwr*/
			{
				k[5]=k[4];
				k[4]=0x2e;
				if(k[3]==0x20)
					{
						k[3]=0x30;
					}							
			}
}       

/****************************************************************************
Function:int_hextobcd
Parameter: int
Retrun:void
Description:输入一个十六进制,返回BCD码
*****************************************************************************/
void int_hextobcd(int hex_data)
{
	uchar i,j;
	uint m;
	if(hex_data>=10000)
		{
			m=hex_data;
			j=4;
		    k[0]=(m)/10000;
			k[1]=(m-k[0]*10000)/1000;
			k[2]=(m-k[0]*10000-k[1]*1000)/100;
			k[3]=(m-k[0]*10000-k[1]*1000-k[2]*100)/10;
			k[4]=m-k[0]*10000-k[1]*1000-k[2]*100-k[3]*10;
			for(i=0;i<=4;i++)
				k[i]=k[i]+0x30;
		}
	else if(hex_data>=1000)
		{
			m=hex_data;
			j=3;
		    k[0]=0x20;
			k[1]=(m)/1000;
			k[2]=(m-k[1]*1000)/100;
			k[3]=(m-k[1]*1000-k[2]*100)/10;
			k[4]=m-k[1]*1000-k[2]*100-k[3]*10;		
			for(i=1;i<=4;i++)
				k[i]=k[i]+0x30;
		}
	else if(hex_data>=100)
		{
			m=hex_data;
			j=2;
			k[0]=0x20;
		    k[1]=0x20;
			k[2]=(m)/100;
			k[3]=(m-k[2]*100)/10;
			k[4]=m-k[2]*100-k[3]*10;	
			for(i=2;i<=4;i++)
				k[i]=k[i]+0x30;		
		}
	else if(hex_data>=10)
		{
			m=hex_data;
			j=1;
			k[0]=0x20;
		    k[1]=0x20;
		    k[2]=0x20;
			k[3]=(m)/10;
			k[4]=m-k[3]*10;			
			for(i=3;i<=4;i++)
				k[i]=k[i]+0x30;
		}
	else if(hex_data>=0)
		{
			m=hex_data;
			j=0;
			k[0]=0x20;
		    k[1]=0x20;
		    k[2]=0x20;
			k[3]=0x20;
			k[4]=m;			
			for(i=4;i<=4;i++)
				k[i]=k[i]+0x30;
		}
	else/*小于0*/
		{
			m=hex_data*(-1);
			if(m==100)
				{
				j=2;
				k[0]=0x20;
			    k[1]=0x2d;
				k[2]=(m)/100;
				k[3]=(m-k[2]*100)/10;
				k[4]=m-k[2]*100-k[3]*10;	
				for(i=2;i<=4;i++)
					k[i]=k[i]+0x30;		
					}
			else
				{
					j=1;
					k[0]=0x20;
				    k[1]=0x20;
				    k[2]=0x2d;
					k[3]=(m)/10;
					k[4]=m-k[3]*10;			
					for(i=3;i<=4;i++)
						k[i]=k[i]+0x30;
				}
		}
	   k[5]=0x20;
	if(Uc_Status2==3)/*dBm*/
			{
				k[5]=k[4];
				k[4]=0x2e;
				if(k[3]==0x20)
					{
						k[3]=0x30;
					}										
			}
	
}               

⌨️ 快捷键说明

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