📄 key.c
字号:
/*
*********************************************************************************************************
** 函数名称 :key()
** 函数功能 :按键检测程序
*********************************************************************************************************
*/
//#include "key.h"
#include "config.h"
struct
{
uint8 key1; //主控制键,0:横向显示汉字,1:纵向显示汉字,2:横向显示字母,3:纵向显示字母
uint8 key2; //副控制键,与key1联合使用,key1在前,
//0:显示第一组汉字,1:显示第二组汉字,2:显示第三组汉字,3:显示第四组汉字;4:循环显示
//0:显示第一组字母,1:显示第二组字母,2:显示第三组字母,3:显示第四组字母;4:循环显示
uint8 key3; //暂时不使用
uint8 key4; //暂时不使用
uint8 key5; //按下纵向显示串口接受的数据,再次按下横向显示串口接受的数据,第三次按下退出
uint8 key6; //按下查询串口,接受数据。再次按下退出
} KeyTabStruct={0,0,0,0,0,0};
extern uint8 FristHanzi[];
extern uint8 SecondHanzi[];
extern uint8 ThirdHanzi[];
extern uint8 FourthHanzi[];
extern uint8 Fristzimu[];
extern uint8 Secondzimu[];
extern uint8 Thirdzimu[];
extern uint8 Fourthzimu[];
extern uint8 snd[];
extern uint8 FristHanzi_H[];
extern uint8 SecondHanzi_H[];
extern uint8 ThirdHanzi_H[];
extern uint8 FourthHanzi_H[];
const uint32 KEY1 = 1 << 16; // P0.16连接KEY1
const uint32 KEY2 = 1 << 17; // P0.17连接KEY2
const uint32 KEY3 = 1 << 18; // P0.18连接KEY3
const uint32 KEY4 = 1 << 19; // P0.19连接KEY4
const uint32 KEY5 = 1 << 20; // P0.20连接KEY5
const uint32 KEY6 = 1 << 21; // P0.21连接KEY6
const uint32 KEY7 = 0x3F << 16; // 判断是否有键按下时使用
/*
*********************************************************************************************************
** 函数名称 :void Delay5MS( void )
** 函数功能 :延时5毫秒函数,用于检测按键,延时去抖
** 跳线说明 :
*********************************************************************************************************
*/
void Delay5MS( void )
{
uint16 i=5552;
while(i--);
}
/*
*********************************************************************************************************
** 函数名称 :key()
** 函数功能 :检测按键,有键按下,返回1,否则返回0
** 跳线说明 :把JP8的KEY跳线短接
*********************************************************************************************************
*/
uint8 key_jiance(void)
{
//uint32 key;
//key=;
if((IO0PIN & KEY7) != KEY7)
return 1; //有按键时返回1
else return 0;
}
/*
*********************************************************************************************************
** 函数名称 :uint8 key_scan (void)
** 函数功能 :检测按键,返回按键值
** 跳线说明 :把JP8的KEY跳线短接
*********************************************************************************************************
*/
uint8 key_scan (void)
{
uint8 key,key1;
if ((IO0PIN & KEY1) == 0) key=1;
if ((IO0PIN & KEY2) == 0) key=2;
if ((IO0PIN & KEY3) == 0) key=3;
if ((IO0PIN & KEY4) == 0) key=4;
if ((IO0PIN & KEY5) == 0) key=5;
if ((IO0PIN & KEY6) == 0) key=6;
while(1)
{
key1=key_jiance();
if( !key1 )
return( key);
}
}
/********************************************************************************************************
** 函数名称 :NUM1_PROC()
** 函数功能 :1# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM1_PROC(void)
{
KeyTabStruct.key2=0;
KeyTabStruct.key3=0;
KeyTabStruct.key4=0;
KeyTabStruct.key5=0;
KeyTabStruct.key6=0;
KeyTabStruct.key1++;
//if(KeyTabStruct.key1!=0)
//CCR = 0x01; //启动RTC,在时钟修改模式下误按1号键时,退出时钟修改,不承认新设定的值
if(KeyTabStruct.key1>4)
KeyTabStruct.key1=0;
}
/********************************************************************************************************
** 函数名称 :NUM2_PROC()
** 函数功能 :2# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM2_PROC(void)
{
KeyTabStruct.key2++;
if(KeyTabStruct.key2>4)KeyTabStruct.key2=0;
}
/********************************************************************************************************
** 函数名称 :NUM3_PROC()
** 函数功能 :3# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM3_PROC(void)
{
//KeyTabStruct.key3=1;
}
/********************************************************************************************************
** 函数名称 :NUM4_PROC()
** 函数功能 :4# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM4_PROC(void)
{
//KeyTabStruct.key4=1;
}
/********************************************************************************************************
** 函数名称 :NUM5_PROC()
** 函数功能 :5# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM5_PROC(void)
{
KeyTabStruct.key5 +=1;
if(KeyTabStruct.key5>2)KeyTabStruct.key5=0;
}
/********************************************************************************************************
** 函数名称 :NUM6_PROC()
** 函数功能 :6# 键解释函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void NUM6_PROC(void)
{
KeyTabStruct.key6 ^=1;
}
/********************************************************************************************************
** 函数名称 :KEY_PROC()
** 函数功能 :键盘处理函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
uint8 KEY_PROC(void)
{ uint8 key;
key=key_jiance();
if(!key) // 延时去抖程序
return 0;
Delay5MS();
if(key)
key=key_scan();
if (key==0) return 0;
switch(key)
{
case 1: NUM1_PROC();
break;
case 2: NUM2_PROC();
break;
case 3: NUM3_PROC();
break;
case 4: NUM4_PROC();
break;
case 5: NUM5_PROC();
break;
case 6: NUM6_PROC();
break;
default:
break;
}
return 1;
}
/********************************************************************************************************
** 函数名称 :TimeChangeQueren(week,hour,min)
** 函数功能 :时间修改确认函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void TimeChangeQueren(uint8 week,uint8 hour,uint8 min)
{
PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
CCR = 0x00; // 禁止时间计数器
//YEAR = 2006;
//MONTH = 11;
//DOM = 1;
DOW = week;
HOUR = hour;
MIN = min;
//SEC = 59;
CIIR = 0x01; // 设置秒值的增量产生1次中断
CCR = 0x01; // 启动RTC
}
/********************************************************************************************************
** 函数名称 :void Timechange( void )
** 函数功能 :时间修改函数
** 入口参数 :
** 出口参数 :无
********************************************************************************************************/
void Timechange( void )
{
uint8 week,hour,min;
CCR=0; //时间计数器都被禁止,这时可对其初始化
week=Time[8];
hour=Time[9]*10+Time[10];
min=Time[11]*10+Time[12];
switch(KeyTabStruct.key2)
{
case 1: //修改星期
if(KeyTabStruct.key3)
{
week++;
if(week>7)week=1;
KeyTabStruct.key3=0;
}
if(KeyTabStruct.key4)
{
week--;
if(week==0)week=7;
KeyTabStruct.key4=0;
}
break;
case 2: //修改小时
if(KeyTabStruct.key3)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -