📄 2402test.txt
字号:
{
BEEPing();
}
else
{
beep_y();
}
}
if(AT24C02_Read1Byte(0x04+(rom*10))==0&&alarm_bit==2||alarm_bit==3)
{
//**这里将写入一个或是调用无线遥控键值处理程序**
}
}
/********************************************************************************************
定时值校对&处理函数
search_time()
********************整个流程必须在1秒里完成,不然将有部分定时值不响应***********************/
void search_time(void)
{
uint8 timeS,s,i;
static unsigned char data alarmS[25];
alarm_con=0;
s=read_clock(0x81); //读取秒数据
for(i=0;i<25;i++)
{
alarmS[i]=AT24C02_Read1Byte(0x0B+i*10); //一次性将全部项目中的秒数据送入数组中
}
for(i=0;i<25;i++)
{
if(alarmS[i]!=0xff) //不为0xff则表示这项已经设置
{
alarm_con++; //定时项目个数寄存位
if(s==alarmS[i])
{
timeS=AT24C02_Read1Byte(0x0a+(i*10));
if(timeS==read_clock(0x83)||timeS==0xff) //校验 分钟
{
timeS=AT24C02_Read1Byte(0x09+(i*10));
if(timeS==read_clock(0x85)||timeS==0xff) //校验 小时
{
timeS=AT24C02_Read1Byte(0x08+(i*10));
if(timeS==read_clock(0x8b)||timeS==0xff) //校验 星期
{
timeS=AT24C02_Read1Byte(0x07+(i*10));
if(timeS==read_clock(0x87)||timeS==0xff) //校验 日
{
timeS=AT24C02_Read1Byte(0x06+(i*10));
if(timeS==read_clock(0x89)||timeS==0xff) //校验 月
{
timeS=AT24C02_Read1Byte(0x05+(i*10));
if(timeS==read_clock(0x8d)||timeS==0xff) //校验 年
{
rom=i; //走到响应的位置
ALARMing(); //** 闹钟和无线遥控的键值处理 **
//**这里将调用一个到时的响应程序alarming();
}
}
}
}
}
}
}
}
}
}
//*******************系统主程序 菜单切换*****************************************************
void main (void)
{
beep_a();
keyboard_int ();
LCM2402_Init(); //LCM2402初始化
Init_1302(); //检测时钟芯片是否未被初始化
CgramWrite();
print(0x80,"LCD2402 eClock Ver0.01");
print(0xc2,"MSN: 5isun@live.cn");
DelayS(5000);
LCM2402_Init(); //LCM2402初始化
beep_y();
while(1) //主线程
{
//--------------------------------------------0 主显示
if(menu==0)
{
LCM2402_Init();
RealTime_Display(); //在第一行显示时间部分
print(0xc7,"!AL");
print2(0xca,AT24C02_Read1Byte(0x03)+0x30);
print(0xcc,"Used:");
print2(0xd0,alarm_con/16+0x30);
print2(0xd1,alarm_con%16+0x30);
print(0xd2,"/25");
printTemperature(); //显示温度
search_time(); //定时值校对&处理函数
if (DT!=0xff)
{
if(DT>=0x00&&DT<0x0a)
{
uint16 i;
uint8 n=0,x=0xff,y=0xff;
LCM2402_Init(); //LCM2402初始化
for(i=0;i<500;i++)
{
print(0x83,"{ Controller NO. }");
print(0xc3,"{------ ");
print(0xcd," ------}");
if(DT>=0x00&&DT<0x0a)
{
switch(n)
{
case 0: x=DT;
n++;
i=0;
break;
case 1: y=DT;
n--;
i=0;
break;
}
print2(0xcb,x%16+0x30);
print2(0xcc,y%16+0x30);
beep_k();
DelayS250();
DT=0xff;
}
if(DT==0x4C)
{
print(0xca,"{OK}");
//ALARMing(i); //闹钟和无线遥控的键值处理
DelayS250();
beep_y();
DT = 0xff;
}
}
}
if(DT>0x12&&DT<0x17) //当按定时加减查看的几个键时会进入定时查看菜单
{
beep_y();
menu = 2;
}
switch (DT)
{
uint8 alarm_bit;
case 0x1c: beep_y();
menu = 1;
break;
case 0x2F: beep_y();
menu =99;
break;
case 0x19:
{
alarm_bit++;
if(alarm_bit>3)
{
alarm_bit=0;
};
AT24C02_Write1Byte(0x03,alarm_bit);
DelayS(500);
beep_y();
break;
} //定时动作选择:0 全关 1 只开闹钟 2 只开控制动作 3 全开
default:DT=0xff;
break;
}
LCM2402_Init(); //LCM2402初始化
DT=0xff;
}
}
//--------------------------------------------1 是否调时?
if(menu==1)
{
LCM2402_Init();
print(0x80,"Set The Real Time ?");
print(0xc5,"PP: OK AV: Esc");
if (DT!=0xff)
{
switch (DT)
{
case 0x1D: beep_n();
menu=0;
break;
case 0x1B: beep_y();
menu=11;
break;
default:DT=0xff;
break;
}
LCM2402_Init(); //LCM2402初始化
DT=0xff;
}
}
//--------------------------------------------2 定时查看
if(menu==2)
{
LCM2402_Init();
alarm_Display(); //在第一行显示定时部分
print(0xc3,"] NO.");
print2(0xc8,0x30+rom/10);
print2(0xc9,0x30+rom%10);
print(0xce,"STORE: Set");
if (DT!=0xff)
{
switch (DT)
{
case 0x18: beep_y();
menu=12;
break;
case 0x13: beep_k();
rom++;
break;
case 0x14: beep_k();
rom--;
break;
case 0x15: beep_k();
rom=rom+5;
break;
case 0x16: beep_k();
rom=rom-5;
break;
case 0x1D: beep_n();
menu=0;
break;
default:DT = 0xff;
break;
}
if(rom>24&&rom<100)
{
rom=0;
}
if(rom>200)
{
rom=24;
}
LCM2402_Init(); //LCM2402初始化
DT=0xff;
}
}
//--------------------------------------------99 帮助菜单
if(menu == 99)
{
uint8 i;
if (DT != 0xff)
{
if(DT == 0x2F)
{
i++;
if(i >9)
{
i=0;
}
DelayS(500);
beep_k();
}
if(DT == 0x1D)
{
i = 0;
beep_n();
menu = 0;
}
LCM2402_Init(); //LCM2402初始化
DT = 0xff;
}
switch (i)
{
case 0: print(0x80,"AV: Exit Help");
print(0xc0,"MUTE: Next Help Page");
break;
case 1: print(0x80,"SLEEP: Set The Real Time");
print(0xc0,"00~99: Controller NO.");
break;
case 2: print(0x80,"POWER: Key ON/OFF");
print(0xc0,"RECALL: Alarm ON/OFF");
break;
case 3: print(0x80,"VOL+/-: Up/Down");
print(0xc0,"PR.+/-: Alarm +/-1");
break;
case 4: print(0x80,"F.T.+/-: Alarm +/-5");
print(0xc0,"STORE: Set Alarm");
break;
case 5: print(0x80,"-/--: Jumping");
print(0xc0,"SEARCH: Set to ??");
break;
case 6: print(0x80,"!AL0: Beep & Alarm Off");
print(0xc0,"!AL1: Only Beep On");
break;
case 7: print(0x80,"!AL2: Only Alarm On");
print(0xc0,"!AL3: Beep & Alarm On");
break;
case 8: print(0x80,"PP: OK!");
print(0xc0,"AV: Exit/Clean!");
break;
case 9: print(0x81,"MSN: 5isun@live.cn | Sun-2402C");
print(0xc5,"V0.1 2008-4-8 ");
break;
default:break;
}
}
//--------------------------------------------11 调时输入
if(menu == 11)
{
static unsigned char i=0;
bit k; //定义静态
RealTime_Display(); //在第一行显示时间部分
for(i=1;i<8;)
{ //8个时钟数据的循环加位
switch (i)
{ //显示设置项的说明
LCM2402_Init();
case 7:print(0xc0,"AV:Exit(Second 00-59)^^");
break;
case 6:print(0xc4,"(Minute 00-59)^^");
break;
case 5:print(0xc3,"(Hour 00-23)^^");
break;
case 4:print(0xcc,"^(Week 1-7)");
break;
case 3:print(0xc8,"^^(Date 01-31)");
break;
case 2:print(0xc5,"^^(Month 01-12)");
break;
case 1:print(0xc2,"^^(Year 00-99) AV:Exit");
break;
}
print(0x97,"?");
if(DT>=0x00&&DT<0x0a)
{ //DT办数据键码时动作
if(i==4)
{ //如果是星期设置则不必输入“十位”数据
k=1;
}
Set_time(i,k); //在这里调用写时间的程序项
if(k==0)
{ //第一次按键输入到“十位”
k=1;
}
else
{ //否则是第二次按键,输入到“个位”
k=0;
i++;
}
LRDD(); //清屏+刷新显示+延时+清空DT 一体函数
beep_k();
}
if(DT==0x11||DT==0x17)
{
i++;
LRDD();
beep_y();
}
if(DT==0x1A)
{
i--;
if(i<1)
{
i =7;
};
LRDD();
beep_y();
}
if (DT==0x1D)
{ //按 AV 键退回到主界面
LRDD();
beep_n();
menu=0;
i=9; //用于退出上一级的for循环
}
}
}
//--------------------------------------------12 定时值输入
if(menu==12)
{
static unsigned char i=0;
bit k; //定义静态
alarm_Display(); //在第一行显示时间部分
for(i=1;i<9;)
{ //8个时钟数据的循环加位
switch(i) //显示设置项的说明
{
case 8:print(0xc3,"< (Controller 00-99)");
break;
case 7:print(0xc7,"(Second 00-59)^^");
break;
case 6:print(0xc4,"(Minute 00-59)^^");
break;
case 5:print(0xc3,"(Hour 00-23)^^");
break;
case 4:print(0xcc,"^(Week 1-7)");
break;
case 3:print(0xc8,"^^(Date 01-31)");
break;
case 2:print(0xc5,"^^(Month 01-12)");
break;
case 1:print(0xc2,"^^(Year 00-99) AV:Exit");
break;
}
print(0x97,"!");
if(DT>=0x00&&DT<0x0a||DT== 0x12)
{ //DT办数据键码时动作
if(i==4||DT==0x12)
{ //如果是星期设置则不必输入“十位”数据
k=1;
}
Set_alarm(rom,i,k); //在这里调用写时间的程序项
if(k==0)
{ //第一次按键输入到“十位”
k=1;
}
else
{ //否则是第二次按键,输入到“个位”
k = 0;
i++;
}
LADD(); //清屏+刷新显示+延时+清空DT 一体函数
beep_k();
}
switch (DT)
{ //显示设置项的说明
case 0x11://i++;LADD();break; // -/-- VOL+ SEARCH 则跳到下一项
case 0x12://i++;LADD();break; // -/-- VOL+ SEARCH 则跳到下一项
case 0x17:beep_y();
i++;
LADD();
break; // -/-- VOL+ SEARCH 则跳到下一项
case 0x1A:beep_y();
i--;
if(i<1)
{
i =8;
};
LADD();
break; //VOL- 跳回上一项 //循环设备
case 0x1D:beep_n();
LADD();
menu = 0;
i = 19;
break; //按 AV 键退回到主界面//i = 9;用于退出上一级的for循环
}
}
}
LED1=1; //关LED1
}
}
/*******************************************************************************************
日志
2008-04-08 仿制 Doyoung.net
*******************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -