P1_2=1; P1_1=1; P1_0=0; break; case 1: P1_3=1; P1_2=1; P1_1=0; P1_0=1; break; case 2: P1_3=1; P1_2=0; P1_1=1; P1_0=1; break; }
// for (i = 0; i < 250; i ++);
if (iled == 1) P0 = led_zimo[leds[iled]] & (0x7F); else P0 = led_zimo[leds[iled]]; }
//--------------------------------------------------------------------------------------------------------//
/*****************************************************
****************************************************
** 函数名称 : kb_init ** 输 入 : 无 ** 输 出 : 无
** 功能描述 : 按键初始化
******************************************************
****************************************************/
void kb_init(void) {
uint8 i;
for (i = 0; i < 4; i ++) { t_kb[i].io_s = 0; t_kb[i].io_n = 0; t_kb[i].kb_s = 0; t_kb[i].kb_chg = 0; } }
/*****************************************************
16
****************************************************
** 函数名称 : kb_updata
** 输 入 : 切换确认键的当前状态,加键当前状态,减
键当前状态,模式键当前状态
** 输 出 : 无
** 功能描述 : 键盘扫描状态更新:按键未按下时为 0;按
键按下时为 1。【注意 参数顺序别错了,否则相当于按键被交换了】
******************************************************
****************************************************/
void kb_updata(uint8 iok, uint8 iadd, uint8 isub, uint8 imode) {
uint8 i,k,n;
n = (iok == _KBS_PRESS) | ((iadd == _KBS_PRESS) << 1) | ((isub == _KBS_PRESS) << 2) | ((imode == _KBS_PRESS) << 3) ; for (i = 0; i < 4; i ++) { k = ((n & (1 << i)) != 0);
//获得 键盘扫描状态
if (t_kb[i].io_s != k) {
//两次间状态不同,重置累计数据
t_kb[i].io_n = 1; } else t_kb[i].io_n ++; t_kb[i].io_s = k;
//更新当前状态到状态缓存,用于下一次判定时使用
if (t_kb[i].io_n >= _KB_DITHERT) {
//去抖动ok后,进行实质性判断,否则,保持现状
if (t_kb[i].io_s == _KBS_PRESS) {
//键按下状态
if (t_kb[i].io_n == _KB_DITHERT) {
//按键去抖后产生的“按下”动作
t_kb[i].kb_s = _KBS_DOWN; t_kb[i].kb_chg = 1; } } else
17
{
//键弹起状态,复位状态
t_kb[i].kb_s = _KBS_FREE; } t_kb[i].io_n = _KB_DITHERT; } } }
/*****************************************************
****************************************************
** 函数名称 : kb_getstatus ** 输 入 : 无
** 输 出 : 当前按键状态
** 功能描述 : 获得按键状态,按键状态按键码放置
******************************************************
****************************************************/
uint8 kb_getstatus(void) {
uint8 i,r; r = 0;
for (i = 0; i < 4; i ++) { r |= ((t_kb[i].kb_chg == 1) << i); //将 按下的按
键状态 输出
t_kb[i].kb_chg = 0; }
return r; }
//--------------------------------------------------------------------------------------------------------//
/*****************************************************
****************************************************
** 函数名称 : tmr_updata ** 输 入 : 无 ** 输 出 : 无
** 功能描述 : led数据准备(数据固定为 4 个字符) ******************************************************
****************************************************/
void tmr_updata(void) {
tmr_ms += _TMR_TICKTIME;
18
tmr_ms2 += _TMR_TICKTIME; if (tmr_ms2 >= 1000) { //累计计时超过
1秒,进行秒计时器的操作
tmr_sec += _TMR_CHG; //秒计数器更新 if (tmr_sec >= 6000) tmr_sec = 0; //计时超过 100 分
钟的限制后,强制为 0。倒计时时表现为 计时到0后停止变化。
tmr_ms2 -= 1000; //毫秒计时器数
字更新
} }
/*****************************************************
****************************************************
** 函数名称 : tmr_isr ** 输 入 : 无 ** 输 出 : 无
** 功能描述 : 定时器中断服务程序执行内容:定时器为
5ms 循环 定时
** : 把本程序放到 5ms 的定时器中断服务程序中,
按要求给定键盘输入参数。
******************************************************
****************************************************/
void tmr_isr(void) {
//计时更新 tmr_updata();
//按键状态更新:按要求给定键盘输入参数。。。 kb_updata(P2_1==0, P2_2==0, P2_3==0,P2_4==0); }
//--------------------------------------------------------------------------------------------------------//
/*****************************************************
****************************************************
** 函数名称 : scr_normal
** 输 入 : 按键状态,是否初始化页面[1 - 初始化] ** 输 出 : 无
** 功能描述 : 正常显示模式的页面程序
******************************************************
****************************************************/
void scr_normal(uint8 ikb, uint8 bfresh) {
19
static uint16 scr_auto_tmr = 0; //自动循环显示的计时
器,用于页面的定时切换
static uint8 iscr = 0; //时间 和 “1234”显示选
择(0 - 显示时间(不换屏);1 - 显示时间(换屏);2 - 显示“1234”(换屏))
uint8 i,k; uint8 tmp[4];
if (bfresh) { //屏幕切换进来时初始
化内容
scr_auto_tmr = tmr_ms; //自动页面切换计时器
更新
iscr = 0; //进入页面时默认显示 时
间
}
// if(flag_1!=0)if(iscr==0)iscr=1; if ((((alm1 || alm2)&&(flag_10))||((alm1 ||
alm2)&&(flag_7==1))) && (iscr == 0)) iscr = 1;
if (!(((alm1 || alm2)&&(flag_10))||((alm1 ||
alm2)&&(flag_7==1))))iscr = 0;
if (iscr == 2) {
// num=1; //显示“1234” P2_0=1;
tmp[0] = tmp[1] = tmp[2] = tmp[3] = 0x0A; switch(flag_10) { case 1:tmp[0] = 1;break; case 2:tmp[0] = 2;break; } if(flag_7==1) { if (alm1) tmp[0] = 1; if (alm2) { if (alm1) tmp[1] = 2; else tmp[0] = 2; } }
20