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

📄 main.c

📁 AVR ATEMG128 触摸屏驱动程序 C语言
💻 C
📖 第 1 页 / 共 4 页
字号:
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
	///////////////////////////////////////
	sbi(CONTR_LCD_PORT,STB);
}
//***************************
void Send_byte(uchar a)
{
	LCD_DATA_PORT = a;
	cbi(CONTR_LCD_PORT,LE);
	asm("nop");
	sbi(CONTR_LCD_PORT,LE);
	while( PINE & BUSY);
	cbi(CONTR_LCD_PORT,STB);
	asm("nop");
	sbi(CONTR_LCD_PORT,STB);
}
//**********Return_Point******************
void Return_Point()
{
	uchar i;
	for(i=0;i<7;i++)
	{
		Send_byte(point[i]);
	}
}
//*********Move_point********************
void Move_Point(uchar x,uchar y)
{
	Send_byte(0x1b);
	Send_byte(0x0d);
	Send_byte(x);
	Send_byte(0x1b);
	Send_byte(0x52);
	Send_byte(y);
}
//**********Disp_Date*******************
void Disp_Date(uchar *p,uchar len)
{
	uchar i;
	for(i=0;i<len;i++)
	{
		Send_byte(*(p+i));
	}
}
//**********CLEAR DATA*******************
void Clear_Data(uchar *p,uchar len)
{
	uchar i;
	for(i=0;i<len;i++)
	{
		Send_byte( *(p+i));
	}
}
//********READ-EEPROM********
void Read_Eeprom(void)
{
	eeprom_busy_wait();
	touch_lefttop_x = eeprom_read_word(0);
	eeprom_busy_wait();
	touch_lefttop_y = eeprom_read_word(2);
	eeprom_busy_wait();
	touch_rightbottom_x = eeprom_read_word(4);
	eeprom_busy_wait();
	touch_rightbottom_y = eeprom_read_word(6);
	eeprom_busy_wait();
}
//****************************
void LJ_Zb(int *p,int *p1)
{
	*p1 = *p * ratio_x +touch_lefttop_x;	
	*(p1+1) =(*(p +1)) * ratio_y + touch_lefttop_y;
	*(p1+2) =(*(p +2)) * ratio_x + touch_lefttop_x;	
	*(p1+3) =(*(p +3)) * ratio_y + touch_lefttop_y;
}
//*********按键位置*******************
void Key_Wz(void)
{
	LJ_Zb(KEY_LEFT,KEY_LEFT_P);
	LJ_Zb(KEY_RIGH,KEY_RIGH_P);
	LJ_Zb( KEY_MID,KEY_MID_P );
	LJ_Zb(KEY_P16_1,KEY_P16_1P);
	LJ_Zb(KEY_P16_2,KEY_P16_2P);
	LJ_Zb(KEY_P16_3,KEY_P16_3P);
	//
	LJ_Zb(KEY_P15_1,KEY_P15_1P);
	LJ_Zb(KEY_P15_2,KEY_P15_2P);
	LJ_Zb(KEY_P15_3,KEY_P15_3P);
	LJ_Zb(KEY_P15_4,KEY_P15_4P);
	LJ_Zb(KEY_P15_5,KEY_P15_5P);
	LJ_Zb(KEY_P15_6,KEY_P15_6P);
	LJ_Zb(KEY_P15_7,KEY_P15_7P);
	LJ_Zb(KEY_P15_8,KEY_P15_8P);
	LJ_Zb(KEY_P15_9,KEY_P15_9P);
	LJ_Zb(KEY_P15_0,KEY_P15_0P);
	LJ_Zb(KEY_P15_c,KEY_P15_cP);
	LJ_Zb(KEY_P15_q,KEY_P15_qP);
	//
	LJ_Zb(KEY_P6_rate,KEY_P6_rateP);
	LJ_Zb(KEY_P6_press,KEY_P6_pressP);
	LJ_Zb(KEY_P6_time,KEY_P6_timeP);
	//
	LJ_Zb(KEY_P8_flow,KEY_P8_flowP);
	LJ_Zb(KEY_P8_press,KEY_P8_pressP);
	//
	LJ_Zb(KEY_P17_p,KEY_P17_pP);
	LJ_Zb(KEY_P17_d,KEY_P17_dP);

}
//********************************
void Sc16_Tx_A_byte(uchar a)
{
	
		Flag_Tx_A = OFF;
		UART_A_DATA = a;
		while( Flag_Tx_A == OFF );
}
//********************************
void Sc16_Tx_B_byte(uchar a)
{
	Flag_Tx_B = OFF;
	UART_B_DATA = a;
	while( Flag_Tx_B == OFF);
}
//********************************
void Sc16_Init(void)
{
		EICRB = 0x0f;	
		EIMSK = 0x30;
			//A
		UART_A_LCR = BTUON;
		UART_A_DLL = 0X06;						//19200
		UART_A_DLM = 0X00;
		UART_A_LCR = 0X03;
		UART_A_MCR = 0X08;
		UART_A_IER = 0x03;
			//B
		UART_B_LCR = BTUON;
		UART_B_DLL = 0X0C;						//9600
		UART_B_DLM = 0X00;
		UART_B_LCR = 0X03;
		UART_B_MCR = 0x08;
		UART_B_IER = 0x03;

}
//********************************
void Fa_A(uchar *p,uchar len)
{
	uchar i;
	for(i=0;i<len;i++)
	{
		Sc16_Tx_A_byte(*(p+i));
	}
}
//********************************
void Fa_B(uchar *p,uchar len)
{
	uchar i;
	for(i=0;i<len;i++)
	{
		Sc16_Tx_B_byte(*(p+i));
	}
}
//********************************
void Putc_Press(uchar c)
{
	while( !(UCSR1A & (1<<UDRE1)) );
	UDR1=c;
}
//********************************
uchar Getc_Press( void )
{
	while( !(UCSR1A & (1<<RXC)));
		return UDR1;
}

//********************************
void PRESS_Write(uchar *p,uchar len)
{
	uchar i;
	for(i=0;i<len;i++)
	{
		Putc_Press( *( p+i ) );
	}
}
//********************************
void PRESS_Read(uchar *p,uchar len)
{
	uchar i;
	for(i=0;i<len;i++)
	{
		*(p+i) = Getc_Press();
	}
}
//*******显示键盘并处理按键输入****************
void Key_board( uint16_t *p)
{
			uint16_t a;
			uint16_t *b;
			uchar w;
			b = p;
			a = 0;
			Disp_Pin(15);
loop15:		while(Flag_Rec == OFF );
			Flag_Rec = OFF;
			Asc_Dig();			
			if((KEY_MID_P[0] <= X_Zb) && (X_Zb <= KEY_MID_P[2]) && (Y_Zb <=KEY_MID_P[1])&&(KEY_MID_P[3]<= Y_Zb))
				goto over;
			//
			if( a <= 6553)
			{
				if((KEY_P15_1P[0] <= X_Zb) && (X_Zb <= KEY_P15_1P[2]) && (Y_Zb <=KEY_P15_1P[1])&&(KEY_P15_1P[3]<= Y_Zb))
					{
						a = a * 10 + 1;
						goto XsData;
					}
				if((KEY_P15_2P[0] <= X_Zb) && (X_Zb <= KEY_P15_2P[2]) && (Y_Zb <=KEY_P15_2P[1])&&(KEY_P15_2P[3]<= Y_Zb))
					{
						a = a * 10 + 2;
						goto XsData;
					}
				if((KEY_P15_3P[0] <= X_Zb) && (X_Zb <= KEY_P15_3P[2]) && (Y_Zb <=KEY_P15_3P[1])&&(KEY_P15_3P[3]<= Y_Zb))
					{
						a = a * 10 + 3;
						goto XsData;
					}
				if((KEY_P15_4P[0] <= X_Zb) && (X_Zb <= KEY_P15_4P[2]) && (Y_Zb <=KEY_P15_4P[1])&&(KEY_P15_4P[3]<= Y_Zb))
					{
						a = a * 10 + 4;
						goto XsData;
					}
				if((KEY_P15_5P[0] <= X_Zb) && (X_Zb <= KEY_P15_5P[2]) && (Y_Zb <=KEY_P15_5P[1])&&(KEY_P15_5P[3]<= Y_Zb))
					{
						a = a * 10 + 5;
						goto XsData;
					}
				if( a != 6553)
				{
					if((KEY_P15_6P[0] <= X_Zb) && (X_Zb <= KEY_P15_6P[2]) && (Y_Zb <=KEY_P15_6P[1])&&(KEY_P15_6P[3]<= Y_Zb))
						{
							a = a * 10 + 6;
							goto XsData;
						}
					if((KEY_P15_7P[0] <= X_Zb) && (X_Zb <= KEY_P15_7P[2]) && (Y_Zb <=KEY_P15_7P[1])&&(KEY_P15_7P[3]<= Y_Zb))
						{
							a = a * 10 + 7;
							goto XsData;
						}
					if((KEY_P15_8P[0] <= X_Zb) && (X_Zb <= KEY_P15_8P[2]) && (Y_Zb <=KEY_P15_8P[1])&&(KEY_P15_8P[3]<= Y_Zb))
						{
							a = a * 10 + 8;
							goto XsData;
						}
					if((KEY_P15_9P[0] <= X_Zb) && (X_Zb <= KEY_P15_9P[2]) && (Y_Zb <=KEY_P15_9P[1])&&(KEY_P15_9P[3]<= Y_Zb))
						{
							a = a * 10 + 9;
							goto XsData;
						}
				}
				if((KEY_P15_0P[0] <= X_Zb) && (X_Zb <= KEY_P15_0P[2]) && (Y_Zb <=KEY_P15_0P[1])&&(KEY_P15_0P[3]<= Y_Zb))
					{
						a = a * 10 + 0;
						goto XsData;
					}
			}
			if((KEY_P15_cP[0] <= X_Zb) && (X_Zb <= KEY_P15_cP[2]) && (Y_Zb <=KEY_P15_cP[1])&&(KEY_P15_cP[3]<= Y_Zb))
				{
					a = a / 10 ;
					goto XsData;
				}
			if((KEY_P15_qP[0] <= X_Zb) && (X_Zb <= KEY_P15_qP[2]) && (Y_Zb <=KEY_P15_qP[1])&&(KEY_P15_qP[3]<= Y_Zb))
					*b = a;
			goto loop15;
XsData:		Return_Point();
			Move_Point(5,8);
			Clear_Data(Point_Kong,5);
			if( a != 0)
				{
					utoa(a,Point_Date,10);
					w = strnlen(Point_Date,10);
					Return_Point();
					Move_Point(5,8);
					Disp_Date(Point_Date,w);
				}
			goto loop15;
			//
over:		Flag_Rec = OFF;
}
//************OPEN_ONE MIN************************
void Open_One_Min(void)
{
	TCCR0 = _BV(CS02) | _BV(CS01) | _BV(CS00);
	TCNT0 = 0;
	TIMSK = _BV(TOIE0);
}
//************CLOSE ONE MIN**************
void Close_One_Min(void)
{
	TCCR0 = 0;
	TCNT0 = 0;
	TIMSK = 0;
}
//************ONE TIME OVER**************
static uchar Flag_ONE = OFF;
static uint	Count = 0;
static uint GS=0;
SIGNAL( SIG_OVERFLOW0 )
{
	if( ++Count < 1688 )
	{
		GS ++;
		if( GS > 280)
		{
			GS = 0;
			Send_byte(0X2A);
		}
	}
	else
	{
		Flag_ONE = ON;
		Count = 0;
	}
}
//*********FIX Second 计算器***********************
SIGNAL( SIG_OVERFLOW2 )
{
	if( JINYU < Fix_Time)
	{
		if( ++GS_1S > 28 )
		{
			GS_1S = 0;
			JINYU ++;	
			DD ++;		
			AAA1 ++;
		}	
	}
	else
	{
		JINYU = 0;
		Flag_1S = ON;
	}
}
//*******Time 2*************************
void Open_Fix_Second()
{
	TCCR2 = _BV(CS22) | _BV(CS20);
	TCNT2 = 0;
	TIMSK = _BV(TOIE2);
	JINYU = 0;
	Flag_1S = OFF;
}
//*********************************
void Close_Fix_Second()
{
	TCCR2 = 0;
	TCNT2 = 0;
	TIMSK = 0;
	JINYU = 0;
	Flag_1S = OFF;
}
//*********************************
//*********FIX MIN 计算器***********************
static uchar JINYU1 = 0;
static uchar GG=0;
SIGNAL( SIG_OVERFLOW1 )
{
	if( JINYU1 < Fix_Time)
	{
		if( ++GS_1M > 10 )
		{
			GS_1M = 0;
			JINYU1 ++;
			GG ++;			
		}
		TCNT1 = 0x573F; 	
	}
	else
	{
		JINYU1 = 0;
		Flag_1M = ON;
	}
}
//*******Time 1*************************
void Open_Fix_Min()
{
	TCCR1B = _BV(CS12) | _BV(CS10);
	TCNT1 = 0x573F;				//6S中断一次
	TIMSK = _BV(TOIE1);	
	Flag_1M = OFF;
}
//****************************************
void Close_Fix_Min()
{
	TCCR1B = 0;
	TCNT1 = 0;
	TIMSK &= ~_BV(TOIE1);
	Flag_1M = OFF;
}
//********显示压力*********
void Disp_Press(uchar a,uchar b )
{
	uchar i;
	for(i=0;i<8;i++)
	{
		Press_Mid[i] = PRESS_RX[4+i];
	}
	Press_Data = strtod(Press_Mid,0);
		WWW = Press_Data * 10;
		WWW = WWW / 10;
		WWW1 = 0;
	//	utoa( WWW,Point_Date,10);
	if( Press_Data<1 )
	{
		Press_Data *= 1000;
		WWW1 = Press_Data;
		Return_Point();
		Move_Point(a,b+6 );
		Disp_Date(Point_Kong,2);
		Send_byte(0x6d);
		Send_byte(0x54);		
	}
	else
	{
		Return_Point();
		Move_Point(a,b+6);
		Disp_Date(Point_Kong,2);
		Send_byte(0x20);
		Send_byte(0x54);
	}
	dtostrf(Press_Data,4,2,Point_Date);
	i = 4;
	Return_Point();
	Move_Point(a,b);
	Disp_Date(Point_Kong,i);
	Return_Point();
	Move_Point(a,b);
	Disp_Date(Point_Date,i);
}
//*******************************************
void Write_Flow(uchar *p,uchar len)
{
	Sc16_Tx_A_OPEN;
	Fa_A( p,len);
}
//***********写流量 Rat***********
void Write_Flow_Rat(void)
{
	uchar a;
	Flow_Ret = ( Fix_Flow * 64000)/100;
	utoa(Flow_Ret,Flow_MID,10);
	a = strnlen(Flow_MID,10);
	Sc16_Tx_A_OPEN;
	Sc16_Tx_A_byte('A');
	Fa_A( Flow_MID,a);
	Fa_A( W_Enter,1 );
}
//***********写流量 Rat=0*********
void Write_Flow_Rat_0(void)
{
	uchar a;
	Flow_Ret = 0;
	utoa(Flow_Ret,Flow_MID,10);
	a = strnlen(Flow_MID,10);
	Sc16_Tx_A_OPEN;
	Sc16_Tx_A_byte('A');
	Fa_A( Flow_MID,a);
	Fa_A( W_Enter,1 );
}

//***********写流量  P************
void Write_Flow_P(void)
{
	uchar a;
	utoa(Fix_P,W_PD_MID,10);
	a = strnlen(W_PD_MID,10);
	Sc16_Tx_A_OPEN;
	Fa_A( W_P_21,5);
	Fa_A( W_PD_MID,a);
	Fa_A( W_Enter,1 );

}
//***********写流量  D************
void Write_Flow_D(void)
{
	uchar a;

⌨️ 快捷键说明

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