📄 sky_main.c
字号:
SingleData(col_x,page_num[i]);
else
SingleData(col_x,~(page_num[i]));
}
SetRAMAddr(page_y+1,col_x);
for (i=16;i<32;i++) {
if(flag==0)
SingleData(col_x,page_num[i]);
else
SingleData(col_x,~(page_num[i]));
}
}
void Display_Line(unsigned char num, unsigned char page_y_in, unsigned char len,bit flag)
{
data UINT8 i;
for(i=0;i<len;i++)
{
switch(num)
{
case 1:
HzDisplay(menu1[i], page_y_in, i*16,flag);
break;
case 2:
HzDisplay(menu2[i], page_y_in, i*16,flag);
break;
case 3:
HzDisplay(menu3[i], page_y_in, i*16,flag);
break;
case 4:
HzDisplay(menu4[i], page_y_in, i*16,flag);
break;
case 5:
HzDisplay(menu5[i], page_y_in, i*16,flag);
break;
case 6:
HzDisplay(menu6[i], page_y_in, i*16,flag);
break;
case 7:
HzDisplay(menu7[i], page_y_in, i*16,flag);
break;
case 8:
HzDisplay(menu8[i], page_y_in, i*16,flag);
break;
case 9:
HzDisplay(menu9[i], page_y_in, i*16,flag);
break;
case 10:
HzDisplay(menu10[i], page_y_in, i*16,flag);
break;
case 11:
HzDisplay(menu11[i], page_y_in, i*16,flag);
break;
}
}
}
void Display_Save(UINT8 row,UINT8 col)
{
Msingle_font_pattern(Save[0],row,col,0);
Msingle_font_pattern(Save[1],row,col+8,0);
Msingle_font_pattern(Save[2],row,col+16,0);
Msingle_font_pattern(Save[3],row,col+24,0);
Delay1(50000);
Msingle_font_pattern(space,row,col,0);
Msingle_font_pattern(space,row,col+8,0);
Msingle_font_pattern(space,row,col+16,0);
Msingle_font_pattern(space,row,col+24,0);
}
void Num_Display(UINT8 num, unsigned char page_y_in, unsigned char col_x_in,bit flag)
{
data UINT8 temp;
temp=num/10;
Msingle_font_pattern(Time_offset[temp],page_y_in,col_x_in,flag);
temp=num%10;
Msingle_font_pattern(Time_offset[temp],page_y_in,col_x_in+8,flag);
}
void Msingle_font_pattern(unsigned char *page_num, unsigned char page_y_in, unsigned char col_x_in,bit flag)
{
data unsigned char i;
data unsigned char page_y;
data unsigned char col_x;
page_y = page_y_in;
col_x = col_x_in;
SetRAMAddr(page_y,col_x);
for (i=0;i<8;i++) {
if(flag==0)
SingleData(col_x,page_num[i]);
else
SingleData(col_x,~(page_num[i]));
}
SetRAMAddr(page_y+1,col_x);
for (i=8;i<16;i++) {
if(flag==0)
SingleData(col_x,page_num[i]);
else
SingleData(col_x,~(page_num[i]));
}
}
void Time_display(UINT8 row,UINT8 h,UINT8 m,UINT8 s,UINT8 n)
{
HzDisplay(HZ[3],row,32,0);
HzDisplay(HZ[4],row,64,0);
HzDisplay(HZ[5],row,96,0);
Num_Display(h,row,16,0);
Num_Display(m,row,48,0);
Num_Display(s,row,80,0);
switch(n)
{
case 0:
Num_Display(h,row,16,1);
break;
case 1:
Num_Display(m,row,48,1);
break;
case 2:
Num_Display(s,row,80,1);
break;
}
}
void Date_display(UINT8 w,UINT8 y,UINT8 m,UINT8 d,UINT8 n)
{
HzDisplay(HZ[6],0,0,0);
HzDisplay(HZ[7],0,16,0);
HzDisplay(HZ[0],3,32,0);
HzDisplay(HZ[1],3,64,0);
HzDisplay(HZ[2],3,96,0);
HzDisplay(WEEK1[w],0,32,0);
Num_Display(20,3,0,0);
Num_Display(y,3,16,0);
Num_Display(m,3,48,0);
Num_Display(d,3,80,0);
switch(n)
{
case 0:
Num_Display(y,3,16,1);
break;
case 1:
Num_Display(m,3,48,1);
break;
case 2:
Num_Display(d,3,80,1);
break;
}
}
/********************************************************************************************************/
/* System Register of CPU Initialize */
/********************************************************************************************************/
void CPUInitial(void)//CPU初始化
{
IE = 0x80;
IP = 0x01;
P0 = 0xff;
P1 = 0xFF;
P2 = 0xff;
P3 = 0xff;
WDT=0x87;
}
void ClearWatchDog(void)
{
WDT=0xc7;
Delay1(200);
WDT=0x87;
}
void Timer0_Init(void)//时钟0初始化
{
TMOD=0x01;
TCON = 0x00;
TL0 = 0xe5;
TH0 = 0x3c;
TR0 = 1 ;
}
void Delay1(UINT16 time)
{
UINT16 i;
for(i=0;i<time;i++);
}
void OnOffContral(void)
{
data UINT8 temp,i,sh,sm,ss,eh,em,es,w;
bit ocflag;
data int begin,end,mid;
data UINT16 addr;
for(i=0;i<15;i++)
{
temp=EEPROMByteRead0(0x01+i);
Delay1(100);
if(temp==0)
w=1;
else
w=Week;
temp=EEPROMByteRead0(16+Week*15+i);
Delay1(100);
if(temp==0)
{
Contral8255(i,0);
LedContral(i,0);
Luopencloseflag[i]=0;
continue;
}
ocflag=0;
begin=0;
end=60;
mid=(begin+end)/2;
ClearWatchDog();
while(1)
{
addr=(15*60*w+60*i+mid)*6+0x80;
sh=EEPROMByteRead0(addr);
Delay1(100);
sm=EEPROMByteRead0(addr+1);
Delay1(100);
ss=EEPROMByteRead0(addr+2);
Delay1(100);
eh=EEPROMByteRead0(addr+3);
Delay1(100);
em=EEPROMByteRead0(addr+4);
Delay1(100);
es=EEPROMByteRead0(addr+5);
Delay1(100);
if((Hour>sh||(Hour==sh && Minute>sm)||(Hour==sh && Minute==sm && Second>ss))&&( Hour<eh ||(Hour==eh && Minute<em) ||(Hour==eh && Minute==em && Second<es)))
{
ocflag=1;
break;
}
else if(Hour<sh ||(Hour==sh && Minute<sm)||(Hour==sh && Minute==sm && Second<ss))
{
end=mid-1;
mid=(begin+end)/2;
}
else if(Hour>eh || (Hour==eh && Minute>em)||(Hour==eh && Minute==em && Second>es))
{
begin=mid+1;
mid=(begin+end)/2;
}
if(begin>end)
break;
}
if(ocflag==1)
{
if(Luopencloseflag[i]==0)
{
BeepFlag=1;
count1=0;
}
Contral8255(i,1);
LedContral(i,1);
Luopencloseflag[i]=1;
}
else
{
Contral8255(i,0);
LedContral(i,1);
Luopencloseflag[i]=0;
}
}
}
void timer0(void) interrupt 1//时钟0中断取理
{
static data UINT8 count=0;
//data UINT8 i;
count++;
count2++;
if(count2>=24000)
{
CloseFlag=0;
count2=0;
}
if(count>=40)
{
count=0;
SecondFlag=1;
Second_moudel();
count1++;
if(count1>=25 && BeepFlag==1)
{
SPEAKER=SPEAKERON;
BeepFlag=0;
}
else if(count1==31)
{
count1=0;
SPEAKER=SPEAKEROFF;
}
}
TH0 = 0x3c;
TL0 = 0xe5;
TR0 = 1;
}
UINT8 KeyScan(void)//键盘扫描
{
data UINT8 key_val;
data UINT8 current_key,k;
static data UINT8 flag=0;
key_val =P3;
key_val &=0x3b;
if(key_val==0x3b)
{
if(CloseFlag==0)
{
//SingleCmd(DISPLAY_OFF);
LCD_LED=LEDOFF;
}
return(0x00);
}
Delay1(500);
key_val =P3;
key_val &=0x3b;
k=0;
if(key_val==0x3b)
{
return(0x00);
}
while(1)
{
Delay1(400);
current_key=P3;
current_key &=0x3b;
k++;
ClearWatchDog();
if(current_key==0x3b)
{
flag=0;
break;
}
if(flag==0 && (k>250 && (current_key==0x33 || current_key==0x2b || current_key==0x1b)))
{
flag=1;
break;
}
if(flag==1 && (k>50 && (current_key==0x33 || current_key==0x2b || current_key==0x1b)))
break;
}
current_key =0x00;
if(key_val == 0x3a) current_key = ESC; //返回
else if(key_val == 0x39) current_key = ENTER; //开关
else if(key_val == 0x33) current_key = DOWN;//移动
else if(key_val == 0x2b) current_key = MOVE; //确认菜单
else if(key_val == 0x1b) current_key = UP;//修改
count2=0;
if(current_key!=0 && Voice==1)
{
Beep1(1);
}
if(current_key!=0 && CloseFlag==0)
{
//SingleCmd(DISPLAY_ON);
LCD_LED=LEDON;
CloseFlag=1;
changflag=1;
return(0x00);
}
return(current_key);
}
void Second_moudel(void)//秒表
{
Second=Second+1;
if(Second==60)
{
Second=0;
Minute++;
MinuteFlag=1;
if(Minute==60)
{
Minute=0;
HourFlag=1;
Hour++;
if(Hour==24)
{
Hour=0;
Date++;
Week++;
DateFlag=1;
if(Week==7)
Week=0;
if(Month==4 || Month== 6 || Month==9 || Month==11)
{
if(Date>30)
{
Date=1;
Month++;
MonthFlag=1;
}
}
else if(Month==2)
{
if(Year%4==0)
{
if(Date>29)
{
Date=1;
Month++;
MonthFlag=1;
}
}
else
{
if(Date>28)
{
Date=1;
Month++;
MonthFlag=1;
}
}
}
else
{
if(Date>31)
{
Date=1;
Month++;
MonthFlag=1;
}
}
if(Month>12)
{
Month=1;
Year++;
YearFlag=1;
if(Year>99)
Year=0;
}
}
}
}
}
void MenuDisplay(UINT8 class,UINT8 back)//菜单显示
{
data UINT8 i,temp;
if(class==2)
temp=2;
else
temp=3;
for(i=1;i<=temp;i++)
{
if(back==i)
{
Display_Line(class*3+i,(i-1)*2,6,1);
}
else
{
Display_Line(class*3+i,(i-1)*2,6,0);
}
}
}
void MainMenu(void)//主菜单选择
{
data UINT8 temp;
bit flag=1;
clearRAM(0,8);
while(1)
{
temp=KeyScan();
if(count2>2400)
{
Function=1;
clearRAM(0,8);
return;
}
ClearWatchDog();
switch(temp)
{
case ENTER:
Function=BackNum+1;
clearRAM(0,8);
return;
case MOVE:
BackNum++;
if(BackNum>3)
BackNum=1;
flag=1;
break;
case ESC:
Function=1;
clearRAM(0,8);
return;
default:
break;
}
if(flag==1)
{
flag=0;
MenuDisplay(0,BackNum);
}
}
}
UINT8 Weekjs(y,m,d)//星期计算
{
data UINT8 i,w;
w=6;
for(i=0;i<y;i++)
{
if(i%4==0)
w+=2;
else
w+=1;
}
for(i=1;i<m;i++)
{
if(i==4 || i==6 || i==9 || i==11)
w+=2;
else if(i==2)
{
if(y%4==0)
w+=1;
}
else
w+=3;
}
w+=d;
w-=1;
w%=7;
return(w);
}
void DateTimeSet(void)//日期时间设置
{
data UINT8 temp,num,week1,year1,month1,date1,hour1,minute1,second1;
bit flag;
flag=1;
num=0;
year1=Year;
month1=Month;
date1=Date;
hour1=Hour;
minute1=Minute;
second1=Second;
week1=Week;
while(1)
{
temp=KeyScan();
if(count2>2400)
{
Function=0;
clearRAM(0,8);
return;
}
ClearWatchDog();
switch(temp)
{
case MOVE:
num++;
if(num>5)
num=0;
flag=1;
break;
case UP:
switch(num)
{
case 0:
year1+=1;
year1%=100;
flag=2;
break;
case 1:
month1+=1;
if(month1>12)
month1=1;
flag=2;
break;
case 2:
date1+=1;
flag=2;
break;
case 3:
hour1+=1;
if(hour1>23)
hour1=0;
flag=1;
break;
case 4:
minute1+=1;
if(minute1>59)
minute1=0;
flag=1;
break;
case 5:
second1+=1;
if(second1>59)
second1=0;
flag=1;
break;
}
if(flag==2)
{
if(month1==4 || month1== 6 || month1==9 || month1==11)
{
if(date1>30)
date1=1;
}
else if(month1==2)
{
if(year1 %4==0)
{
if(date1>29)
date1=1;
}
else if(date1>28)
{
date1=1;
}
}
else
{
if(date1>31)
date1=1;
}
week1=Weekjs(year1,month1,date1);
}
flag=1;
break;
case DOWN:
switch(num)
{
case 0:
if(year1==0)
year1=99;
else
{
year1-=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -