//*************************************************************************************************
//* *
//* ******************************键码处理程序************************** *
//* *
//*************************************************************************************************
//*************************************************************************************************
//* *
//* ******************************头文件及宏定义************************** *
//* *
//*************************************************************************************************
#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);
没有合适的资源?快使用搜索试试~ 我知道了~
单片机+LCD+16个按键输入字母和数字并显示的电路包含源代码和Proteus仿真电路
共51个文件
lst:10个
obj:9个
h:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 72 浏览量
2022-07-04
17:50:55
上传
评论
收藏 258KB RAR 举报
温馨提示
单片机+LCD+16个按键输入字母和数字并显示的电路包含源代码和Proteus仿真电路
资源推荐
资源详情
资源评论
收起资源包目录
单片机+LCD+16个按键输入字母和数字并显示的电路包含源代码和Proteus仿真电路.rar (51个子文件)
单片机+LCD+16个按键输入字母和数字并显示的电路包含源代码和Proteus仿真电路
LCDShow.PWI 768B
22.JPG 145KB
LCDShow.DSN 95KB
Keil
InputNumber.lst 3KB
InputChar.lst 7KB
KeyPorcess.lst 5KB
KeyProcess.obj 9KB
LCDShow.Uv2 3KB
Introduce.lst 5KB
main.lst 14KB
SMC1602.obj 11KB
InputChar.obj 3KB
LCDShow.plg 179B
Introduce.obj 4KB
LCDShow.DSN 95KB
LCDShow.Opt 3KB
LCDShow.M51 35KB
LCDShow 35KB
include
CapProcess.h 218B
KeyScan.h 103B
SMC1602.h 1KB
includes.h 173B
Introduce.h 80B
InputNumber.h 114B
SmallProcess.h 228B
KeyProcess.h 106B
InputChar.h 113B
KeyScan.lst 7KB
main.obj 7KB
SMC1602.lst 15KB
SmallProcess.obj 2KB
CapProcess.lst 5KB
LCDShow.hex 8KB
SmallProcess.lst 5KB
KeyProcess.lst 18KB
LCDShow.lnp 175B
KeyScan.obj 3KB
InputNumber.obj 1001B
CapProcess.obj 2KB
KeyProcess.__i 133B
sources
SMC1602.c 7KB
SmallProcess.c 2KB
main.c 7KB
InputNumber.c 1KB
CapProcess.c 2KB
KeyProcess.c 8KB
InputChar.c 3KB
KeyScan.c 3KB
Introduce.c 2KB
11.JPG 152KB
Last Loaded LCDShow.DBK 95KB
共 51 条
- 1
资源评论
shengyin714959
- 粉丝: 727
- 资源: 5225
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功