//*************************************************************************************************
//* *
//* ******************************键码处理程序************************** *
//* *
//*************************************************************************************************
//*************************************************************************************************
//* *
//* ******************************头文件及宏定义************************** *
//* *
//*************************************************************************************************
#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);
荣华富贵8
- 粉丝: 221
- 资源: 7653
最新资源
- 基于java+springboot+vue+mysql的水果蔬菜商城 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+vue+mysql的网上购物商城 源码+数据库+论文(高分毕业设计).zip
- 基于java+springboot+vue+mysql的校园朋友圈系统 源码+数据库+论文(高分毕业设计).zip
- 深度学习驱动的油气开发工程技术
- 基于java+springboot+vue+mysql的无可购物网站 源码+数据库+论文(高分毕业设计).zip
- sasl-0.3.1-cp37-cp37m-win-amd64.whl
- 蛇年的祝福前奏,以及JAVA贪吃蛇的一个项目讲解
- 包含fontawesome-pro依赖库的node库,版本对应v18.20.4
- 深度学习在岩土工程中应用与实践=-前沿技术与创新实践(2025)
- boost1.72+win10+vs2022+64位动态编译+debug版本
- 静态无功补偿器(SVC)仿真模型 采用静态无功补偿器(SVC)对一个500kv, 3000mva的系统进行电压调节 (1)当系统电压较低时,SVC产生无功功率(SVC电容性) (2)当系统电压较高
- 数字孪生行业发展和数字孪生发展研究报告.pdf
- Huang晶体塑性umat耦合Johnson-Cook损伤模型,实现晶体材料弹塑性损伤模拟分析
- Commander One PRO for Mac v.3.12
- 自动化码头AGV无冲突动态路径规划
- 基于simulink的三自由度汽车操纵模型,模型全套可运行 自由度:侧向-侧倾-横摆 带数据参数与详细公式文档 基于二自由度模型的成熟理论,采用SAE坐标系建立三自由度汽车操纵模型 该模型能够反映
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈