📄 main.c.bak
字号:
// korfi: [3/7/2007]
// korfi [3/17/2007]:Version 2.0, I want it to be the foudation software of this product.
//2007-3-21 9:48
//2007-4-2 20:41 一个好的程序结构是很重要的
//各司其职,合理重用
#include "iic.h"
#define REALTIME_H 0x0c//0.05s T2,自动重装
#define REALTIME_L 0x00
void main()
{
//unsigned int xdata lt;//,lt2;
//unsigned char xdata k;
EA=0;
////////////默认输出/////////////
{
OUT0=0x24^0xff;
OUT1=0x55^0xff;
OUT2=0x24^0xff;
OUT3=0x24^0xff;
OUT4=0x55^0xff;
OUT5=0x24^0xff;
OUT6=0xff^0xff;
}
/////////////CPU配置/////////////
{
//INT0
//IT0=0;//边沿触发
//EX0=0;//外中断0
//UART
TMOD=0x20;//+0x01;
TR1=1;//TF1=0;
TH1=0xfa;TL1=0xfa;////N=256-fosc/(32*12*fBd),fBd=4800,N=256-6
PCON=0x00;
SCON=0x50;//
RI=0;TI=0;
PS=1;//提高优先级
REN=1;//允许接收
TxEN=0;//
ES=0;//暂时先不开通
//PS2
PS2_Init();
//T2:T=(65536-x)*12/fosc,x=65536-T*fosc/12
T2MOD=0x00; //50ms max=71.1ms
RCAP2H=0x4c;//0x4c 0x00
RCAP2L=0x00;//0x00 0x00
TR2=1;
ET2=1;
//
EA=1;
}
/////////////启动装载////////////
{
//设置载入
MacAddr=EPR_Read(ADDR_MAC);
LcdPowerOn();
LcdInit();
//
k=EPR_Read(ADDR_FIRST_USED);
if(k==0xff||__KF_DEBUG__)//korfi:使用这里来确定调试是否
{//第一次使用
while(!__KF_DEBUG__)
{
WDT=1;
LcdCnString(1,1,"初次使用");
LcdCnString(2,1,"输入密码");
GetPassWord(3,2);
if(AppBuf[0]==12)&&(AppBuf[1]==34))
{
PswCnt=SYS_AUTO_LOCK_TIME;
break;
}
}
if(!__KF_DEBUG__)
EPR_Write(ADDR_FIRST_USED,0xaa);
//初始化所有信息
LcdCnString(1,3,"初始化");
RTC_FirstInit();//RTC
//EEPROM
EPR_Reset();
}
else
{
RTC_GeneralInit();
}
}
/////////////启动延时////////////
{
LcdCnString(1,2,"启动延时");
KeyVal=5;//借用一下变量
while(KeyVal)
{
if(SecondFlag)
{
KeyVal-=1;
SecondFlag=0;
}
}
}
/////////////监视模块/////////////
DeskTopFlag=1;
LcdInit();
ShowDesk();//显示桌面
HourUpdate();
while(1)
{
/////按键
KeyVal=GetKey();
if ((KeyVal!=KEY_NOKEY))
{//按键监视
AutoLockCnt=SYS_LCD_OFF_TIME;
if(!LcdPowerFlag)//掉电则先上电
LcdPowerOn();
switch(KeyVal)
{
case KEY_ENTER:
if((!DeskTopFlag)&&(!PswLock))
OnEnter();
break;
case KEY_UP:
case KEY_LEFT:
if((!DeskTopFlag)&&(!PswLock))
OnArrowUp();
break;
case KEY_DOWN:
case KEY_RIGHT:
if((!DeskTopFlag)&&(!PswLock))
OnArrowDown();
break;
case KEY_BKSPACE:
case KEY_CANCEL:
if((!DeskTopFlag)&&(!PswLock))
OnCancel();
break;
case KEY_MENU:
OnMenuKey();
default:
;
}
}
if (NewPackage)
{//接收到通讯新包
CmdProcess();
NewPackage=0;
}
if(SecondFlag)
{//每秒响应一次
{//自动键盘锁定监视
if(AutoLockCnt>0)
AutoLockCnt-=1;
if((!PswLock)&&(AutoLockCnt<(SYS_LCD_OFF_TIME-SYS_AUTO_LOCK_TIME)))
{//自动锁定
PswLock=1;
DeskTopFlag=1;
}
if((LcdPowerFlag)&&(AutoLockCnt==0))
{//Lcd断电
LcdPowerOff();
LcdPowerFlag=0;//掉电
}
}
if(DeskTopFlag && LcdPowerFlag)
ShowDesk();
SecondCheck();//状态切换
if(SwitchFlag)
{//是否需要更新EEPROM
if(EPRChangeFlag)
{
EPR_CopyPage();//只能在主循环中出现拷贝现象
HourUpdate();//重新搜索相组关系
PhaseSwitch();//重新装入相位属性
EPRChangeFlag=0;
}
SwitchFlag=0;
}
SecondFlag=0;
}
}
}
/////////////////中断服务///////////
//UART_ISR()在UART.c中
//PS2_RecChar()在PS2.c中
void Timer2() interrupt INT_SOURCE_T2
{
//自动重装计时:50ms
if(RealTimeCnt>1)
RealTimeCnt--;
else
{
RealTimeCnt=20;
SecondFlag=1;
}
if(DelayCnt)//延时用的变量
DelayCnt--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -