//*************************************************************************************************
//* *
//* ******************************键码处理程序************************** *
//* *
//*************************************************************************************************
//*************************************************************************************************
//* *
//* ******************************头文件及宏定义************************** *
//* *
//*************************************************************************************************
#include "InputNumber.h"
#include "InputChar.h"
#include "SMC1602.h"
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<输入法标志位>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
bit b_InputMode=1; //0表示是数字输入法,1表示是字母输入法。
//默认是字母输入法。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<显示介绍>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
extern bit b_Introduce;
void vIntroduce();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<连续按键计数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char uc_KeyTemp=0; //按键键码暂存。
unsigned char uc_ClickCount=1; //同一个按连续按下的次数。
extern unsigned char uc_CleanCount; //清除按键计数时间计数。
bit b_CleanClick=0; //为1时启用清除。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<大小写模式>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
extern bit b_CapStatus; //0--大写;1--小写。(默认为0:大写)
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<刷新字符显示>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char uca_CharBox[17]={" "};
//存储刷新字符。
unsigned char uc_CharPointer=0; //刷新字符末位计数,指向字符光标位置。
//*************************************************************************************************
//* *
//* ******************************字符显示更新函数************************** *
//* *
//*************************************************************************************************
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<删除所有字符>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vCleanAll()
{
unsigned char ucCount;
for(ucCount=0;ucCount<uc_CharPointer;ucCount++)
uca_CharBox[ucCount]=' ';
uc_CharPointer=0;
vWriteCMD(0xC0);
vShowChar(" ");
vWriteCMD(0xC0);
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<删除一个字符>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vCleanOne()
{
if(uc_CharPointer>0)
{
uc_CharPointer--;
uca_CharBox[uc_CharPointer]=' ';
vWriteCMD(0xC0+uc_CharPointer);
vShowOneChar(' ');
vWriteCMD(0xC0+uc_CharPointer);
}
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<添加一个字符>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vCharAdd(unsigned char ucChar) //接收的是ASC字符。
{
unsigned char ucCount;
if(uc_CharPointer<16)
{
vWriteCMD(0xC0+uc_CharPointer);
vShowOneChar(ucChar);
uca_CharBox[uc_CharPointer]=ucChar; //将字符写入uca_CharBox。
uc_CharPointer++; //使ucCharPoint只想下一个位置。
}
else
{ //如字符超出16个则全部清除,把光标移到最左边。
vWriteCMD(0xC1);
vShowChar(" ");
vWriteCMD(0xC0);
vShowOneChar(ucChar); //写入输入字符。
for(ucCount=1;ucCount<16;ucCount++)
uca_CharBox[ucCount]=' '; //同时清空uca_CharBox。
uca_CharBox[0]=ucChar;
uc_CharPointer=1;
}
b_CleanClick=1;
uc_CleanCount=0;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<获取按键字符ASC值>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char ucGetChar(unsigned char ucChar)
{
if(b_InputMode==0)
return ucGetNum(ucChar); //获取数字字符。
else
return ucGetLetter(ucChar); //获取字母字符。
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<字符最终处理函数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vCharProcess(unsigned ucKeyCode) //接收的是键码。
{
if(b_InputMode==0) //如果是数字输入,就直接输出。
vCharAdd(ucGetChar(ucKeyCode));
else
{
if(ucKeyCode!=42) //如果是字幕输入,则判断是不是标点。
{
if(uc_ClickCount==0)
{
vCharAdd(ucGetChar(ucKeyCode)); //如果是只连续按了1次就直接输出。
}
else
{
uc_CharPointer--; //否则光标前移,然后再输出。
vCharAdd(ucGetChar(ucKeyCode));
}
}
else
{
vShowOneChar('!'); //punc
uca_CharBox[uc_CharPointer++]='!'; //写入感叹号!
}
}
b_CleanClick=1;
uc_CleanCount=0;
}
//*************************************************************************************************
//* *
//* ******************************键码处理主程序************************** *
//* *
//*************************************************************************************************
void vKeyProcess(unsigned char ucKeyCode)
{
if(uc_KeyTemp==ucKeyCode) //判断按键与上一次所按的键是否相同。
{
if(uc_ClickCount<255) //同一个按连续按下的次数:1~255。
uc_ClickCount++;
}
else
{
uc_KeyTemp=ucKeyCode;
uc_ClickCount=0;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<按键处理>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
switch(ucKeyCode)
{
case 14: //********************显示介绍************************************************
b_Introduce=1;
vIntroduce();
break;
case 24: //********************输入空白************************************************
vCharAdd(' ');
break;
case 34: //**********************大小写切换*********************************************
if(b_InputMode==1)
{
b_CapStatus=~b_CapStatus;
if(b_CapStatus==0) //大写。
{
vWriteCMD(0x8E);
vShowOneChar('B');
vWriteCMD(0xC0+uc_CharPointer);
}
else
{
vWriteCMD(0x8E);
vShowOneChar('S');
vWriteCMD(0xC0+uc_CharPointer);
}
}
break;
case 41: //********************删除所有字符*********************************************
vCleanAll();
break;
case 43: //**********************删除1个字符********************************************
vCleanOne();
break;
case 44: //********************输入法切换***********************************************
b_InputMode=~b_InputMode;
if(b_InputMode)
{
if(b_CapStatus==0) //切换到字符输入法时在右上角显示“C”
{
vWriteCMD(0x8E);
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
荣华富贵8
- 粉丝: 225
- 资源: 7653
最新资源
- 基于西门子1200 PLC的酒厂输送带系统:自动化控制与精准定位的完美结合,**基于西门子PLC的酒厂自动化输送带系统:实现精确控制与高效贴标**,基于PLC的酒厂输送带系统 采用西门子博途软件梯形图
- 《六层电梯MCGS7.7与三菱FX3U PLC联机运行程序详解:带IO表新功能,开门延时6秒,通过COM4口通讯实现》,六层电梯MCGS7.7与三菱FX3U PLC联机运行程序:带IO表更新功能,实现
- 《软件滤波算法:应对数据采集误差的数字滤波策略与实践》,软件滤波算法与数字信号的精确采集:从误差处理到高效滤波的实践与应用研究,资料: 软件滤波算法、数字滤波常用的算法, AD采集,数据采集等经常会遇
- 滑膜控制下的差动制动防侧翻稳定系统设计与仿真验证:横摆力矩分配策略及其实车测试分析,滑膜控制下的差动制动防侧翻稳定性系统设计与仿真验证,基于滑膜控制的差动制动防侧翻稳定性控制,上层通过滑膜控制产生期望
- 直流电机双闭环调速系统仿真模型:附带参数计算与PI参数整定文档,实现无静差跟踪功能,直流电机双闭环调速系统仿真模型:附带参数计算与PI参数整定教程,实现无静差跟踪功能,直流电机双闭环调速系统仿真模型
- 基于Java及前端技术的全栈保险系统设计源码
- 基于Java和HTML的大学生迎新管理系统设计源码
- 主动油气悬架控制的PID与模糊-模糊PID策略应用,基于PID与模糊PID控制的主动油气悬架系统优化研究,PID、模糊、模糊PID控制主动油气悬架控制 ,PID; 模糊PID; 主动油气悬架控制; 模
- 基于Html语言的图床仓库设计源码
- 定制C#上位机通讯系统:兼容多种设备与通讯协议,支持MODBUS、串口及TCP连接,定制C#上位机通讯系统:兼容多种设备与通讯协议,支持MODBUS、串口及TCP连接,定制C#上位机,与各种第三方设备
- 基于Java技术的家用农业用品管理系统设计源码
- 基于Java语言实现的DreamPartner社交平台设计源码
- INCA标定工具必备:高效生成A2L文件的双功能软件,支持CCP与XCP标定,CANape兼容,附详细使用说明及技术支持,适用于INCA及CANape标定的A2L文件生成工具:双协议支持,包含使用说
- 基于四轮轮毂电机驱动的AFS与DYC集成控制:滑模与PID联合控制下的横摆力矩分配与车辆稳定性研究 ,基于四轮轮毂电机驱动车辆的AFS与DYC集成控制策略联合仿真研究:滑模与PID控制下的顶层控制器设
- 针对数据集的异常检测及修正:建立模型进行精准识别,修正异常值后效果对比图展示,基于数据集的异常检测与修正算法:模型检测与异常值修正的实践效果对比图,异常检测及修正 针对数据集进行模型检测,检测异常后对
- 基于Vue+Vuex+Vue-router+EF的权限管理系统设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)