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

📄 lcd.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 2 页
字号:
		  	wrt_lcd_cmd(0x40);               //设置DDRAM中的页地址(Y地址)

			for(j=0;j<64;j++)
			{
				//输入一区中的一逻辑行
				//send_str(1, p);
				//_nop_();
				_nop_();
		  	  	wrt_lcd_data(*p);
				p++;
			}
		}
		xaddr++;
		k--;
	}while(k!=0);
	select_p(3);
}
//=====================================================================================
/*
void write_lcd_mem1(uchar xaddr,uchar yaddr,uchar len,uchar xdata *disbuf)
{
	uchar i;
	uchar j;
	uchar k;
	uchar xdata *p;
	uchar templen;
    templen=len;
	p=&disbuf[xaddr*192+yaddr*8];                 
	xaddr=xaddr+0xb8;                      //设置DDRAM中的页地址(X地址)
	k=2;
	do                                     //输入全屏
	{
		if(xaddr>0x0bf) break;
	  	i=0;
	  	do                                 //输入一逻辑行
		{
		    if(yaddr/8)i+=yaddr/8;
	  	  	select_p(i);                  //选第几部分共3部分每部分64列
			wrt_lcd_cmd(0xc0);               //第0行显示
		  	wrt_lcd_cmd(xaddr);              //设置DDRAM中的页地址(X地址)
		  	wrt_lcd_cmd(0x40+(yaddr%8)*8);               //设置DDRAM中的页地址(Y地址)
		  	j=0;
		  	do                             //输入一区中的一逻辑行
			{
		  	  	wrt_lcd_data(*p);
		  	  	j++;
				if((j%8)==0)templen--;
				if(templen==0){break;}
				p++;                      //偶数位对应偶数16行
			}while(j<64);
			
			if(templen==0){break;}
		  	i++;
		}while(i<3);
		xaddr++;
		templen=len;
	    p=&disbuf[(xaddr-0xb8)*192+yaddr*8];
		k--;
	}while(k!=0);
	select_p(3);
}
*/
/******************************************************************/
/* 函数功能:清LCD模块显示                                        */
/* 入口参数:                                                     */
/*       xaddr  清显起始行(0~3)                                   */
/*       num    清显行数(1~(8-(xaddr)/2))                         */
/******************************************************************/
void clear_lcd(uchar addr,uchar  num)
{
	uchar xdata i;
	uchar xdata *p;
	uchar xdata buf[1536];
	addr*=2;
	p=&buf[addr*192];//一行为192个BYTE共8行

	while(num!=0)
	{
		i=192;
		do
		{                         //清两行一行汉字
		  	*p=0x00;            //第一行
		  	p++;
		  	*p=0x00;             
		  	p++;                  
		  	i--;
		}while(i!=0);

		write_lcd_mem(addr,buf);   //清两行一行汉字
		addr+=2;                  //清两行一行汉字
		if(addr>7) break;
		num--;
	}
}


/****************************************************************************/
/* 函数功能:LCD模块放大显示                                                */
/* 入口参数:                                                               */
/* xaddr 显示起始行地址 0~3                                                 */
/* n     显示起始列地址 0~23                                                */
/* bx    放大控制                                                           */
/*         0 长放大1倍(汉字:12*2;ASCII码:24*2);                            */
/*         1 宽放大1倍(汉字:6*4;ASCII码:12*4);                             */
/*         >1 长和宽都放大1倍(汉字:6*2;ASCII码:12*2);                      */
/* *buf  进行放大显示的AscII码或汉字内码数据                                */
/****************************************************************************/
/*void bigx1(uchar xaddr,uchar n,uchar bx,uchar xdata *buf)
{
	uchar i;
	uchar leng;
	uchar xdata *p;
	uchar xdata c_buf[1536];
    uchar xdata l_temp[50];         //暂存寄存数组
    uchar xdata m_buf[1024];        //点阵显示数据暂存寄存数组

	leng=strlen(buf);
	i=24-n;
  	if(bx!=0) i=i/2;
  	if(leng>i) leng=i;
  	convert(buf,m_buf);                    //转化显示代码
  	
  	p=&c_buf[xaddr*192+n*16];
  	buf=m_buf;
  	while(leng!=0)
	{
  	  	switch(bx)
		{
  	  	  	case 0:
  	  	  	    bighx1_a(buf,p);
  	  	  	    p+=16;
  	  	  	    break;
  	  	  	case 1:
  	  	  	    bigwx1_a(buf,p);
  	  	  	    p+=32;
  	  	  	    break;
  	  	  	default:
  	  	  	    bigwx1_a(buf,l_temp);
  	  	  	    bighx1_a(&l_temp[0],p);
  	  	  	    p+=16;
  	  	  	    bighx1_a(&l_temp[16],p);
  	  	  	    p+=16;
		}
  	    buf+=16;
  	    leng--;
	}
  	write_lcd_mem(xaddr,c_buf);                  //2002,12,31 升级修改
  	xaddr+=2;
  	if(bx!=1) write_lcd_mem(xaddr,c_buf);
}
*/

/******************************************************************/
/* 函数功能:LCD模块反显控制                                      */
/* 入口参数:                                                     */
/* xaddr 反显起始行地址 0~3                                       */
/* n     反显起始列地址 0~23                                      */
/* leng  反显区域长度   1~(24-n)                                  */
/******************************************************************/
void con_disp2(uchar xaddr,uchar yaddr,uchar length,uchar *buf)
{
	uchar i,xtemp;
	uchar xdata *p;

	
	uchar xdata c_buf[1536];
    uchar xdata l_temp[50];         //暂存寄存数组

 
	memset(c_buf,0,1536);
    xaddr*=2;  
	p=&c_buf[(uint)xaddr*192];
	xtemp=xaddr;
    i=0;
	while(i<24)                          //把输入的字符串(*buf)分成24字节长一组(一行)存到l_temp数组中
	{                                 //分成24字节一组由分隔符(\r)控制,用户输入数据到buf时必须给出
		if(*buf==0) {break;}   //显示数据取完
		l_temp[i]=*buf;
		buf++;
		i++;
	}
	l_temp[i]=0;                        //以'\0'作为一组的结束标志
	convert(l_temp,p);                  //转化显示代码并存到c_buf中
	con_data(length*8,p+(uint)yaddr*8);
	con_data(length*8,p+(uint)yaddr*8+192);
	write_lcd_mem(xtemp,c_buf);
}



//=================================================================================
void con_disp(uchar xaddr,uchar yaddr,uchar length,uchar *buf)
{
	uchar i,xtemp;
//	uchar EAStatus;
	uchar xdata *p;
	bit final=0;                            //内部显示内码数据映射寄存区结束标志位
	bit single;
	
	uchar xdata c_buf[1536];
    uchar xdata l_temp[50];         //暂存寄存数组
    
//    EAStatus = EA;
	//EA = 0;
    //i=length;
	//_lcd_cmd(0x3f);   //开显示
    //_nop_ ( );
	//_lcd_cmd(0x0c0); //设置显示起始行第0行开始	
	memset(c_buf,0,1536);
	if(yaddr%2) single=1;
	else single=0;
    xaddr*=2;
	p=&c_buf[(xaddr*192)+16*yaddr];
	xtemp=xaddr;
    //xtemp*=2;
	while(xtemp<8)
	{
	  	i=0;
		while(1)                            //把输入的字符串(*buf)分成24字节长一组(一行)存到l_temp数组中
		{                                 //分成24字节一组由分隔符(\r)控制,用户输入数据到buf时必须给出
	  	  	//if(*buf==0) {final=1;break;}   //显示数据取完
	  	  	if(*buf==0x0d) {final=1;buf++;break;}
			if(is_chinese(buf))
			{
				;
			}
			else
			{
				if(single) single=0;
				else single=1;				
			}
			
			if((yaddr+i)==23)
			{
				if((single)&&(*buf>=0xa0)) {l_temp[i]=' ';i++;break;}
			}
  	  		if((yaddr+i)>23) break;
  	  		l_temp[i]=*buf;
  	  		buf++;
	  		i++;
		}
	  	l_temp[i]=0;                        //以'\0'作为一组的结束标志
	  	
	  	convert1(l_temp,p,length);                  //转化显示代码并存到c_buf中

	  	write_lcd_mem(xtemp,c_buf);//write_lcd_mem(xaddr);               //2002,12,31 升级修改

	  	if(final) break;
	  	
	  	p+=384;
	  	xtemp+=2;
	}
//	EA = EAStatus;
}

/******************************************************************/
/* 函数功能:LCD模块显示(汉字16X16 AscII码8X8)                    */
/* 入口参数:                                                     */
/* xaddr 显示起始行地址 0~3                                       */
/* n     显示起始列地址 0~23                                      */
/* *buf  显示AscII码或汉字内码数据(最大为 4*25 ASCII码字符串)     */
/******************************************************************/

void lcd_disp(uchar xaddr,uchar yaddr,uchar *buf)
{
	uchar i,xtemp;
	//uchar EAStatus;
	uchar xdata *p;
	bit final=0;                            //内部显示内码数据映射寄存区结束标志位
	bit single;

	uchar xdata c_buf[1536];
    uchar xdata l_temp[50];         //暂存寄存数组
    //EAStatus = EA;
	//EA = 0;
		
    init_lcd(0x3f);   //开显示
    _nop_ ( );
	init_lcd(0x0c0); //设置显示起始行第0行开始
	memset(c_buf,0,1536);
	if(yaddr%2) single=1;
	else single=0;
    xaddr*=2;
	p=&c_buf[(xaddr*192)+16*yaddr];
	xtemp=xaddr;

	while(xtemp<8)
	{
	  	i=0;
		while(1)							//把输入的字符串(*buf)分成24字节长一组(一行)存到l_temp数组中
		{									//分成24字节一组由分隔符(\r)控制,用户输入数据到buf时必须给出
	  	  	if(*buf==0) {final=1;break;}	//显示数据取完
	  	  	if(*buf=='\r') {buf++;break;}
			if(is_chinese(buf))
			{
				single=0;
			}
			else
			{
				single=1;
			}
			
			if((yaddr+i)==23)
			{
				if(single==0)
				{
					l_temp[i]=' ';
					i++;
					break;
				}
			}
			
  	  		if((yaddr+i)>23)
  	  			break;
  	  			
  	  		if(single==0)
  	  		{
	  	  		l_temp[i]=*buf;
	  	  		buf++;
		  		i++;
  	  		}
  	  		
  	  		l_temp[i]=*buf;
  	  		buf++;
	  		i++;
		}
		
	  	l_temp[i]=0;                        //以'\0'作为一组的结束标志

	  	convert(l_temp,p);                  //转化显示代码并存到c_buf中	    

	  	write_lcd_mem(xtemp,c_buf);//write_lcd_mem(xaddr);	/*2002,12,31 升级修改*/

	  	if(final) break;

	  	p+=384;
	  	xtemp+=2;
	}
    //EA = EAStatus;
}

⌨️ 快捷键说明

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