📄 ial.#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 + -