📄 mainproc.c
字号:
#include "Config.H"
bool ret_Flag; //延时返回标志1-- 延时返回
bool HaveKey_Flag; //延时返回标志1-- 开,0--关
bool LightOnOff; //背光开或关标志1--关,0--开
#if MAINMENUITEMNUM>4
bool First_Showmenu;
#endif
bool BeepOnOff;
bool KeyBool;
idata uint8 volatile Light_DelayTime;//背光由亮到灭的时间以秒为单位,当设为0时为背光不灭
idata uint16 volatile Light_DT;
idata uint16 volatile Count_BG;
idata uint16 volatile Light_Destory;
idata uint8 volatile Cursor_Count;
idata uint16 volatile RetDelay;
idata uint8 volatile KeyCount;
xdata TimerType TimerArray[36];
void _NOP_(void);
void PowerOnInitial(void);
void VariableInitial(void);
void SystemInitial(void);
//***************************************************************
//============ FUNCTION CODE SEGMENT =================
//***************************************************************
//**************************************************
//============= FUNCTION CODE SEGMENT ==============
//**************************************************
//==================================================
//Function: Delay
//Description: Delay Function
// TotalDelayTime=2503uS*shinum+1uS
// SYSTEM Oscillate: Fosc=12MHz
//Parameters: shinum.
//Returns: NO.
//Side Effects: NO.
//==================================================
void Delay(uint8 Interval)
{
do
{
Delay2ms5();
}while(--Interval!=0);
}
//==================================================
//Function: Delay1
//Description: Delay Function
// TotalDelayTime=2503uS*shinum+1uS
// SYSTEM Oscillate: Fosc=12MHz
//Parameters: shinum.
//Returns: NO.
//Side Effects: NO.
//==================================================
void Delay1(uint8 Interval)
{
do
{
DelayS();
}while(--Interval!=0);
}
//==================================================
//Function: Key_Beep
//Description: Key Sound Function
//Parameters: NO.
//Call: Delay()
//Returns: NO.
//Side Effects: NO.
//==================================================
void Beep(uint8 num)
{
uint8 frequency;
Key_Sound=1;
do
{
frequency=30;
do
{
Delay1(3);
Key_Sound=~Key_Sound;
}while(--frequency!=0);
Delay(12);
}while(--num!=0);
}
//==================================================
//Function: Status_Beep
//Description: send Sound Function when the Machine of Working status changing.
//Parameters: NO.
//Call: Delay(),Key_Beep()
//Returns: NO.
//Side Effects: NO.
//==================================================
void Status_Beep(void)
{
Beep(1);
Delay(12);
Beep(1);
Delay(12);
Beep(1);
}
void BeepLing(void)
{
Beep(1);
Delay(4);
Beep(4);
Delay(4);
Beep(3);
Delay(4);
Beep(4);
Delay(4);
Beep(5);
}
//===============================================================
//Function:
//Description:
//Parameters:
//Returns:
//Side Effects:
//===============================================================
void PowerOnInitial(void)
{
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
AUXR = 0x01;//允许XRAM,禁ALE
Beep(1);
TMOD = 0x21;
TR0 = 0;
EA = TRUE;
ET0 = TRUE;
}
void VariableInitial(void)
{
uint8 tempv;
//控制灭背光时间(3S)
Count_BG = 0x0000;
Light_Destory = 0x00;
Light_DelayTime = T0_NOUSE;
ret_Flag = FALSE;
HaveKey_Flag = FALSE;
LightOnOff = FALSE;
BeepOnOff = FALSE;
KeyCount = 0x00;
KeyBool = FALSE;
#if MAINMENUITEMNUM>4
First_Showmenu = FALSE; //为FALSE表示为第一次显示菜单
#endif
//查系统参数是否已设置
tempv=RD_ByteFromDS1302_RAM(DS1302Init_Addr0|0x01);
if(tempv==DS1302Init_Flag0)
{
tempv=RD_ByteFromDS1302_RAM(DS1302Init_Addr1|0x01);
if(tempv==DS1302Init_Flag1)return;
}
//查系统参数未设置则初始化
W_ByteToDS1302_RAM(Light_RAMAddr,T0_NOUSE); //延时0秒
W_ByteToDS1302_RAM(Beep_RAMAddr,BEEP_OPEN); //按键音开
}
void SystemInitial(void)
{
//读取延时关背光时间值
//Light_DelayTime
//LightOnOff=TRUE 开背光控制,FALSE--关背光控制
uint8 tempvar1,tempvar;
Light_DelayTime=RD_ByteFromDS1302_RAM(Light_RAMAddr|0x01);
if(Light_DelayTime==T0_NOUSE)
{
LightOnOff=FALSE;
Light_DT=0x00;
}
else
{
LightOnOff = TRUE;
Light_DT = (uint16)((Light_DelayTime*100));
Light_DT = Light_DT/TIME_VMS;
}
//读取按键音开或关值
//BeepOnOff=TRUE 开,FALSE--关
if(RD_ByteFromDS1302_RAM(Beep_RAMAddr|0x01)==0x00)
BeepOnOff=FALSE;
else
BeepOnOff=TRUE;
//闹铃初始化
tempvar=EepromRead(TimerFlag);
tempvar1=EepromRead(TimerFlag+1);
if(tempvar!=0x55 || tempvar1!=0xAA)
{
EepromWrite(TimerFlag,0x55);
Delay(1);
EepromWrite(TimerFlag+1,0xAA);
Delay(1);
//清X5045
for(tempvar1=0x12;tempvar1<160;tempvar1++)
{
EepromWrite(tempvar1,0x00);
Delay(1);
}
}
else
{//读已设置的铃点数值
tempvar=EepromRead(Timers);
for(tempvar1=0;tempvar1<tempvar;tempvar1++)
{
TimerArray[tempvar1].BitEnable=EepromRead(TimerValue+tempvar1*3);
TimerArray[tempvar1].Hour=EepromRead(TimerValue+tempvar1*3+1);
TimerArray[tempvar1].Minute=EepromRead(TimerValue+tempvar1*3+2);
}
}
Initial_DS1302();
InitLcd();
Set_Timer0_60ms();
}
//==========================================
//定时器0中断
#pragma disable
void Timer0ISR(void) interrupt 1
{
Set_Timer0_60ms();
if(LightOnOff==TRUE)
{
Count_BG++;
if (Count_BG>=Light_DT)
{
Light_Off();
}
}
if (HaveKey_Flag)
{
Light_Destory++;
if (Light_Destory>=RetDelay)
{
Light_Destory=0;
ret_Flag=TRUE;
}
}
KeyCount++;
if(KeyCount>25)
{
KeyCount=0;
KeyBool=TRUE;
}
Cursor_Count++;
}
void main()
{
idata uint8 Sys_D_T0[7];
idata uint8 KeyValue,MainMenuIndex=0;
bit SucFlag=0;
PowerOnInitial();
VariableInitial();
SystemInitial();
ClearRAM(0,7);
LOGO();
Beep(2);
ClearRAM(0,8);
#ifdef MYDEBUG
KeyValue=0x77;
Msingle_font_pattern (English_Offset[(KeyValue>>4)&0x0F],2,64,0);
Msingle_font_pattern (English_Offset[(KeyValue&0x0F)],2,72,0);
KeyValue=0x00;
EepromWrite(0x20,0x55);
Beep(1);
KeyValue=EepromRead(0x20);
Msingle_font_pattern (English_Offset[(KeyValue>>4)&0x0F],2,8,0);
Msingle_font_pattern (English_Offset[(KeyValue&0x0F)],2,16,0);
EepromWrite(0x21,0x66);
Beep(1);
KeyValue=EepromRead(0x21);
Msingle_font_pattern (English_Offset[(KeyValue>>4)&0x0F],2,32,0);
Msingle_font_pattern (English_Offset[(KeyValue&0x0F)],2,40,0);
KeyValue=KeyScan();
while(KeyValue==NOKEY_PRESS);
#endif
while(1)
{
Get_TimeFromDS1302(Sys_D_T0);
if(SucFlag==0)
{
DispRTC(0,Sys_D_T0);//显示时钟日历
Display_Line(5,32,5,0,ShowTip[0]);
Delay_Ret(T0_60S);
}
else
{
MainMenuShow(MainMenuIndex);
if(ret_Flag)
{
ClearRAM(0,8);
SucFlag=0;
}
}
OpenSystem(Sys_D_T0[2],Sys_D_T0[1]);
KeyValue=KeyScan();
if(KeyValue==NOKEY_PRESS)continue;
Light_On();
NoDelay_Ret();
switch(KeyValue)
{
case ENTER:
if(SucFlag==0)//未校验口令则校验权限口令
{
if(PwdCheck())//校验口令,正确后显示主菜单
{
ClearRAM(0,8);
MainMenuShow(0);
SucFlag=1;
}
else
{
SucFlag=0;
}
}
else//已校验口令则进入保存相应菜单处理事件
{
switch(MainMenuIndex)//菜单命令处理
{
case 0://时钟设置
SystemSet();
break;
case 1://闹钟设置
TimerSetProc();
break;
case 2://背光设置--常开\常关或延时关
WakeSetProc();
break;
case 3://本机蜂鸣声开还关设置
DispInfo();
break;
}
}
break;
case MOVE://菜单移动键
MainMenuIndex++;
if(MainMenuIndex>=MAINMENUITEMNUM)MainMenuIndex=0;
break;
case ESC:
ClearRAM(0,8);
SucFlag=0;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -