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

📄 events.c

📁 用freescale 8bitMCU做的触摸屏软件
💻 C
字号:
/** ###################################################################
**     Filename  : Events.C
**     Project   : touchpanal
**     Processor : MC9S08QG8CDT
**     Beantype  : Events
**     Version   : Driver 01.02
**     Compiler  : CodeWarrior HCS08 C Compiler
**     Date/Time : 2007-9-14, 12:46
**     Abstract  :
**         This is user's event module.
**         Put your event handler code here.
**     Settings  :
**     Contents  :
**         SM1_OnRxChar - void SM1_OnRxChar(void);
**         SM1_OnTxChar - void SM1_OnTxChar(void);
**         SM1_OnError  - void SM1_OnError(void);
**
**     (c) Copyright UNIS, spol. s r.o. 1997-2006
**     UNIS, spol. s r.o.
**     Jundrovska 33
**     624 00 Brno
**     Czech Republic
**     http      : www.processorexpert.com
**     mail      : info@processorexpert.com
** ###################################################################*/
/* MODULE Events */


#include "Cpu.h"
#include "Events.h"

#define PC_write_board 

//#define ms718 


 bool send718flag=0;
 word sendtomst718counter=0;

byte position[2][10] ={0,0,0,0,  0,0,0,0,  0,0,0,0,  0,0,0,0,  0,0,0,0};  
byte p_position;
word TouchNumber=0;

/*
** ===================================================================
**     Event       :  SM1_OnRxChar (module Events)
**
**     From bean   :  SM1 [SynchroMaster]
**     Description :
**         This event is called after a correct character is
**         received.
**         The event is available only when the <Interrupt
**         service/event> property is enabled.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
void SM1_OnRxChar(void)
{
  /* Write your code here ... */
}

/*
** ===================================================================
**     Event       :  SM1_OnTxChar (module Events)
**
**     From bean   :  SM1 [SynchroMaster]
**     Description :
**         This event is called after a character is transmitted.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/

  bool  Flag_SPI_reading=0;       
  bool  Flag_SPI_reading_status=0; 

  
#define  PenDetect   PTAD_PTAD2
#define  SPI_CS   	PTBD_PTBD5


#define  SETX   (byte)0xD8        //D8    8bitADC  VDD ref /PENIRQ enable
#define  SETY   (byte)0X98
char ReadTouchPanleStep=0;
word X_coordinate=0,Y_coordinate=0;

  
void SendDataRs232(byte x,byte y)
{
	ReadTouchPanleStep=0;
#ifdef ms718
	uart_transmit_data[1] = x&0xf0 + y&0x0f;
	uart_transmit_data[2]=0;
				
	if(send718flag){
		send718flag=0;				
		AS1_SendChar(uart_transmit_data[0]);
		}
#endif	
				
//		uart_transmit_data[2]=(byte)(Y_coordinate>>8);
//		uart_transmit_data[3]=(byte)Y_coordinate;
#ifdef PC_write_board
	uart_transmit_data[1]=x;
	uart_transmit_data[2]=y;
	AS1_SendChar(uart_transmit_data[0]);
#endif
}

void SavePanelData(byte x,byte y)
{
	byte ii;
	position[0][p_position]=x;
	position[1][p_position]=y;
	p_position++;
	if(p_position>9)
		p_position=0;
	
	TouchNumber++;
	if(TouchNumber>50000)
		TouchNumber=10000;
	
	if(TouchNumber>4){
		if(p_position>1)
			ii = p_position-2;
		else
			ii= p_position+10-2;
		
		SendDataRs232(position[0][ii] , position[1][ii]);
		}			
}


byte spi_temp=0;
byte xx,yy;	
void SM1_OnTxChar(void)
{
	switch (ReadTouchPanleStep){
		case 0 : 	SM1_SendChar(0);
				ReadTouchPanleStep++;
				break;
				
		case 1 : 	SM1_RecvChar(&xx);
				xx<<=1;
				SM1_SendChar(SETY);
				ReadTouchPanleStep++;
				break;
				
		case 2 : 	SM1_RecvChar(&spi_temp);
				xx += spi_temp>>7;
				SM1_SendChar(0);
				ReadTouchPanleStep++;
				break;
								
		case 3 : 	SM1_RecvChar(&yy);
				yy<<=1;
				SM1_SendChar(0);
				ReadTouchPanleStep++;
				break;
				
		case 4 : 	SM1_RecvChar(&spi_temp);
				yy += spi_temp>>7;
				ReadTouchPanleStep=0;				
				
				if(PenDetect){
					Flag_SPI_reading=0;
					ReadTouchPanleStep=0;
					p_position=0;
					TouchNumber=0;
					}
				else {
					SavePanelData(xx,yy);
					}
				SPI_CS=1;
				break;
				
		default : 	
				break;
				
		}
  
}

/*
** ===================================================================
**     Event       :  SM1_OnError (module Events)
**
**     From bean   :  SM1 [SynchroMaster]
**     Description :
**         This event is called when a channel error (not the error
**         returned by a given method) occurs. The errors can be
**         read using <GetError> method.
**         The event is available only when the <Interrupt
**         service/event> property is enabled.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
void SM1_OnError(void)
{
  /* Write your code here ... */
}

/*
** ===================================================================
**     Event       :  AS1_OnTxComplete (module Events)
**
**     From bean   :  AS1 [AsynchroSerial]
**     Description :
**         This event indicates that the transmitter is finished
**         transmitting all data, preamble, and break characters and
**         is idle. It can be used to determine when it is safe to
**         switch a line driver (e.g. in RS-485 applications).
**         The event is available only when both <Interrupt
**         service/event> and <Transmitter> properties are enabled.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
char uart_transmit_data[10]={0x69,0xaa,0x22,0x11, 0xbb,0x77,0x66,0x99};
char uart_transmit_point=0;

void AS1_OnTxComplete(void)
{
      uart_transmit_point++;
	if(uart_transmit_point<3)			//send 3 byet out
		AS1_SendChar(uart_transmit_data[uart_transmit_point]);
	else
		uart_transmit_point=0;	  
}

/*
** ===================================================================
**     Event       :  TI1_OnInterrupt (module Events)
**
**     From bean   :  TI1 [TimerInt]
**     Description :
**         When a timer interrupt occurs this event is called (only
**         when the bean is enabled - <"Enable"> and the events are
**         enabled - <"EnableEvent">). This event is enabled only if
**         a interrupt service/event is enabled.
**     Parameters  : None
**     Returns     : Nothing
** ===================================================================
*/
void TI1_OnInterrupt(void)
{
  /* Write your code here ... */
	PTAD_PTAD0 = ~PTAD_PTAD0;
  
  sendtomst718counter++;
  if(sendtomst718counter>50000)
  	sendtomst718counter=10000;
  
  if((sendtomst718counter>20)&&(sendtomst718counter<22))
  	send718flag=1;
  
	SPI_CS=0;
	SM1_SendChar(SETX);		//spi send data 
}

/* END Events */

/*
** ###################################################################
**
**     This file was created by UNIS Processor Expert 3.00 [03.89]
**     for the Freescale HCS08 series of microcontrollers.
**
** ###################################################################
*/

⌨️ 快捷键说明

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