📄 xhj.c
字号:
#include <at89x51.h> //包括一个52标准内核的头文件
#include <absacc.h> //使用XBYTE
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
#define COMA XBYTE[0x4000]
#define COMB XBYTE[0x2000]
#define Allstate 14
#define APGT XBYTE[0x8000+0x07F]
#define APGS XBYTE[0x8000+0x07E]
#define AGT XBYTE[0x8000+0x07D]
#define AGS XBYTE[0x8000+0x07C]
#define AYT XBYTE[0x8000+0x07B]
#define AYS XBYTE[0x8000+0x07A]
#define RT XBYTE[0x8000+0x079]
#define BPGT XBYTE[0x8000+0x06F]
#define BPGS XBYTE[0x8000+0x06E]
#define BGT XBYTE[0x8000+0x06D]
#define BGS XBYTE[0x8000+0x06C]
#define BYT XBYTE[0x8000+0x06B]
#define BYS XBYTE[0x8000+0x06A]
#define A10 XBYTE[0x8000+0x020]
#define A11 XBYTE[0x8000+0x021]
#define A12 XBYTE[0x8000+0x022]
#define A13 XBYTE[0x8000+0x023]
#define A14 XBYTE[0x8000+0x024]
#define A15 XBYTE[0x8000+0x025]
#define A16 XBYTE[0x8000+0x026]
#define A17 XBYTE[0x8000+0x027]
#define A18 XBYTE[0x8000+0x028]
#define A19 XBYTE[0x8000+0x029]
#define B10 XBYTE[0x8000+0x030]
#define B11 XBYTE[0x8000+0x031]
#define B12 XBYTE[0x8000+0x032]
#define B13 XBYTE[0x8000+0x033]
#define B14 XBYTE[0x8000+0x034]
#define B15 XBYTE[0x8000+0x035]
#define B16 XBYTE[0x8000+0x036]
#define B17 XBYTE[0x8000+0x037]
#define B18 XBYTE[0x8000+0x038]
#define B19 XBYTE[0x8000+0x039]
#define A20 XBYTE[0x8000+0x040]
#define A21 XBYTE[0x8000+0x041]
#define A22 XBYTE[0x8000+0x042]
#define A23 XBYTE[0x8000+0x043]
#define A24 XBYTE[0x8000+0x044]
#define A25 XBYTE[0x8000+0x045]
#define A26 XBYTE[0x8000+0x046]
#define A27 XBYTE[0x8000+0x047]
#define A28 XBYTE[0x8000+0x048]
#define A29 XBYTE[0x8000+0x049]
#define B20 XBYTE[0x8000+0x050]
#define B21 XBYTE[0x8000+0x051]
#define B22 XBYTE[0x8000+0x052]
#define B23 XBYTE[0x8000+0x053]
#define B24 XBYTE[0x8000+0x054]
#define B25 XBYTE[0x8000+0x055]
#define B26 XBYTE[0x8000+0x056]
#define B27 XBYTE[0x8000+0x057]
#define B28 XBYTE[0x8000+0x058]
#define B29 XBYTE[0x8000+0x059]
uchar state,set_state,set_state_max;
uchar state_man;
uint time,Alltime;
uchar a,b,c,d;
//#define DEBUG
void initsiu(void);
uchar inkey(void);
void set(void) ; //设置
void display();
void display1(void);
void inkey1();
void init(void);
void Delay (unsigned int count);//长延时
void alloff(void);
void checkstate(void);
void control(void);
void checktime(void);
//void check_set_state(void);
void check(void);
void set(void);
void check_set(void);
void settime(void);
uchar count,count1;
uchar zxfa=0;
unsigned char data t_hour;
unsigned char data t_minute;
unsigned char data t_second;
uchar AYS_time,BYS_time;
bit s_flag,set_flag,settime_flag,start_flag,AYS_flag,BYS_flag,second_flag;
//uchar code tab[]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};
//uchar code tab[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
// 11A 12B 13D 14E 15F 16H 17L 18R 19U 20-
uchar code tab[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
uchar code b_tab[]={0x91,0x73,0xE3,0xE3,0x91,0x91,0x03,0x03,0x9F,0x9F,0x25,0x25,0x0D,0x0D,0x99,0x99,0x49,0x49,0x41,0x41,0x1F,0x1F,0x01,0x01,0x09,0x09};
uchar code c_tab[]={0xC5,0x61,0xC7,0x49,0xC7,0x49,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1,0x11,0xC1};
uchar code AOUT[]={0x1E,0x2E,0x2E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1B,0x1B,0x1D};
uchar code BOUT[]={0x1E,0x1E,0x1E,0x1E,0x1B,0x1B,0x1D,0x1E,0x2E,0x2E,0x1E,0x1E,0x1E,0x1E};
uchar code setmax1[]={9,59,5,9,9,2,59,23,59,23,59,23,59,23,59,23,59,23,59,23,59,23,59,23,59,23};
uchar code setmax2[]={9,59,5,9,9,2,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59};
uchar code AOUT1[]={0x1E,0x2E,0x1E,0x1B};
uchar code BOUT1[]={0x1E,0x1B,0x1E,0x2E};
uchar code out[]={0xFE,0xFd,0xFB,0x1F,0x2F};
void set(void)
{ uchar set1[26],set2[26],key,j,i,m,n;
uint timea,timeb;
second_flag=0;
set1[0]=RT;
set1[1]=APGT;
set1[2]=APGS;
set1[3]=AGS;
set1[4]=AYT;
set1[5]=AYS;
set1[6]=A10;
set1[7]=B10;
set1[8]=A11;
set1[9]=B11;
set1[10]=A12;
set1[11]=B12;
set1[12]=A13;
set1[13]=B13;
set1[14]=A14;
set1[15]=B14;
set1[16]=A15;
set1[17]=B15;
set1[18]=A16;
set1[19]=B16;
set1[20]=A17;
set1[21]=B17;
set1[22]=A18;
set1[23]=B18;
set1[24]=A19;
set1[25]=B19;
set2[0]=RT;
set2[1]=BPGT;
set2[2]=BPGS;
set2[3]=BGS;
set2[4]=BYT;
set2[5]=BYS;
set2[6]=A20;
set2[7]=B20;
set2[8]=A21;
set2[9]=B21;
set2[10]=A22;
set2[11]=B22;
set2[12]=A23;
set2[13]=B23;
set2[14]=A24;
set2[15]=B24;
set2[16]=A25;
set2[17]=B25;
set2[18]=A26;
set2[19]=B26;
set2[20]=A27;
set2[21]=B27;
set2[22]=A28;
set2[23]=B28;
set2[24]=A29;
set2[25]=B29;
set_state=0;
j=200;
do{ a=0xFD;b=b_tab[set_state];c=c_tab[set_state];d=0xFD;
display();
display1();
}while(j--);
do
{
//循环开始
key=inkey();
switch (key)
{
case 0x7E:
set_state++;
for(i=6;i<26;i++)
{
if(set1[i]==23&&set2[i]==59)
{set_state_max=i+1;break;}
else
set_state_max=26;
}
if(set_state>=set_state_max)
set_state=0;
j=200;
do{a=0xFD;b=b_tab[set_state];c=c_tab[set_state];d=0xFD;
display();
display1();
}while(j--);
for(m=0;m<9;m++)
{
timea=set1[2*m+7]*60+set2[2*m+7];
for(n=m;n<10;n++)
{
timeb=set1[2*n+7]*60+set2[2*n+7];
if(timea<timeb)
{set1[2*m+9]=set1[2*n+7];
set2[2*m+9]=set2[2*n+7];
break;
}
}
}
break;
case 0x7D: //十位++
set1[set_state]++;
if(set_state>7&&set_state%2==1)
{if(set1[set_state]>setmax1[set_state])
set1[set_state]=set1[set_state-2];
}
else
{if(set1[set_state]>setmax1[set_state])
set1[set_state]=0;
}
break;
case 0x7B: //十位--
if(set_state>7&&set_state%2==1)
{
if(set1[set_state]<=set1[set_state-2])
set1[set_state]=setmax1[set_state];
else
set1[set_state]--;
}
else
{ if(set1[set_state]<=0)
set1[set_state]=setmax1[set_state];
else
set1[set_state]--;
}
break;
case 0x77: //个位++
if(set_state>7&&set_state%2==1) //时间段设计
{
if(set1[set_state]>set1[set_state-2])
{ set2[set_state]++;
if(set2[set_state]>setmax2[set_state])
set2[set_state]=0;
}
else if(set1[set_state]==set1[set_state-2])
{
set2[set_state]++;
if(set2[set_state]>setmax2[set_state])
set2[set_state]=set2[set_state-2];
}
}
else
{
set2[set_state]++;
if(set2[set_state]>setmax2[set_state])
set2[set_state]=0;
}
break;
case 0x6f: //个位--
if(set_state>=7&&set_state%2==1)
{
if(set1[set_state]>set1[set_state-2])
{
if(set2[set_state]<=0)
set2[set_state]=setmax2[set_state];
else
set2[set_state]--;
}
else if(set1[set_state]==set1[set_state-2])
{
if(set2[set_state]<=set2[set_state-2])
set2[set_state]=setmax2[set_state];
else
set2[set_state]--;
}
}
else
{
if(set2[set_state]<=0)
set2[set_state]=setmax2[set_state];
else
set2[set_state]--;
}
break;
case 0x5F:
//回写
RT=set1[0];
APGT=set1[1];
APGS=set1[2];
AGS=set1[3];
AYT=set1[4];
AYS=set1[5];
A10=set1[6];
B10=set1[7];
A11=set1[8];
B11=set1[9];
A12=set1[10];
B12=set1[11];
A13=set1[12];
B13=set1[13];
A14=set1[14];
B14=set1[15];
A15=set1[16];
B15=set1[17];
A16=set1[18];
B16=set1[19];
A17=set1[20];
B17=set1[21];
A18=set1[22];
B18=set1[23];
A19=set1[24];
B19=set1[25];
BPGT=set2[1];
BPGS=set2[2];
BGS=set2[3];
BYT=set2[4];
BYS=set2[5];
A20=set2[6];
B20=set2[7];
A21=set2[8];
B21=set2[9];
A22=set2[10];
B22=set2[11];
A23=set2[12];
B23=set2[13];
A24=set2[14];
B24=set2[15];
A25=set2[16];
B25=set2[17];
A26=set2[18];
B26=set2[19];
A27=set2[20];
B27=set2[21];
A28=set2[22];
B28=set2[23];
A29=set2[24];
B29=set2[25];
second_flag=1;//返回
return;
break;
}
a=tab[set1[set_state]/10];b=tab[set1[set_state]%10];c=tab[set2[set_state]/10];d=tab[set2[set_state]%10];
display();
display1();
}while(1);
}
void inttime0(void) interrupt 1 using 1
{
TH0=0Xd4; //33ms中断一次,30次为一秒,调整时间一次
TL0=0X98;
//复位ds1232
P3_5=0;
_nop_();
P3_5=1;
_nop_();
P3_5=0;
count++;
if (count==15)
{
count=0;
s_flag=~s_flag;
count1++;
AYS_time++;
BYS_time++;
if(AYS==0) AYS_flag=0;
if(BYS==0) BYS_flag=0;
if(AYS_time==AYS)
{
AYS_flag=~AYS_flag;
AYS_time=0;
}
if(BYS_time==BYS)
{BYS_flag=~BYS_flag;
BYS_time=0;
}
if (count1==2)
{
count1=0;
checktime();
time++;
if(time>=Alltime)
{time=0;
}
}
}
if(start_flag==1)
{
switch (zxfa)
{
case 0:
if(AGT==0&&BGT==0)
{
if(AYS_flag)
COMA=0xFD;
else
COMA=0xFF;
if(BYS_flag)
COMB=0xFD;
else
COMB=0xFF;
}
else
{
checkstate();
control();
}
break;
case 1:
control();
break;
case 2:
COMA=AOUT1[state_man];
COMB=BOUT1[state_man];
break;
}
}
}
void checktime(void)
{
if(t_hour<B10|(t_hour==B10&&t_minute<B20))
{
AGT=A10;
BGT=A20;
}
else if(t_hour<B11|(t_hour==B11&&t_minute<B21))
{
AGT=A11;
BGT=A21;
}
else if(t_hour<B12|(t_hour==B12&&t_minute<B22))
{
AGT=A12;
BGT=A22;
}
else if(t_hour<B13|(t_hour==B13&&t_minute<B23))
{
AGT=A13;
BGT=A23;
}
else if(t_hour<B14|(t_hour==B14&&t_minute<B24))
{
AGT=A14;
BGT=A24;
}
else if(t_hour<B15|(t_hour==B15&&t_minute<B25))
{
AGT=A15;
BGT=A25;
}
else if(t_hour<B16|(t_hour==B16&&t_minute<B26))
{
AGT=A16;
BGT=A26;
}
else if(t_hour<B17|(t_hour==B17&&t_minute<B27))
{
AGT=A17;
BGT=A27;
}
else if(t_hour<B18|(t_hour==B18&&t_minute<B28))
{
AGT=A18;
BGT=A28;
}
else if(t_hour<B19|(t_hour==B19&&t_minute<B29))
{
AGT=A19;
BGT=A29;
}
}
void checkstate(void)
{ uint temp;
temp=APGT+APGS+RT+BGT+BGS+BYT+RT;
if(time<RT)
state=0;
else if(time<=APGT)
state=1;
else if(time<=APGT+APGS)
state=2;
else if(time<=APGT+APGS+RT)
state=3;
else if(time<=APGT+APGS+RT+BGT)
state=4;
else if(time<=APGT+APGS+RT+BGT+BGS)
state=5;
else if(time<=APGT+APGS+RT+BGT+BGS+BYT)
state=6;
else if(time<=APGT+APGS+RT+BGT+BGS+BYT+RT)
state=7;
else if(time<=temp+BPGT)
state=8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -