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

📄 m12232a.c

📁 液晶12232A程序
💻 C
📖 第 1 页 / 共 4 页
字号:
				a1&=(~Lcd_Mask);//屏蔽清除上次显示的数据
				a1|=(a2&Lcd_Mask);
				lcdwd(a1);
				ly+=p;//退出显示处理
				Lcd_CurrentY+=p;//
			}
			else{//正常显示----step2
				lcdwd(a2);
				ly+=8;
				Lcd_CurrentY+=8;
			}
			a1=*s;//当前显示字库值
		}
	}
	Lcd_CurrentY=y;
}

/************************************************************************
函数名:
参数:
功能:显示汉字
返回值:
************************************************************************/
void displaychinesechardot(uchar Index){
	uchar code *s;
	s=ChineseCharDot+Index*CHINESECHARDOTSIZE;{  //赋值汉字点阵首地址(数组名+  )
		if(Lcd_CurrentX>LCD_RIGHT-CHINESECHARSIZE+1){//列溢出判断
			Lcd_CurrentX=LCD_LEFT;
			Lcd_CurrentY+=CHINESECHARSIZE;
			if(Lcd_CurrentY>LCD_BOTTOM-CHINESECHARSIZE+1){//行溢出判断
				Lcd_CurrentY=LCD_TOP;
			}
		}
		putsizeimage(CHINESECHARSIZE,CHINESECHARSIZE,s);
	}
}

/************************************************************************
函数名:
参数:
功能:显示英文字符
返回值:
************************************************************************/
void displayenglishchardot(uchar Index){
	uchar code *s;
	s=EnglishCharDot+Index*ENGLISHCHARDOTSIZE;  //显示字符地址=首地址+显示字符对应的位置号X显示字符的大小值.
	if(Lcd_CurrentX>LCD_RIGHT-ENGLISHCHARSIZE+1){//字符不够空间显示则换一行显示.
		Lcd_CurrentX=LCD_LEFT;
		Lcd_CurrentY+=CHINESECHARSIZE;
		if(Lcd_CurrentY>LCD_BOTTOM-CHINESECHARSIZE+1){//字符不够空间显示则回到起始位置显示
			Lcd_CurrentY=LCD_TOP;
		}
	}
	putsizeimage(ENGLISHCHARSIZE,CHINESECHARSIZE,s);
}

/************************************************************************
函数名:
参数:
功能:信息显示
返回值:
************************************************************************/
void putchar(uchar cTemp){
	uint i;
	if(cTemp<128){
		for(i=0;i!=ENGLISHCHARNUMBER;i++){
			DogReset();
			if(cTemp==EnglishCode[i]){ //判断显示的ASCII字符对应的索引值是否存在
				displayenglishchardot(i);
				break;
			}
		}
	}
	else{
		for(i=0;i!=CHINESECHARNUMBER;i++){
			DogReset();
			if(cTemp==ChineseCode[i]){//判断显示的汉字字符对应的索引值是否存在
				displaychinesechardot(i);
				break;
			}
		}
	}
}
/************************************************************************
函数名:
参数:
功能:显示汉字或英文字符
返回值:
************************************************************************/
void put_str(uchar idata *s){
	uint i;
	uchar *p;
	p=s;
	for(;*p!=0;p++){//判断字符串,'\0'为结束标志.
		i=*p;
		if(*p>127){ //小于等于127表示ASCII内的字符.大于为汉字字符.
			p++;
			i=i*256+*p;//先获取高字节,再得到低字节.(汉字符2字节)
		}
		if(i=='\n'){ //换行
			Lcd_CurrentX=LCD_LEFT;
			if(Lcd_CurrentY>LCD_BOTTOM-CHINESECHARSIZE+1){//行溢出判断
				Lcd_CurrentY=LCD_TOP;
			}
			else{
				Lcd_CurrentY+=CHINESECHARSIZE;
			}
		}
		putchar(i);
	}
}

/************************************************************************
函数名:void put_str_xy(uchar x,uchar y,uchar idata *s);
参数:
功能:显示汉字或英文字符,写变量
返回值:
************************************************************************/
void put_str_xy(uchar x,uchar y,uchar idata *s){
	Lcd_CurrentX=x;
	Lcd_CurrentY=y;
	put_str(s);
}

/************************************************************************
函数名:
参数:
功能:显示汉字或英文字符
返回值:
************************************************************************/
void PutString(uchar code *s){
	uint i;
	for(;*s!=0;s++){
		DogReset();
		i=*s;
		if(*s>127){
			s++;
			i=i*256+*s;
		}
		if(i=='\n'){
			Lcd_CurrentX=LCD_LEFT;
			if(Lcd_CurrentY>LCD_BOTTOM-CHINESECHARSIZE+1){
				Lcd_CurrentY=LCD_TOP;
			}
			else{
				Lcd_CurrentY+=CHINESECHARSIZE;
			}
		}
		putchar(i);
	}
}

/************************************************************************
函数名:void WriteString(uchar x,uchar y,uchar code *s);
参数:
功能:显示汉字或英文字符,直接写字符串
返回值:
************************************************************************/
void WriteString(uchar x,uchar y,uchar code *s){
	Lcd_CurrentX=x;
	Lcd_CurrentY=y;
	PutString(s);
}

/************************************************************************
函数名:
参数:
功能:点
返回值:
************************************************************************/
void pointxy(uchar x,uchar y,uchar bitdata){
	uchar a1,p;
	Lcd_CurrentX=x;
	Lcd_CurrentY=y;
	lcdpos();
	p=(Lcd_CurrentY%8)&0x7;
	a1=lcdrd()&Mask1[p];
	if(bitdata>0){
		a1|=Mask2[p];
	}
	lcdwd(a1);
}

/************************************************************************
函数名:
参数:
功能:线
返回值:
************************************************************************/
void linexy(uchar x0,uchar y0,uchar x1,uchar y1,uchar bitdata){
	uchar i;
	uint k;
	if(abs(y1-y0)>abs(x1-x0)){
		if(y1>y0){
			for(i=y0;i<=y1;i++){
				DogReset();
				if(x1>x0){
					k=x1-x0;
					k*=(i-y0);
					k/=y1-y0;
					pointxy(x0+k,i,bitdata);
				}
				else{
					k=x0-x1;
					k*=(i-y0);
					k/=y1-y0;
					pointxy(x0-k,i,bitdata);
				}
			}
		}
		else{
			for(i=y0;i>=y1;i--){
				DogReset();
				if(x1>x0){
					k=x1-x0;
					k*=(y0-i);
					k/=y0-y1;
					pointxy(x0+k,i,bitdata);
				}
				else{
					k=x0-x1;
					k*=(y0-i);
					k/=y0-y1;
					pointxy(x0-k,i,bitdata);
				}
			}
		}
	}
	else{
		if(x1>x0){
			for(i=x0;i<=x1;i++){
				DogReset();
				if(y1==y0){
					pointxy(i,y0,bitdata);
				}
				else if(y1>y0){
					k=y1-y0;
					k*=(i-x0);
					k/=x1-x0;
					pointxy(i,y0+k,bitdata);
				}
				else{
					k=y0-y1;
					k*=(i-x0);
					k/=x1-x0;
					pointxy(i,y0-k,bitdata);
				}
			}
		}
		else{
			for(i=x0;i>=x1;i--){
				DogReset();
				if(y1==y0){
					pointxy(i,y0,bitdata);
				}
				 else if(y1>y0){
					k=y1-y0;
					k*=(x0-i);
					k/=x0-x1;
					pointxy(i,y0+k,bitdata);
				}
				 else{
					k=y0-y1;
					k*=(x0-i);
					k/=x0-x1;
					pointxy(i,y0-k,bitdata);
				}
			}
		}
	}
}

/************************************************************************
函数名:
参数:
功能:矩形
返回值:
************************************************************************/
void rect(uchar x0,uchar y0,uchar x1,uchar y1,uchar bitdata){
	linexy(x0,y0,x0,y1,bitdata);
	linexy(x0,y0,x1,y0,bitdata);
	linexy(x0,y1,x1,y1,bitdata);
	linexy(x1,y0,x1,y1,bitdata);
}

/**************************************************************************
*    函数原型: void delay_ms_ms(uint Count)
*    功    能: 延时Count个ms
**************************************************************************/
void delay_ms(register uint Count){

	register uchar T;

	for(;Count>0;Count--){
		for(T=0;T<250;T++){
#if STC89C58
#if STCSPD_1
			// STC89C58,22.1184MHz晶振,12分频,此时延时准确
			_nop_(); _nop_(); _nop_(); _nop_();
#elif STCSPD_2
			_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
			_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
			_nop_(); _nop_();
#endif
#elif W77E58
			_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
			_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
			_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
			_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
#endif
			}
		DogReset();
		}
}

/************************************************************************
函数名:
参数:
功能:片1测忙
返回值:
************************************************************************/
void lcdwaitidle1(void){
	DATA=0xff;
	A0PIN=0;
	CS1PIN=0;
	RDPIN=0;
	while((DATA&0x80)==0x80){
		DogReset();
	}
	RDPIN=1;
	CS1PIN=1;
}

/************************************************************************
函数名:
参数:
功能:片2测忙
返回值:
************************************************************************/
void lcdwaitidle2(void){
	DATA=0xff;
	A0PIN=0;
	CS2PIN=0;
	RDPIN=0;
	while((DATA&0x80)==0x80){
		DogReset();
	}
	RDPIN=1;
	CS2PIN=1;
}

/************************************************************************
函数名:
参数:
功能:写指令代码到片1
返回值:
************************************************************************/
void lcdwc1(uchar cmdcode){
	lcdwaitidle1();
	A0PIN=0;
	DATA=cmdcode;
	CS1PIN=0;
	WRPIN=0;
	_nop_();
	WRPIN=1;
	CS1PIN=1;
}

/************************************************************************
函数名:
参数:
功能:写指令代码到片2
返回值:
************************************************************************/
void lcdwc2(uchar cmdcode){
	lcdwaitidle2();
	A0PIN=0;
	DATA=cmdcode;
	CS2PIN=0;
	WRPIN=0;
	_nop_();
	WRPIN=1;
	CS2PIN=1;
}

/************************************************************************
函数名:
参数:
功能:写数据到片1
返回值:
************************************************************************/
void lcdwd1(uchar dispdata){
	lcdwaitidle1();
	A0PIN=1;
	DATA=dispdata;
	CS1PIN=0;
	WRPIN=0;
	_nop_();
	WRPIN=1;
	CS1PIN=1;
}

/************************************************************************
函数名:
参数:
功能:写数据到片2
返回值:
************************************************************************/
void lcdwd2(uchar dispdata){
	lcdwaitidle2();
	A0PIN=1;
	DATA=dispdata;
	CS2PIN=0;
	WRPIN=0;
	DATA=dispdata;
	_nop_();
	WRPIN=1;
	CS2PIN=1;
}

/************************************************************************
函数名:
参数:
功能:读片1数据
返回值:
************************************************************************/
uchar lcdrd1(void){
	uchar i;
	lcdwaitidle1();
	DATA=0xff;
	A0PIN=1;
	CS1PIN=0;
	RDPIN=0;
	_nop_();
	i=DATA;
	RDPIN=1;
	CS1PIN=1;
	return i;
}

/************************************************************************
函数名:
参数:
功能:读片2数据
返回值:
************************************************************************/
uchar lcdrd2(void){
	uchar i;
	lcdwaitidle2();
	DATA=0xff;
	A0PIN=1;
	CS2PIN=0;
	RDPIN=0;
	_nop_();
	i=DATA;
	RDPIN=1;
	CS2PIN=1;
	return i;
}

/************************************************************************
函数名:
参数:
功能:写指令代码
返回值:
************************************************************************/
void lcdwc(uchar cmdcode){
	if((Lcd_CurrentX)<61){
		lcdwc1(cmdcode);
	}
	else{
		lcdwc2(cmdcode);
	}
}

/************************************************************************
函数名:
参数:
功能:写数据

⌨️ 快捷键说明

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