当前位置:文档之家› 按键处理C语言源程序

按键处理C语言源程序


#i nclude <at89s53.h> #i nclude "4_4KeyScan.c" #i nclude "12864_Driver.c"
//配套键盘扫描程序,获得键码 //临时显示效果使用
#define TIMER0VALUE_H 0xDC //定时器0高位 #define TIMER0VALUE_L 0x00 //定时器0低位 //11.0592晶振定时10ms
unsigned char Font[16]; unsigned char i = 0;
//----------------------------// // 定时器0初始化函数 // //-----------------------------
void Timer0Init (void)
{
TMOD |= 0x01;
{
Key_Backup = Key_Num; //重新记录按键码
Key_Dis_F = 0; //按键标志没有处理
}
}
//区分支持短击和长击的按键处理程序 //占用定时器0,闪烁时间10ms //有效仿抖,时时性较高只能处理单击按键,目前和4*4键盘扫描程序一起使用
//-----------------------------------// 区分支持短击和长击的按键处理程序 // 作者:张子墨 // 最后更新时间:2006/11/21 // 当前版本:0.90 // 测试 MCU:AT89S51 //------------------------------------
//定时器0工作模式1
IE |= 0x82;
//EA = 1;ET0 = 1;
TH0 = TIMER0VALUE_H;
TL0 = TIMER0VALUE_L;
TR0 = 1;
}
#define AN_XD_NUM 2 #define AN_CA_NUM 100
//按键消抖常量,消抖时间大约2*10ms //常按计数器,如果持续按键时间大于100*10MS,判断为长按
unsigned char Key_Num = 0x00; //本次键码 unsigned char Key_Backup = 0x00; //备份键码 unsigned char Key_Cjnum = 0; //长按计数器
TH0 = TIMER0VALUE_H;
TL0 = TIMER0VALUE_L;
TR0 = 1;
}
//----------------------------// // 定时器0中断服务函数 // //-----------------------------
void Timer0SRV (void) interrupt 1 using 2
unsigned char Key_Num = 0x00; //本次键码 unsigned char Key_Backup = 0x00; //备份键码
bit Key_Dis_F = 0; bit Key_Scan_F = 0;
//按键禁止响应 //按键检测使能,中断每10MS 置有效
//----------------------------// //测试程序用的全局变量,对于主功能没有影响 // //----------------------------unsigned char i = 0;
{
TH0 = TIMER0VALUE_H; //重装初值
TL0 = TIMER0VALUE_L;
TR0 = 1;
Key_Scan_F = 1;
//允许扫描键盘
}
//----------------------------// // 临时测试按键效果函数,实际应用修改为散转函数 // //-----------------------------
//----------------------------// // 定时器0初始化函数 // //-----------------------------
void Timer0Init (void)
{
TMOD |= 0x01;
//定时器0工作模式1
IE |= 0x82;
//EA = 1;ET0 = 1;
void ShortKeyAction (void) {
Font[i++] = Key_Num; SentAData(Key_Num); if(i>32) { i = 0; SentAIns (0x01); SentAIns (0x80); } }
//----------------------------// // 按键扫描控制函数 //
#i nclude <at89s53.h> #i nclude "4_4KeyScan.c" #i nclude "12864_Driver.c"
//配套键盘扫描程序,获得键码 //测试用显示功能
#define TIMER0VALUE_H 0xDC //定时器0高位 #define TIMER0VALUE_L 0x00 //定时器0低位 //11.0592晶振定时10ms
按键处理 c 语言源程序 按键处理 c 语言源程序
//一般短按键处理程序 //占用定时器0,闪烁时间10ms //有效仿抖,时时性较高只能处理单击按键,目前和4*4键盘扫描程序一起使用
//-----------------------------------// 单击键盘控制程序 // 作者:张子墨 // 最后更新时/ 测试 MCU:AT89S51 //------------------------------------
if((Key_Num!=0x00)&&(Key_Num == Key_Backup)) //如果有按键并且与上次相同
{
if(!Key_Dis_F) //如果当前按键没有操作
{
ShortKeyAction(); //进入处理散转
Key_Dis_F = 1; //表示按键处理完成
}
}
else
//否则没有按键或者按键变化
bit Key_Dis_F = 0; bit Key_Scan_F = 0;
//按键禁止响应 //按键检测使能,中断每10MS 置有效
//----------------------------// //测试程序用的全局变量,对于主功能没有影响 // //-----------------------------
//-----------------------------
void KeyDeal (void)
{
Key_Scan_F = 0;
//表示10ms 周期内扫描完成,等待新的周期
Key_Num = KeyCodeConvert (GetKeyCode()); //获得最新键盘编码 根据实际情况,使用不同的扫描程序
相关主题