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

📄 ial.#2

📁 该程序是基于c8051f的红外线发射率的测量程序
💻 #2
📖 第 1 页 / 共 2 页
字号:
//*********************************************************************************************************************
//主要是触摸屏的操作
//*********************************************************************************************************************
#include <Typedef.h>
#include<c8051F120.h>
#include<system.h>
//串行键盘的键值宏定义
#define key_up     119
#define key_down   126
#define key_left   95
#define key_right  125
#define key_ok     63
#define key_next   123
#define key_return1 109
#define key_return2 111
//***************************************************************************************************************************************************
//作用:button按下时,呈灰色显示
//参数:button范围内任一像素的坐标值x,y,
//****************************************************************************************************************************************************
void button_down(Cbutton* butt);
//**************************************************************************************************************************
//作用:按钮弹起来后颜色恢复
//参数:Cbutton结构体
//**************************************************************************************************************************
void button_up(Cbutton* butt);
//变量声明
sbit DATA=P3^3; //串行键盘数据线
sbit LD=P3^4;   //串行键盘数据load
sbit CLK=P3^5;  //串行键盘同步时钟线
static unsigned char ts_buff[24];  //按下屏和释放屏得到的数据,前12个字节是按下后得到的,后12个字节是释放后得到的
unsigned char ts_count=0;   // 接收字节计数器
unsigned char ts_T_ready=no; //按下坐标接收好标志
unsigned char ts_R_ready=no; //释放坐标接收好标志
unsigned char ts_temp;       //接收字节临时变量
Msg msg;     //坐标消息
Cmessage_mail message_mail;//邮箱信号
unsigned int xt,yt;
unsigned char temp_key_value,key_value;
bit key_up_flag;  //键弹起标志
bit keyborad_run=0;//使用键盘标志
bit touch_screen_input=1;
unsigned char xdata menu_count=0;
unsigned char xdata key_up_down_count=0;//串行键盘上上下键次数
extern unsigned char current_form_index;//当前窗口 
extern Cform code Main_form;
extern Cform code para_form;
extern Cform code para_exp_form;
extern Cform code sample_form;
extern Cform code search_form;
extern Cbutton code btn_para;
extern Cbutton code btn_data;
extern Cbutton code btn_NO;
extern Cbutton code btn_lang;
extern Cbutton code btn_off;
extern Cbutton code btn_help;
extern Cbutton code btn_stop;
extern Cbutton code btn_para_ok;
extern Cbutton code btn_para_return;
extern Cbutton code btn_NO_return;
extern Cbutton code btn_search_return;
extern Cbutton code btn_para_left;
extern Cbutton code btn_para_right;
extern Cbutton code btn_para_0;
extern Cbutton code btn_para_1;
extern Cbutton code btn_para_2;
extern Cbutton code btn_para_3;
extern Cbutton code btn_para_4;
extern Cbutton code btn_para_5;
extern Cbutton code btn_para_6;
extern Cbutton code btn_para_7;
extern Cbutton code btn_para_8;
extern Cbutton code btn_para_9; 
//*********************************************************************************************************************
//触摸屏校正程序
//*********************************************************************************************************************  
//******************************************************************************************************************
void adjust_ts(void)
{
 
} 

//********************************************************************************************************************
//UART接收中断
//*********************************************************************************************************************
void UART1_receive(void) interrupt 20
{ 
 //RI1=0;
 SFRPAGE=UART1_PAGE;
 RI1=0;
 ts_temp=SBUF1;
 //SBUF1=ts_temp;
 //while(~TI1)
 //  TI1=0;
 SFRPAGE=LEGACY_PAGE;
 if(ts_R_ready==no)
 {
    ts_buff[ts_count]=ts_temp;
    if(ts_count==11)
    {
     ts_T_ready=yes;
	 ts_count+=1;
    }
    else if(ts_count==23)
    {
     ts_count=0;
     ts_R_ready=yes;
    }
    else
    {
     ts_count++;
     ts_R_ready=no; 
    }
  }
} 
//==============================================================================================================================
//获取串行键盘键值
//==============================================================================================================================
unsigned char get_key_value()
{
  unsigned char i,temp=0;
   
  CLK=0;
  LD=0;
  delay8us();
  LD=1;
  delay8us();
  for(i=0;i<8;i++)
  {
     DATA=0; 
	 if(DATA)
	  temp+=1;
     if(i<7)
	  temp=temp*2;
    CLK=1;
	delay8us();
	CLK=0;
	delay8us();
  }
  return temp;
}


//===========================================================================================================================
//发送消息
//=============================================================================================================================
void send_message(unsigned char form, unsigned int event)
{
  message_mail.enable=1;
  message_mail.form=form;
  message_mail.event=event;
}
//*******************************************************************************************************************
//若返回为0,则说明读键值无效,若返回为1,则说明Msg结构数据已更新
//*********************************************************************************************************************
unsigned int get_key(Msg* msg)
{
  //触摸屏
  if(ts_T_ready==yes)
  {
    //此处需要检查是不是一个完整的数据包
	if((ts_buff[0]!='T')||(ts_buff[11]!=0x0a))
	{
	  //出现错误,重新开始
	  ts_R_ready=no;
	  ts_T_ready=no;
      ts_count=0;
	  return 0;
	}
	//计算出键状态和键坐标
    msg->up_down=btn_down;  
	msg->x=(float)((ts_buff[2]-'0')*100+(ts_buff[3]-'0')*10+ts_buff[4]-'0'-37)*640/940;
	msg->y=480-(float)((ts_buff[7]-'0')*100+(ts_buff[8]-'0')*10+ts_buff[9]-'0'-116)*480/836;
	//R接收标志disable
   //	xt=msg->x;
   //	yt=msg->y;
	ts_T_ready=no;
	touch_screen_input=1;//标识识触摸屏输入
    return 1; 
  }  

  if(ts_R_ready==yes)
  {
    if((ts_buff[12]!='R')||(ts_buff[23]!=0x0a))
	{
	  //出现错误,重新开始
	  ts_R_ready=no;
	  ts_T_ready=no;
      ts_count=0;
	  return 0;
	}
   	//计算出键状态和键坐标
    msg->up_down=btn_up;  
	//msg->x=(float)((ts_buff[14]-'0')*100+(ts_buff[15]-'0')*10+(ts_buff[16]-'0')-37)*640/940;
	//msg->y=480-(float)((ts_buff[19]-'0')*100+(ts_buff[20]-'0')*10+(ts_buff[21]-'0')-116)*480/836;
	ts_R_ready=no;
  //	xt=msg->x;
  //	yt=msg->y;
    touch_screen_input=1;//标识识触摸屏输入
	return 1; 
  }
  //键盘 
 //temp_key_value=get_key_value();
  if(get_key_value()!=0x7f)
      { 
        key_up_flag=0;
        delay5ms();       //去抖  
        temp_key_value=get_key_value();
        if(temp_key_value!=0x7f)
           key_value=temp_key_value;
                                        
      }  
    else
      key_up_flag=1; 
	if(key_up_flag)
	{
	  switch(key_value)
	  {
	    case key_next:
		     key_value=0; 
		     keyborad_run=1; 
		    if(current_form_index==Main_form.index)
		    {
              if(menu_count==0)
			  {
			    button_up(&btn_help);
			    button_down(&btn_para);
                menu_count++;  
		      }
			  else if(menu_count==1)
			  {
			    button_up(&btn_para);
			    button_down(&btn_data);
                menu_count++;  
			  }
			  else if(menu_count==2)
			  {
			   	button_up(&btn_data);
			    button_down(&btn_NO);
			    menu_count++;  
			  }
			  else if(menu_count==3)
			  {
			    button_up(&btn_NO);
			    button_down(&btn_lang);
                menu_count++;  
			  }
			  else if(menu_count==4)
			  {
			    button_up(&btn_lang);
			    button_down(&btn_off);
                menu_count++;  
			  }
			   else if(menu_count==5)
			  {
			    button_up(&btn_off);
			    button_down(&btn_help);
                menu_count=0;  
			  }
		    }
		 // key_value=0; 	 
		  return 0;

		  case key_ok:
		     key_value=0;
             if(current_form_index==Main_form.index)
			 {
			   if(keyborad_run)

⌨️ 快捷键说明

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