led_output(tmp);
// led_output((uint8 *)leds_gd); // num=1 } else {
// num=0; P2_0=0; //显示时间,如
“12:1”显示为:1201
i = tmr_sec / 60; //分 k = tmr_sec % 60; //秒 tmp[0] = (i / 10) % 10; //分 - 十位 tmp[1] = i % 10; //分 - 个位 tmp[2] = k / 10; //秒 - 十位 tmp[3] = k % 10; //秒 - 个位 led_output(tmp); //显示当前时间:分 + 秒 }
if (iscr != 0) { //自动换屏 if (expend16u(scr_auto_tmr, tmr_ms) >=
_SCR_AUTOTIME)
{ //自动换屏时间到,
切换页面
if (iscr == 1) iscr = 2; else iscr = 1; scr_auto_tmr = tmr_ms; //自动页面切换计
时器更新
} }
// if(ikb==0&flag!=0) ikb=8;
//下面为当前页面下,对按键状态的处理 switch (ikb) { case EKB_OK: //切换键 - 切换页面
到“时间设置”
case EKB_ADD: //加键 - 切换页面到
“时间设置”
case EKB_SUB: //减键 - 切换页面到
21
“时间设置”
scr_cur = 1; break; case EKB_MODE: //显示模式切换键
- “时间”和“1234”切换
//显示模式切换 if (iscr != 0) iscr = 0; else iscr = 1; //模式切换后,自动页面切换计时器更新 scr_auto_tmr = tmr_ms; break; } }
/*****************************************************
****************************************************
** 函数名称 : scr_setting
** 输 入 : 按键状态,是否初始化页面[1 - 初始化] ** 输 出 : 无
** 功能描述 : 时间设置模式显示模式的页面程序
******************************************************
****************************************************/
void scr_setting(uint8 ikb, uint8 bfresh) {
static uint16 scr_flash_tmr = 0; //闪烁显示计时器(用于焦
点闪烁计时)
static uint8 scr_flash_status = 0; //闪烁状态【0 - 显示焦点;
1 - 不显示焦点】
static uint8 scr_focus = 0; //操作的焦点[0 - 3 -- 表示
第一个到第四个led段码管]
static uint16 tmr_backup; //修改的时间参数临时缓存
区
uint8 tmp[4],tmp2[4]; // int8 n;
if (bfresh) { //屏幕切换进来时初始
化内容
//初始化闪烁计时器及闪烁状态 scr_flash_tmr = tmr_ms - (1000 -
_SCR_FLASH_HIDETIME - 100);
scr_flash_status = 0;
22
用
为:隐藏
//操作的焦点初始化 scr_focus = 0; //修改值初值取当前时间值 tmr_backup = tmr_sec; }
tmp2[0] = tmr_backup / 60; tmp2[1] = tmr_backup % 60;
tmp[0] = (tmp2[0] / 10) % 10; tmp[1] = tmp2[0] % 10; tmp[2] = tmp2[1] / 10; tmp[3] = tmp2[1] % 10; tmp2[0] = tmp[0];
//分 //秒
//分 - 十位 //分 - 个位 //秒 - 十位 //秒 - 个位
//tmp2 在数字修改时
tmp2[1] = tmp[1];
tmp2[2] = tmp[2]; tmp2[3] = tmp[3];
//确保焦点在有效范围内:0 - 3 if (scr_focus >= 4) scr_focus = 0;
//将闪烁时处于“隐藏”状态的数去掉 if (scr_flash_status == 1) { //“隐藏”对应的数位 tmp[scr_focus] = _LED_KC_BLANK; }
led_output(tmp); //更新闪烁状态值
if (scr_flash_status == 1) { //当前闪烁状态
tmr_ms)
>=
if (expend16u(scr_flash_tmr,
_SCR_FLASH_HIDETIME)
{
到,切换成“显示”
scr_flash_status = 0; scr_flash_tmr = tmr_ms;
器
} } else {
//“隐藏”时间
//更新闪烁计时
//当前闪烁状态
23
为:显示
if (expend16u(scr_flash_tmr, tmr_ms) >= (1000 -
_SCR_FLASH_HIDETIME))
{ //“隐藏”时间
到,切换成“显示”
scr_flash_status = 1; scr_flash_tmr = tmr_ms; //更新闪烁计时
器
} }
//下面为当前页面下,对按键状态的处理 switch (ikb) { case EKB_OK: //切换/确认键 - 从数
字高位逐个移动修改的焦点,然后保存修改值后退出页面,返回“时间”页面
//移动焦点:从 分钟的十位 到 秒的个位 scr_focus ++; if (scr_focus >= 4) { //所有数位都修改后,退
出该页面,切换到“时间”页面
tmr_sec = tmr_backup; //保存修改后的时间值 scr_cur = 0; //切换到“时间”页面 } break; case EKB_ADD: //加键 - 将焦点数位
加 1
case EKB_SUB: //减键 - 将焦点数位
减 1
if (ikb == EKB_ADD) { if (scr_focus == 2) { //scr_focus == 2,修
改 秒的十位,进制为 6
tmp2[scr_focus] = (tmp2[scr_focus] + 1) % 6; } else { //分的十位、个位
及 秒的个位,进制为 10
tmp2[scr_focus] = (tmp2[scr_focus] + 1) %
10;
}
24
} else { if (scr_focus == 2) { //scr_focus == 2,修
改 秒的十位,进制为 6
if (tmp2[scr_focus] == 0) tmp2[scr_focus] = 5; else tmp2[scr_focus]--; } else { //分的十位、个位
及 秒的个位,进制为 10
if (tmp2[scr_focus] == 0) tmp2[scr_focus] = 9; else tmp2[scr_focus] --; } } //将修改后的各个数位组合成新的修改值 tmr_backup = (((uint16)((tmp2[0] * 10) + tmp2[1])) *
60) + (uint16)((tmp2[2] * 10) + tmp2[3]);
break; case EKB_MODE: //显示模式切换键
- 直接切换到“时间”页面
scr_cur = 0; break; } }
//--------------------------------------------------------------------------------------------------------//
/*****************************************************
****************************************************
** 函数名称 : main ** 输 入 : 无 ** 输 出 : 无
** 功能描述 : 主程序入口
******************************************************
****************************************************/
uint8 kb_getstatus2(void) {
25