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

📄 lcd.c

📁 air-contronin controning air in or out,big or small check the temprature.
💻 C
字号:
#include "MATH.H"
#include "STC12.H"
#include "function.h"
#include "pin.h"
#include "variable.h"
#include<intrins.h>
void LCD_INIT(void)
{ 
	lcd_reset();
	lcd_preset();
	lcd_clr(0);
	//default display
	lcd_predp();
}

void lcd_predp(void)
{
	byte da3;
	dp_chara(addr_Tc,0,1,0,12);
	da3=da_TC;
	da3=da_TC/10;
	dp_chara(da3,0,1,30,6);
	da3=da_TC%10;
	dp_chara(da3,0,1,36,6);
	dp_chara(addr_dot2,0,1,24,6);
/*	if(!k_pw)
	{
		dp_chara(addr_OFF,0,1,30,18);
	}
	else
	{
		dp_chara(addr_ON,0,1,30,18);	
	}  */
	dp_chara(addr_Ref,0,2,0,18);
	dp_chara(addr_dot2,0,2,24,6);
	if(!k_ref)
	{
	   dp_chara(addr_OFF,0,2,30,18);
	}
	else
	{
	   dp_chara(addr_ON,0,2,30,18);
	}
	dp_chara(addr_Wind,0,3,0,30);
	switch(k_fa%3)
	{
		case 0:
			dp_chara(addr_OFF,0,3,30,18);
			break;
		case 1:
			dp_chara(addr_ON,0,3,30,18);
			break;
		case 2:
			dp_chara(addr_AUT,0,3,30,18);
			break;
		default:
			break;
	}
	dp_chara(addr_TA,1,1,0,18); 
	//display ta
	//ECCF3=0
	CCAPM3&=0xfe;
	da3=da_TA/10;
 	dp_bigchara(da3,1,2,18,12);
	da3=da_TA%10;
	dp_bigchara(da3,1,2,30,12);
	//Open CCF3 interrupt
	CCF3=0;
	CCAPM3|=0x01;
	      
}



void LCD_Write_da(byte chip,byte page,byte column,unsigned char di,byte len)
{
	byte i;
	E1=0;
//	nobusyness(0);
	delay(5);
	E2=0;
//	nobusyness(1);
	delay(5);
	switch(chip)
	{
		case 0:
			//return from read-modify-write mode
//			lcd_commd=0xee;
//			LCD_WriteIR1();
			// set page
			lcd_commd=0xb8;
			lcd_commd|=page;
			LCD_WriteIR1();
			//set column
			lcd_commd=column;
			LCD_WriteIR1();
			//set read-modify-write mode
			lcd_commd=0xe0;
			LCD_WriteIR1();
			//Write data to d_ram
			for(i=0;i<len;i++)
			{
				//read BF flag
//				nobusyness(0);
				delay(5);
//				da=di;
//				DB0=(da&0x01);
//				DB1=(da&0x02);
//			   	da= da|0x03;
//				P1=da;
				seri_to_para(di);
				AA=1;
				R_W=0;
				E1=1;
				delay(1);
				E1=0;
				delay(1);
			}
			//return from read-modify-write mode
			lcd_commd=0xee;
			LCD_WriteIR1();
			break;

		case 1:
			//return from read-modify-write mode
//			lcd_commd=0xee;
//			LCD_WriteIR2();
			// set page
			lcd_commd=0xb8;
			lcd_commd|=page;
			LCD_WriteIR2();
			//set column
			lcd_commd=column;
			LCD_WriteIR2();
			//set read-modify-write mode
			lcd_commd=0xe0;
			LCD_WriteIR2();
			//Write data to d_ram
			for(i=0;i<len;i++)
			{
				//read BF flag
//				nobusyness(0);
				delay(5);
//				da=di;
//				DB0=(da&0x01);
//				DB1=(da&0x02);
//			   	da= da|0x03;
//				P1=(da); 
				seri_to_para(di);
				AA=1;
				R_W=0;
				E2=1;
				delay(1);
				E2=0;
				delay(1);
			}
			//return from read-modify-write mode
			lcd_commd=0xee;
			LCD_WriteIR2();
			break;

		default:
			break;
	}

}




//Write instruction to LCD
void  LCD_WriteIR1(void)
{
	E1=0;
//	nobusyness(0);
	delay(5);
	E2=0;
//	nobusyness(1);
	delay(5);
//	DB0=(lcd_commd&0x01);
//	DB1=(lcd_commd&0x02);
//	lcd_commd|=0x03;
//	P1=lcd_commd;
	seri_to_para(lcd_commd);
	AA=0;  //indicate it is instruction
	R_W=0;
	E1=1;
	delay(1);
	E1=0;
	delay(1);
 }

void  LCD_WriteIR2(void)
{
	E1=0;
//	nobusyness(0);
	delay(5);
	E2=0;
//	nobusyness(1);
	delay(5);
//	DB0=(lcd_commd&0x01);
//	DB1=(lcd_commd&0x02);
//	lcd_commd|=0x03;
//	P1=lcd_commd;
	seri_to_para(lcd_commd);
	AA=0;  //indicate it is instruction
	R_W=0;
	E2=1;
	delay(1);
	E2=0;
	delay(1);
}

void LCD_Write_cbuff(void)
{
	byte i,da,len;
	E1=0;
//	nobusyness(0);
	delay(5);
	E2=0;
//	nobusyness(1);
	delay(5);
	lcd_commd=0;
	da=lcd_xchip;
	switch(da)
	{
		case 0:
			//return from read-modify-write mode
//			lcd_commd=0xee;
//			LCD_WriteIR1();
			// set page
			lcd_commd=lcd_xrow;
			lcd_commd|=0xb8;
			LCD_WriteIR1();
			//set column
			lcd_commd=lcd_xcolumn;
			LCD_WriteIR1();
			//set read-modify-write mode
			lcd_commd=0xe0;
			LCD_WriteIR1();
			//Write data to d_ram
			len=lcd_xlen;
			for(i=0;i<len;i++)
			{
				//read BF flag
//				nobusyness(0);
				delay(5);
				da=*ptc++;
//				DB0=(da&0x01);
//				DB1=(da&0x02);
//			   	da= da|0x03;
//				P1=da;
				seri_to_para(da);
				AA=1;
				R_W=0;
				E1=1;
				delay(1);
				E1=0;
				delay(1);
			}
			//return from read-modify-write mode
			lcd_commd=0xee;
			LCD_WriteIR1();
			break;

		case 1:
			//return from read-modify-write mode
//			lcd_commd=0xee;
//			LCD_WriteIR2();
			// set page
			lcd_commd=lcd_xrow;
			lcd_commd|=0xb8;
			LCD_WriteIR2();
			//set column
			lcd_commd=lcd_xcolumn;
			LCD_WriteIR2();
			//set read-modify-write mode
			lcd_commd=0xe0;
			LCD_WriteIR2();
			//Write data to d_ram
			len=lcd_xlen;
			for(i=0;i<len;i++)
			{
				//read BF flag
//				nobusyness(0);
				delay(5);
				da=*ptc++;
//				DB0=(da&0x01);
//				DB1=(da&0x02);
//			   	da= da|0x03;
//				P1=da;
				seri_to_para(da);
				AA=1;
				R_W=0;
				E2=1;
				delay(1);
				E2=0;
				delay(1);
			}
			//return from read-modify-write mode
			lcd_commd=0xee;
			LCD_WriteIR2();
			break;

		default:
			break;
	}

}



void lcd_reset(void)
{
	E1=0;
	E2=0;
	lcd_commd=0xae;
	LCD_WriteIR1();
	//close display
	lcd_commd=0xae;
	LCD_WriteIR2();
	//reset	chip 1
	lcd_commd=0xe2;
	LCD_WriteIR1();
	delay10ms(10);
	//reset chip 2
	lcd_commd=0xe2;
	LCD_WriteIR2();
	delay10ms(10);
}
//part--0: clear all display to normal state
//	  --1: clear all display to alarm  state
//    --2: clear left display
//    --3: clear right display
void lcd_clr(byte part)
{
	//close display
	lcd_commd=0xae;
	LCD_WriteIR1();
	//close display
	lcd_commd=0xae;
	LCD_WriteIR2();
	switch(part)
	{
		case 0:
			//display the first row
			lcd_commd=0xd4;
			LCD_WriteIR1();
			//display the first row
			lcd_commd=0xd4;
			LCD_WriteIR2();
			clr1(0);	
			break;
	
		case 1:
			//display the first row
			lcd_commd=0xd0;
			LCD_WriteIR1();
			//display the first row
			lcd_commd=0xd0;
			LCD_WriteIR2();	
			clr1(0);
			break;
	
		case 2:
			//display the first row
			lcd_commd=0xd4;
			LCD_WriteIR1();
			//display the first row
			lcd_commd=0xd4;
			LCD_WriteIR2();
			clr1(1);	
			break;
	
		case 3:
			//display the first row
			lcd_commd=0xd4;
			LCD_WriteIR1();
			//display the first row
			lcd_commd=0xd4;
			LCD_WriteIR2();
			clr1(2);
			break;
		default:
			break;
	}
	//open display
	lcd_commd=0xaf;
	LCD_WriteIR1();
	//open display
	lcd_commd=0xaf;
	LCD_WriteIR2();
}

void lcd_preset(void)
{
	E1=0;
	E2=0;
	//close display
//	lcd_commd=0xae;
//	LCD_WriteIR1();
//	delay10ms(1);
	//close display
//	lcd_commd=0xae;
//	LCD_WriteIR2();
//	delay10ms(1);

	//close free state
	lcd_commd=0xa4;
	LCD_WriteIR1();
	// set 1/32 duty rate
	lcd_commd=0xa9;
	LCD_WriteIR1();
	//set clockwise sort
	lcd_commd=0xa0;
	LCD_WriteIR1();

	//close free state
	lcd_commd=0xa4;
	LCD_WriteIR2();
	// set 1/32 duty rate
	lcd_commd=0xa9;
	LCD_WriteIR2();
	//set clockwise sort
	lcd_commd=0xa0;
	LCD_WriteIR2();
}


//sbit da_stp P1^7;
//sbit cp 	P1^6;
//sbit le		P1^5;
//function:transfer serial data to paral data
void seri_to_para(byte da)
{ 
	byte i;
	cp=0;
	le=0;
	for(i=0;i<8;i++)
	{
		cp=0;
		if(da&0x01)
		{
			da_stp=1;
		}
		 else
		 {
		 	da_stp=0;
		 }
		 da>>=1;
//		 delay(5);
		 cp=1;
//		 delay(5);
	}
	le=1;
//	delay(5);
	_nop_();
	_nop_();
	le=0;
	cp=0;	
}
/*
byte LCD_Read_status(void)
{
	byte da;
	E1=0;
	nobusyness(0);
	E2=0;
	nobusyness(1);
	AA=0;
	R_W=1;
	E1=1;
	da=0;
	da|=(P1&0xfc);
	if(DB0==1)
	{
		da|=0x01;
	}
	if(DB1==1)
	{
		da|=0x02;
	}
	E1=0;
	return(da);
}  */
void sear_dpl(void)
{
	addr_dpl[0]=&dot_0;
	addr_dpl[1]=&dot_1;
	addr_dpl[2]=&dot_2;
	addr_dpl[3]=&dot_3;
	addr_dpl[4]=&dot_4;
	addr_dpl[5]=&dot_5;
	addr_dpl[6]=&dot_6;
	addr_dpl[7]=&dot_7;
	addr_dpl[8]=&dot_8;
	addr_dpl[9]=&dot_9;
	addr_dpl[10]=&dot_ON;
	addr_dpl[11]=&dot_OFF;
	addr_dpl[12]=&dot_AUT;
	addr_dpl[13]=&dot_Nothing;
	addr_dpl[14]=&dot_PW_;
	addr_dpl[15]=&dot_Ref_;
	addr_dpl[16]=&dot_Wind_;
	addr_dpl[17]=&dot_TA_;
	addr_dpl[18]=&dot_WA_;
	addr_dpl[19]=&dot2;
	addr_dpl[20]=&dot_Tc_;

	addr_dpl_up[0]=&dot_0_up;
	addr_dpl_up[1]=&dot_1_up;
	addr_dpl_up[2]=&dot_2_up;
	addr_dpl_up[3]=&dot_3_up;
	addr_dpl_up[4]=&dot_4_up;
	addr_dpl_up[5]=&dot_5_up;
	addr_dpl_up[6]=&dot_6_up;
	addr_dpl_up[7]=&dot_7_up;
	addr_dpl_up[8]=&dot_8_up;
	addr_dpl_up[9]=&dot_9_up;
	addr_dpl_up[10]=&dot_00_up;
	addr_dpl_up[11]=&dot_50_up;
	addr_dpl_up[12]=&dot_SENS_up;
	addr_dpl_up[13]=&dot_AH_up;
	addr_dpl_up[14]=&dot_AL_up;
	addr_dpl_up[15]=&dot_PR_up;
	addr_dpl_up[16]=&dot_nothing_up;

	addr_dpl_down[0]=&dot_0_down;
	addr_dpl_down[1]=&dot_1_down;
	addr_dpl_down[2]=&dot_2_down;
	addr_dpl_down[3]=&dot_3_down;
	addr_dpl_down[4]=&dot_4_down;
	addr_dpl_down[5]=&dot_5_down;
	addr_dpl_down[6]=&dot_6_down;
	addr_dpl_down[7]=&dot_7_down;
	addr_dpl_down[8]=&dot_8_down;
	addr_dpl_down[9]=&dot_9_down;
	addr_dpl_down[10]=&dot_00_down;
	addr_dpl_down[11]=&dot_50_down;
	addr_dpl_down[12]=&dot_SENS_down;
	addr_dpl_down[13]=&dot_AH_down;
	addr_dpl_down[14]=&dot_AL_down;
	addr_dpl_down[15]=&dot_PR_down;
	addr_dpl_down[16]=&dot_nothing_down;

}

void dp_bigchara(byte addr,byte chip,byte row,byte column,byte len)
{
	lcd_xchip=chip;
	ptc=addr_dpl_up[addr];
//	ptc=(byte code * )addr_dpl_up+addr;
	lcd_xrow=row;
	lcd_xcolumn=column;
	lcd_xlen=len;
	LCD_Write_cbuff();
	lcd_xrow=row+1;
	ptc=addr_dpl_down[addr];
	LCD_Write_cbuff();
}

void dp_chara(byte addr,byte chip,byte row,byte column,byte len)
{
	lcd_xchip=chip;
	ptc=addr_dpl[addr];
	lcd_xrow=row;
	lcd_xcolumn=column;
	lcd_xlen=len;
	LCD_Write_cbuff();
}

//part --0:clear all
//     --1:clear left display
//     --2:clear left display
void clr1(byte part)
{
	byte i,j;
	switch(part)
	{
		case 0:
		//clear all
			for(i=0;i<2;i++)
			{
				for(j=0;j<4;j++)
				{
					LCD_Write_da(i,j,0,0x00,61);
//					delay10ms(2);
				}
			}
		    break;
		//clear left display
		case 1:
			for(j=0;j<2;j++)
			{

				LCD_Write_da(0,j,0,0x00,61);
	//			delay10ms(2);
			}
		    break;
		//clear left display
		case 2:
			for(j=0;j<2;j++)
			{

				LCD_Write_da(1,j,0,0x00,61);
	//			delay10ms(2);
			}
		    break;
	}
}

⌨️ 快捷键说明

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