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

📄 lcd.c

📁 主机板测试机的液晶显示程序; 运行平台STC89C516;开发软件为KEIL 目标器件为19264
💻 C
📖 第 1 页 / 共 3 页
字号:

//================================================================
//  KS0107寄存器初始化函数
//================================================================
void Init_0107()
{ 
	bRET=0;
	nc(10);;
	bRET=1;
	nc(10);
	bCS1=0;
	bCS2=0;
	bCS3=0;
	nc(10);
	Write_0107_Reg(Set_Disp_Off);
	nc(10);
	Write_0107_Reg(Set_Start_Line);
	nc(10);
	Write_0107_Reg(Set_Page);
	nc(10);
	Write_0107_Reg(Set_Column);
	nc(10);
	Write_0107_Reg(Set_Disp_On);
	nc(10);
}
//================================================================
//  清除KS0107显示存储器
//================================================================
Clr_Screen(BYTE bData_clr)
{ 
	unsigned char j,k;

	bCS1=0;
	bCS2=0;
	bCS3=0;
	delay(2);
 	for(k=0;k<8;k++)
 	{
  		Write_0107_Reg(Set_Page+k);
  		nc(1);
  		Write_0107_Reg(Set_Column);
  		for(j=0;j<64;j++) Write_0107_Data(bData_clr);
 	}
}
Clr_x_y_Screen(unsigned char x,unsigned char y,unsigned char n,BYTE bData_clr)
{
	unsigned char i;
	unsigned char j;

	for(i=0;i<n;i++)
		for(j=0;j<8;j++)
			lw(x*8+i*8+j+1,y,bData_clr);
}
//忙判别
void lcd_busy(void) 
{
 	bDI=0;
 	bRW=1;
 	Lcd_Bus=0xFF;
 	while (1) 
 	{
  		bRWE=1;
  		if (Lcd_Bus<0x80) break;
  		bRWE=0;
 	} 
 	bRWE=0;
}
//设置xy
void set_xy(unsigned char x,unsigned char y) 
{
	if (x>=64) 
 	{
 		if(x>=128)
 		{
 			bCS1=1;
 			bCS2=1;
 			bCS3=0; 			
 		}
 		else
 		{
 			bCS1=1;
 			bCS3=1; 
 			bCS2=0;			
 		}
 	} 
 	else 
 	{
 		bCS3=1;
 		bCS2=1;
 		bCS1=0;
 	}
 	x=x % 128;
 	lcd_busy();

	bRWE=1;

 	bDI=0;
 	bRW=0;
 	Lcd_Bus=0x40|x;

 	nc(2);
 	bRWE=0;
	nc(2);

 	lcd_busy();

	bRWE=1;
 	bDI=0;
 	bRW=0;
 	nc(2);

 	Lcd_Bus=0xb8|y;

 	
 	bRWE=0;
 	nc(2);

 	Lcd_Bus=0xFF;
 	nc(2);

}
 void lw(unsigned char x,unsigned char y,unsigned char dd) 
{
 	set_xy(x,y);
 	lcd_busy();
 	bDI=1;
 	bRW=0;
 	Lcd_Bus=dd;
 	bRWE=1;
 	bRWE=0;
 	Lcd_Bus=0xff;
}
void da(unsigned char x,unsigned char y,unsigned char n,unsigned char fb) 
{
 	unsigned char i,dd;
 	n-=32;
 	if (n>128) 
 		n=0;
 	if (fb) 
 		dd=255; 
 	else 
 		dd=0; 
 	lw(x*8,y,dd);
 	lw(x*8,y+1,dd);
 	for (i=0;i<7;i++) 
 	{
  		dd=asc[i+n*16];
  		if (fb) 
  			dd=255-dd; 
  		lw(x*8+i+1,y,dd);
  		dd=asc[i+n*16+8];
  		if (fb) 
  			dd=255-dd; 
  		lw(x*8+i+1,y+1,dd);
 }
}
void display_hz(unsigned char x,unsigned char y,unsigned char n,unsigned char fb) 
{
 	unsigned char i,dd;
 	for (i=0;i<16;i++) 
 	{
  		dd=Test_hz_Status[n][i];
  		if (fb) 
  			dd=255-dd;
  		lw(x*8+i,y,dd);
  		dd=Test_hz_Status[n][i+16];
  		if (fb) 
  			dd=255-dd;
  		lw(x*8+i,y+1,dd);
 	}
}
void display_string_hz(unsigned char x,unsigned char y,unsigned char c_Start,unsigned char c_Stop ,unsigned char fb) 
{
 	unsigned char i;
 	unsigned char j;

 	j=0;
 	for (i=c_Start;i<=c_Stop;i++) 
	{
		display_hz(x+j,y,i,fb);
		j+=2;
	}
}
void dh(unsigned char x,unsigned char y,unsigned char n,unsigned char fb) 
{
 	unsigned char i,dd;
 	for (i=0;i<16;i++) 
 	{
  		dd=hz[n][i];
  		if (fb) 
  			dd=255-dd;
  		lw(x*8+i,y,dd);
  		dd=hz[n][i+16];
  		if (fb) 
  			dd=255-dd;
  		lw(x*8+i,y+1,dd);
  		dd=hz[n][i+32];
  		if (fb) 
  			dd=255-dd;
  		lw(x*8+i,y+2,dd);
  		dd=hz[n][i+48];
  		if (fb) 
  			dd=255-dd;
  		lw(x*8+i,y+3,dd);
 	}
}
//显示字符,fb==1:反白显示
void da_big(unsigned char x,unsigned char y,unsigned char n,unsigned char fb)
{
 	unsigned char i,dd;
 	n-=32;
 	if (n>128) 
 		n=0;
 	if (fb) 
 		dd=255; 
 	else 
 		dd=0; 
 	lw(x*8,y,dd);
 	lw(x*8,y+1,dd);
	lw((x+1)*8,y,dd);
	lw((x+1)*8,y+1,dd);
 	for (i=0;i<7;i++) 
 	{
  		dd=asc[i+n*16];
  		if (fb) 
  			dd=255-dd; 
  		lw(x*16+i+1,y,dd);
  		dd=asc[i+n*16+8];
  		if (fb) 
  			dd=255-dd; 
  		lw(x*16+i+1,y+1,dd);
 }

}

void int_init(void)//MCU INT INIT
{
   	IT0=1;
	EX0=1;
	EA=1;
}

//***************************MCU PROT INIT***************************
void port_init(void)//MCU PROT INIT
{
	P0=0xFF;
	P1=0xFF;
	P2=0xFF;
	P3=0xFF;
}
//***************************MCU PROT INIT***************************
//MCU INI INIT STOP
//================================================================================================== 
void incept_int0(void) interrupt 0 using 0
{
	BYTE bSel;
	BYTE bStep;
	WORD iStep;
	BYTE i;
	BYTE iRow;
	BYTE iCol;

	BYTE *iDisplay;

	BYTE iDisplay_data[24];

	bSel=P3 & 0x38;
	bStep=Step_Bus;

	switch(bSel)
	{
		case 0x00://P33:L P34:L P35:L 
			{
				iStep=bStep;
				if(bStep9==1)
					iStep+=512;
				if((bStep8==1)&(iStep<512))
					iStep+=256;

				P3=0x0F;
				
				iDisplay=Test_content[iStep];
				display_string(0,4,24,0,iDisplay);
				P3=0xFF;
			}
			break;
		case 0x08://P33:H P34:L P35:L 
			//Select Product
			{
				bStep=bStep & 0x0F;
				P3=0x0F;
				//Clr_Screen(0xFF);
				if(bStep<9)
				{
					for(i=0;i<9;i++)
					{
						iRow=(i/3)*2;
						iCol=(i%3)*8;
						iDisplay=product_select_name[i];
						if(i==bStep)
							display_string(iCol,iRow,8,1,iDisplay);
						else
							display_string(iCol,iRow,8,0,iDisplay);
					}
					for(i=0;i<24;i++)
						iDisplay_data[i]=' ';
					for(i=9;i<11;i++)
					{
						iRow=(i/3)*2;
						iCol=(i%3)*8;
						display_string(iCol,iRow,8,0,iDisplay_data);
					}
					
				}
				else
				{
					for(i=9;i<Max_Product;i++)
					{
						iRow=i % 9;
						iRow=(iRow/3)*2;
						iCol=i % 9;
						iCol=(iCol%3)*8;
						iDisplay=product_select_name[i];
						if(i==bStep)
							display_string(iCol,iRow,8,1,iDisplay);
						else
							display_string(iCol,iRow,8,0,iDisplay);
					}
					for(i=0;i<24;i++)
						iDisplay_data[i]=' ';
					
					for(i=Max_Product % 9;i<11;i++)
					{
						iRow=(i/3)*2;
						iCol=(i%3)*8;
						display_string(iCol,iRow,8,0,iDisplay_data);
					}
					
				}

				display_string_hz(16,6,6,9,1);
				P3=0xFF;
			}
			break;
		case 0x18:
			{
				P3=0x0F;

				bSel=bStep & 0x03;
				
				if(bSel==1)
				{
					Clr_x_y_Screen(16,0,8,0xFF);
					Clr_x_y_Screen(16,1,8,0xFF);
					Clr_x_y_Screen(16,2,8,0xFF);
					Clr_x_y_Screen(16,3,8,0xFF);
					dh(18,0,0,1);
					dh(20,0,1,1);
				}
				else
				{
					Clr_x_y_Screen(16,0,8,0xFF);
					Clr_x_y_Screen(16,1,8,0xFF);
					Clr_x_y_Screen(16,2,8,0xFF);
					Clr_x_y_Screen(16,3,8,0xFF);
					dh(18,0,2,1);
					dh(20,0,3,1);
				}
				P3=0xFF;
			}
			break;
		case 0x10://P33:L P34:H P35:L 
			//Init display
			{
				bSel=bStep % 0x0F;
				bSel=bSel % 3;
				P3=0x0F;

				Clr_x_y_Screen(16,0,8,0xFF);
				Clr_x_y_Screen(16,1,8,0xFF);
				Clr_x_y_Screen(16,2,8,0xFF);
				Clr_x_y_Screen(16,3,8,0xFF);

				iDisplay=Test_Start[bSel];
				for(i=0;i<16;i++)
					iDisplay_data[i]=Test_Start[bSel][i];
				for(i=16;i<24;i++)
					iDisplay_data[i]=' ';

				iDisplay=iDisplay_data;

				display_string(0,4,24,0,iDisplay);
				
				delay(4);
					
				iDisplay=Test_Status[bSel];

				display_string(18,1,4,1,iDisplay);
				
				for(i=0;i<24;i++)
					iDisplay_data[i]=' ';
				
				iDisplay=iDisplay_data;

				display_string(0,6,24,0,iDisplay);
			
				P3=0xFF;
			}
			break;		
		case 0x20://P33:L P34:L P35:H 
			//Init display
			{
				bSel=bStep % 0x0F;
				P3=0x0F;

				Clr_Screen(0xFF);
				iDisplay=client_name;
				display_string(0,0,16,0,iDisplay);
				iDisplay=product_select[bSel];
				display_string(0,2,16,0,iDisplay);
				P3=0xFF;
			}
			break;
		case 0x30://P33:L P34:H P35:H 
			//display test data

			//bCom0==P33
			//bCom1==P34
			//bCom2==P35
			{

				if(bStep8==1)
				{
					Disp_Inc=0;
					for(i=0;i<24;i++)
						iDisplay_data[i]=' ';
				}
				else
					Disp_Inc++;
				
				P3=0x0F;	

				iDisplay_data[Disp_Inc]=bStep;
				iDisplay=iDisplay_data;
				display_string(0,6,24,0,iDisplay);

				P3=0xFF;
			}
			break;
		default:

			break;
	}


}

//================================================================================================== 
void display_string(unsigned char x,unsigned char y,unsigned char n,unsigned char fb,unsigned char *dis_string)
{
	BYTE bJ;

	for(bJ=0;bJ<n;bJ++)
	{
		if((x+bJ)<24)
		{
			da(x+bJ,y,*dis_string,fb); 
			nc(5);	
		}
		else
		{
			da(x+bJ-24,y+2,*dis_string,fb); 
			nc(5);	
		}
		dis_string++;
	}
	return;
}
//***************************MCU EX INT0***************************

void main()
{
	//BYTE strInit[9]="Init OK";

	//WORD bI;
	//BYTE bJ;

	int_init();
	port_init();
	//config_init();
	delay(5);

	//strInit[7]=0x0D;
	//strInit[8]=0x0A;

	//Send_String(strInit,9);
	Init_0107();
	delay(10);


	Clr_Screen(0x00);

	/*
	for(bI=0;bI<16;bI++)
	{
		for(bJ=0;bJ<7;bJ++)
		{
			da(bI,bJ,0x36,0); 
			nc(5);	
		}
	}
	*/
	
	display_string(0,0,19,0,client_name);

	display_string(0,2,19,0,product_select[0]);

	/*
	for(bI=0;bI<448;bI++)
		display_string(0,4,Test_content[bI],24,0);

	delay(5);

	display_string_hz(18,1,0,1,1);
	display_string_hz(18,1,2,3,1);
	display_string_hz(18,1,4,5,1);

	dh(18,0,0,1);
	dh(20,0,1,1);
	delay(5);
	dh(18,0,2,1);
	dh(20,0,3,1);

	Clr_x_y_Screen(16,0,8,0xFF);
	Clr_x_y_Screen(16,1,8,0xFF);
	Clr_x_y_Screen(16,2,8,0xFF);
	Clr_x_y_Screen(16,3,8,0xFF);
	//Clr_Screen(0x00);
	display_string(18,1,Test_Status[0],4,1);
	display_string(18,1,Test_Status[1],4,1);
	display_string(18,1,Test_Status[2],4,1);	
	*/
	for(;;);
}

⌨️ 快捷键说明

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