📄 key.c
字号:
/*****************
* 处理变频器键盘
*****************/
#include "GLOBAL.H"
uint psw1; //密码1 保存在操作器上
uchar psw2req_flag = 0;
uchar psw2change_flag = 0;
uchar menu_ptr1;
// 20 毫秒扫描一次,读取键值
uchar read_key(void)
{
uchar keycode,buf,i;
static uchar key_delay[10];
// 扫描键值
keycode = 0;
ROW0 = 0;
delay(1);
if (!COL0) keycode = KEY_ENTER; // 9
if (!COL1) keycode = KEY_DN; // 8
if (!COL2) keycode = KEY_ESC; // 7
ROW0 = 1;
ROW1 = 0;
delay(1);
if (!COL0) keycode = KEY_RIGHT; // 6
if (!COL1) keycode = KEY_STOP; // 5
if (!COL2) keycode = KEY_LEFT; // 4
ROW1 = 1;
ROW2 = 0;
delay(1);
if (!COL0) keycode = KEY_F2; // 3
if (!COL1) keycode = KEY_UP; // 2
if (!COL2) keycode = KEY_HOME; // 1
ROW2 = 1;
// 单个按键
for (i = 1; i < 10; i++)
{
if (keycode != i)
{
key_delay[i] = 0;
}
else
{
if (key_delay[i] < 60)
{
key_delay[i]++;
}
else
{
key_delay[i] = 36; //处理一直按住
}
if ((key_delay[i] == 2) || (key_delay[i] == 36)) return(i);
}
}
return(0);
}
/*********************************************************************************
* 名称:process_keys
* 功能:密码登陆
* 输入:keycode 键盘码
*
* 输出:
* 返回:无
***********************************************************************************/
void process_keys(uchar keycode)
{
uint const bit_val[] = {1,10,100,1000,10000};
//uchar i;
uint ii;
uint pswtmp1,pswtmp2,pswtmp3;
if (keycode == KEY_LEFT)
{
if (bit_ptr < 4)
bit_ptr++;
else
bit_ptr = 0;
}
if (keycode == KEY_RIGHT)
{
if (bit_ptr > 0)
bit_ptr--;
else
bit_ptr = 4;
}
if (keycode == KEY_UP) // 参数增量
{
if (0xffff - edit_val >= bit_val[bit_ptr])
{
edit_val += bit_val[bit_ptr];
}
}
if (keycode == KEY_DN) // 参数减量
{
if (edit_val >= bit_val[bit_ptr])
{
edit_val -= bit_val[bit_ptr];
}
else
{
edit_val = 0;
bit_ptr = 0;
}
}
switch(menu_ptr1)
{
case 0://主机地址设置,默认31
{
if (keycode == KEY_F2)
{
if(LCD_OFFSET-10>=0) LCD_OFFSET-=10;
else LCD_OFFSET =250;
write_eerom(1006,LCD_OFFSET);
update_dac(LCD_OFFSET); // 调整 LCD 偏置电压
}
if (keycode == KEY_ESC)
{
bit_ptr = 0;
menu_ptr1 = 0;
edit_val = read_eerom(1010);
}
else if (keycode == KEY_ENTER)
{
Slave_addr = edit_val;
write_eerom(1010,(uchar)Slave_addr); //注意类型转换
menu_ptr1 = 1;
edit_val = read_eerom(1011);
}
break;
}
case 1://模式选择,默认RTU
{
if (keycode == KEY_ESC)
{
bit_ptr = 0;
menu_ptr1 = 0;
edit_val = read_eerom(1011);
}
else if (keycode == KEY_ENTER)
{
Modbus_mode = edit_val;
write_eerom(1011,(uchar)Modbus_mode); //注意类型转换
menu_ptr1 = 2;
edit_val = read_eerom(1012);
}
break;
}
case 2: //通信波特率,默认9600
{
if (keycode == KEY_ESC)
{
bit_ptr = 0;
menu_ptr1 = 1;
edit_val = read_eerom(1012);
}
else if (keycode == KEY_ENTER)
{
ModbusBPS = edit_val;
write_eerom(1012,(uchar)ModbusBPS); //注意类型转换
menu_ptr1 = 3;
edit_val = read_eerom(1013);
}
break;
}
case 3: //通信格式选择 默认 8,N,1
{
if (keycode == KEY_ESC)
{
bit_ptr = 0;
menu_ptr1 = 2;
edit_val = read_eerom(1013);
}
else if (keycode == KEY_ENTER)
{
Commformat = edit_val;
write_eerom(1013,(uchar)Commformat); //注意类型转换
setloop = 0x0f;
}
break;
}
case 4: //密码登陆
{
if (keycode == KEY_ESC)
{
if(psw2req_flag == 0)
{
menu_ptr = 0;
psw2change_flag = 0;
}
if(psw2change_flag == 1)
{
menu_ptr1 = 2;
psw2change_flag = 0;
}
edit_val = 0;
bit_ptr = 0;
}
if (keycode == KEY_ENTER)
{
if(psw2req_flag == 0)//psw login status
{
if((edit_val == 54720)||(edit_val == 54726))
{
edit_val = psw1;
break;
}
bit_ptr = 0;
edit_val = 0;
}
}
if (keycode == KEY_F2)
{
if(LCD_OFFSET-10>=0) LCD_OFFSET-=10;
else LCD_OFFSET =250;
write_eerom(1006,LCD_OFFSET);
update_dac(LCD_OFFSET); // 调整 LCD 偏置电压
}
break;
}
default:
break;
}
}
/*********************************************************************************
* 名称:display_menus
* 功能:处理psw
* 输入:keycode 键盘码 10
* 输出:
* 返回:无
***********************************************************************************/
void display_menus(void)
{
char buff[17];
char *p;
uchar i;
switch(menu_ptr1)
{
case 0://设主机地址,默认31
{
display_str(0,0," Setting Menu ");
display_str(0,2,"================");
set_cursor(8-bit_ptr,4); // 光标显示
strcpy(buff, " ");
sprfu(&buff[4],edit_val,0,5);// 显示数据
display_str(0,4,buff);
display_str(0,6," Slave addr set ");
break;
}
case 1://设工作模式,默认RTU
{
display_str(0,0," Setting Menu ");
display_str(0,2,"================");
set_cursor(8-bit_ptr,4); // 光标显示
strcpy(buff, " ");
sprfu(&buff[4],edit_val,0,5);// 显示数据
display_str(0,4,buff);
display_str(0,6,"Modbus Mode set ");
break;
}
case 2://设波特率,默认9600
{
display_str(0,0," Setting Menu ");
display_str(0,2,"================");
set_cursor(8-bit_ptr,4); // 光标显示
strcpy(buff, " ");
sprfu(&buff[4],edit_val,0,5);// 显示数据
display_str(0,4,buff);
display_str(0,6," BaudRate Set ");
break;
}
case 3://设数据格式,默认8,N,1
{
display_str(0,0," Setting Menu ");
display_str(0,2,"================");
set_cursor(8-bit_ptr,4); // 光标显示
strcpy(buff, " ");
sprfu(&buff[4],edit_val,0,5);// 显示数据
display_str(0,4,buff);
display_str(0,6," Data format Set");
break;
}
case 4: //密码登陆
{
set_cursor(9-bit_ptr,6); // 光标显示
display_str(0,0," 密码输入 ");
display_str(0,2, "==F2键调对比度==");
display_str(0,4," ");
strcpy(buff," ");
sprfu(&buff[5],edit_val,0,5);// 显示数据
display_str(0,6,buff);
break;
}
case 5: //密码修改
{
set_cursor(9-bit_ptr,4); // 光标显示
display_str(0,0," 密码更改 ");
display_str(0,2, "================");
strcpy(buff," ");
sprfu(&buff[5],edit_val,0,5);// 显示数据
display_str(0,4,buff);
display_str(0,6,"按ESC退出修改 ");
break;
}
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -