📄 mmi.c
字号:
/*--------------------------------------------------------------------*-
MMI.C (V1.00)
-*---------------------------------------------------------------------*/
/*
* Copyright (c) 2006,wsl
* All rights reserved
*
* 文件名称: MMI.C
* 文件标识:
* 摘 要: 人机接口
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2006-09-14 * 修改信息:
*/
//***********************************************************************
#include"main.H"
#include"Port.H"
#include"MMI.h"
#include"SCH51.H"
#include"Uart.h"
/*实时时间*/
time_str now={17,56,50};
alarm_str Ring[MAX_RING_NUMBER];
/*打铃标记D0 ~ D7*/
unsigned char RingIDRegister = 0;
/*备份打铃标记,24小时后在时钟函数中恢复*/
unsigned char BackupRingID = 0;
/*-----------------------------------------------------------------------*-
* 函数名称: FLASH_LED()
* 参 数: XX
* 返 回: XX
* 函数功能: 闪烁灯,作为系统指示
*
* 说 明:
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2006-09-14 * 修改信息:
-*-----------------------------------------------------------------------*/
void FLASH_LED(void)
{
D1 = ~D1;
}
/*-----------------------------------------------------------------------*-
* 函数名称: OpenBuzzer()
* 参 数: XX
* 返 回: XX
* 函数功能: 打开蜂鸣器
*
* 说 明:
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2006-09-14 * 修改信息:
-*-----------------------------------------------------------------------*/
void OpenBuzzer(void)
{
BUZZER = 0;
D2 = 0;
}
/*-----------------------------------------------------------------------*-
* 函数名称: CloseBuzzer()
* 参 数: XX
* 返 回: XX
* 函数功能: 关闭蜂鸣器
*
* 说 明:
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2006-09-14 * 修改信息:
-*-----------------------------------------------------------------------*/
void CloseBuzzer(void)
{
BUZZER = 1;
D2 = 1;
}
/*-----------------------------------------------------------------------*-
* 函数名称: RTC_Soft_clock()
* 参 数: XX
* 返 回: XX
* 函数功能: 走时时钟
*
* 说 明:
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2006-09-14 * 修改信息:
-*-----------------------------------------------------------------------*/
void RTC_Soft_clock(void)
{
now.sec++;
if (now.sec > 59)
{
now.sec = 0; /*一秒钟*/
now.min++;
if (now.min > 59)
{
now.min = 0; /*一分钟*/
now.hour++;
if (now.hour > 23)
{
now.hour = 0; /*一小时*/
RingIDRegister = BackupRingID; /*恢复打铃点*/
}
}
}
}
/*-----------------------------------------------------------------------*-
* 函数名称: SetRing()
* 参 数: 时,分和第几个打铃点
* 返 回: 打铃点位数
* 函数功能: 设置打铃点(最大8个)
*
* 说 明: : 2005.6.2 by wangsw
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2006-09-14 * 修改信息:
-*-----------------------------------------------------------------------*/
#if 0
unsigned char SetRing(const unsigned char hour, const unsigned char min)
{
unsigned char i;
for (i=0; i<MAX_RING_NUMBER; i++)
{
if(!GETBIT(RingIDRegister, i))
{
SETBIT(RingIDRegister, i); /*设置打铃标记*/
SETBIT(BackupRingID, i); /*备份打铃标记*/
Ring[i].hour = hour;
Ring[i].min = min;
return (i+1); /*主要是C语言变量从0开始*/
}
}
// 否则返回错误
}
#endif
unsigned char SetRing(const unsigned char hour, const unsigned char min, const unsigned char AlarmCnt)
{
if (AlarmCnt < MAX_RING_NUMBER)
{
SETBIT(RingIDRegister, AlarmCnt); /*设置打铃标记*/
SETBIT(BackupRingID, AlarmCnt); /*备份打铃标记*/
Ring[AlarmCnt].hour = hour;
Ring[AlarmCnt].min = min;
return (AlarmCnt); /*主要是C语言变量从0开始*/
}
}
/*-----------------------------------------------------------------------*-
* 函数名称: RingStop()
* 参 数: 打铃点
* 返 回: XX
* 函数功能: 删除打铃点(最大<8),但并不删除备份打铃标记
*
* 说 明: : 2005.6.2 by wangsw
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2006-09-14 * 修改信息:
-*-----------------------------------------------------------------------*/
void RingStop(const unsigned char val)
{
if(val < MAX_RING_NUMBER)
{
RESETBIT(RingIDRegister, val);
}
else
{
// ERRprintf("RingStop\n");
}
}
/*-----------------------------------------------------------------------*-
* 函数名称: RingGetID()
* 参 数: XX
* 返 回: return ID
* 函数功能: GetID(获取打铃点个数)
*
* 说 明: : 2005.6.2 by wangsw
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2006-09-14 * 修改信息:
-*-----------------------------------------------------------------------*/
unsigned char RingGetID(void)
{
unsigned char i;
for(i = 0; i < MAX_RING_NUMBER; i++)
{
if(!GETBIT(RingIDRegister, i))
{
return(i);
}
}
return(0);
}
/*-----------------------------------------------------------------------*-
* 函数名称: Ring_server()
* 参 数: XX
* 返 回: XX
* 函数功能: 打铃服务程序
*
* 说 明: : 2005.6.2 by wangsw
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2006-09-14 * 修改信息:
-*-----------------------------------------------------------------------*/
void Ring_server(void)
{
unsigned char i = 0;
unsigned char hour, min;
unsigned char RingIDRegisterMap;
RingIDRegisterMap = RingIDRegister;
while(RingIDRegisterMap)
{
if((RingIDRegisterMap & 0x01) == 1)
{
hour = now.hour/10;
hour = (hour<<4) | (now.hour%10);
min = now.min/10;
min = (min<<4) | (now.min%10);
/*实时时间与设置的打铃点时间相同*/
if( (Ring[i].hour == hour) && (Ring[i].min == min) )
{
OpenBuzzer(); /*响铃*/
SCH_Add_Task(CloseBuzzer, 12000, 0); /*一分钟后关闭*/
/*铃声响过后,在此删除此打铃点,24小时后从新恢复*/
RingStop(i);
}
}
RingIDRegisterMap = RingIDRegisterMap >> 1;
i++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -