📄 keys.c
字号:
/**********************************************
* File: Keys.C
* Description: Tri-Angle
* Created Date: 2007-10-01
* Last Modified: 2007-10-01
* Author: Jeffrey - Schicksal@126.com
* Notes: None
**********************************************/
//#include "Atmel/AT89X51.h"
#include "SST/SST89x5x4.H"
#include "INTRINS.H"
#include "Keys.h"
/**********************************************
* Function: void DelayMs(unsigned int i)
* Input Variables: unsigned int i
* Return Variables: void
* Usage: Delay Function
**********************************************/
void DelayMs(unsigned int i) // Delay Function 1
{
unsigned char j;
for (; i!=0; i--)
for (j=2000; j!=0; j--) {;}
}
/**********************************************
* Function: void SetBuzzer(unsigned char B)
* Input Variables: unsigned char B
* Return Variables: void
* Usage: Buzzer Driver
**********************************************/
void SetBuzzer(unsigned char B)
{
if(B>0x01)
return; // 输入值超限
Buzzer = B; // 改变Buzzer状态
}
/**********************************************
* Function: unsigned char read_keys(void)
* Input Variables: void
* Return Variables: None
* Usage: Read keys
**********************************************/
unsigned char read_keys()
{
unsigned char keys; // 返回键值变量
P1 = 0xff; // 置高P1,准备读取
keys = P1; // 读取键值
return keys; // 返回键值
}
extern volatile unsigned char time[4];
extern volatile unsigned char alarm[2];
volatile unsigned char flag=0;
volatile unsigned char alarm_flag=1;
volatile unsigned char change_timeflag=0;
volatile unsigned char change_adjustflag=0;
/**********************************************
* Function:void KeyProcess()
* Input Variables: void
* Return Variables: None
* Usage: key process
**********************************************/
void KeyProcess()
{
unsigned char Key, keyMODE, keySET, keyUP, keyDOWN;
Key = read_keys();
if (Key != 0x0f)
{
DelayMs(180);
Key = read_keys();
if (Key != 0x0f)
{
keyMODE = Key & 0x01;
keySET = Key & 0x08;
keyUP = Key & 0x04;
keyDOWN = Key & 0x02;
SetBuzzer(Buzzer_OFF); //闹表不响
alarm_flag=0; // 取消闹表标示
if (keyMODE==0) // MODE键被按下
{
if (change_adjustflag==0) // 当前是时钟模式
change_adjustflag=1; // 改变为闹表模式
else
change_adjustflag=0; // 改变为时钟模式
change_timeflag=0;
}
if (keySET==0) // SET键被按下
{
if (change_adjustflag==0) // 时钟模式
{
change_timeflag++;
if (change_timeflag>=3)
change_timeflag=0;
}
else // 闹表模式
{
if (alarm_flag==0)
{
alarm_flag=1;
change_timeflag=0;
flag=1;
}
else
{
if (change_timeflag==0)
{
if (flag==1) // 进入修改闹钟程序
{
change_timeflag++;
flag=0;
}
else // 退出闹钟修改程序
{
change_timeflag=0;
alarm_flag=0;
}
}
else
{
change_timeflag++;
if (change_timeflag>=3)
change_timeflag=0;
}
}
}
}
if (keyUP==0) // UP键被按下
{
if (change_adjustflag == 0)
{
// 调整时钟
time[change_timeflag-1]++;
if (time[1]==0xff)
{
time[1]=59;
}
if (time[0]==0xff)
{
time[0]=23;
}
if (time[3]>1)
{
time[3]=0;
time[2]++;
}
if (time[2]>=60)
{
time[2]-=60;
}
if (time[1]>=60)
{
time[1]-=60;
}
if (time[0]>=24)
time[0]-=24;
}
else
{
// 调整闹表
alarm[change_timeflag-1]++;
if (time[1]==0xff)
{
time[1]=59;
}
if (time[0]==0xff)
{
time[0]=23;
}
if (time[3]>1)
{
time[3]=0;
time[2]++;
}
if (time[2]>=60)
{
time[2]-=60;
}
if (time[1]>=60)
{
time[1]-=60;
}
if (time[0]>=24)
time[0]-=24;
}
}
if (keyDOWN==0) // DOWN键被按下
{
if (change_adjustflag == 0)
{
// 调整时钟
time[change_timeflag-1]--;
if (time[1]==0xff)
{
time[1]=59;
}
if (time[0]==0xff)
{
time[0]=23;
}
if (time[3]>1)
{
time[3]=0;
time[2]++;
}
if (time[2]>=60)
{
time[2]-=60;
}
if (time[1]>=60)
{
time[1]-=60;
}
if (time[0]>=24)
time[0]-=24;
}
else
{
// 调整闹表
alarm[change_timeflag-1]--;
if (alarm[1]==0xff)
alarm[1]=59;
if (alarm[0]==0xff)
alarm[0]=23;
if (alarm[1]>=60)
{
alarm[1]-=60;
}
if (alarm[0]>=24)
alarm[0]-=24;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -