?? xhj.c
字號:
else if(time<=temp+BPGT+BPGS)
state=9;
else if(time<=temp+BPGT+BPGS+RT)
state=10;
else if(time<=temp+BPGT+BPGS+RT+AGT)
state=11;
else if(time<=temp+BPGT+BPGS+RT+AGT+AGS)
state=12;
else if(time<=temp+BPGT+BPGS+RT+AGT+AGS+AYT)
state=13;
else
state=0;
}
void control(void)
{ COMA=AOUT[state];
COMB=BOUT[state];
if(state==2)
if(s_flag)
{COMA=AOUT[state];
}
else
{COMA=0xFE;
}
else if(state==5)
if(s_flag)
{COMB=BOUT[state];
}
else
{COMB=BOUT[state]|0x04;
}
else if(state==9)
if(s_flag)
{COMB=BOUT[state];
}
else
{COMB=0xFE;
}
else if(state==12)
if(s_flag)
{COMA=AOUT[state];
}
else
{COMA=AOUT[state]|0x04;
}
}
void main(void) // 主程序
{
uchar i,j;
initsiu();
init();
while(1) //主程序循環
{
Alltime=APGT+APGS+RT+BGT+BGS+BYT+RT+BPGT+BPGS+RT+AGT+AGS+AYT+RT;
if((XBYTE[0x8000+0x0A]&0x80)!=0){
t_hour=XBYTE[0x8000+0x04];
t_minute=XBYTE[0x8000+0x02];
t_second=XBYTE[0x8000+0x00];
}
a=tab[t_hour/10];b=tab[t_hour%10];c=tab[t_minute/10];d=tab[t_minute%10];
display();
display1();
switch (zxfa)
{
case 0:
i=inkey();
if(i!=0x7f)
{
switch (i)
{
case 0x7E: //1鍵
check();
if(set_flag)
set();
else if(settime_flag)
settime();
break;
case 0x7D: //2鍵
// break;
case 0x7B: //3鍵
// break;
case 0x77: //4鍵
//break;
case 0x6F: //5鍵
j=200;
do{
a=tab[AGT/10];b=tab[AGT%10];c=tab[BGT/10];d=tab[BGT%10];
display();
}while(j--);
break;
case 0x5F: //6鍵
j=250;
do{
a=tab[8];b=tab[0];c=tab[3];d=tab[1];
display();
}while(j--);
break;
case 0x3f: //7鍵
break;
}
}
break;
case 1:
i=inkey();
if(i==0x3f)
{
state++;
if(state==14)
state=0;
}
break;
case 2:
i=inkey();
if(i==0x3f)
{state_man++;
if(state_man==4)
state_man=0;
}
break;
}
}
}
void display()
{
///////////顯示///////
P1=a;
P3_0=0;
P3_1=0;
P3_4=0;
P3_5=1;
Delay(2);
P1=0xff;
P1=b;
P3_0=0;
P3_1=0;
P3_4=1;
P3_5=0;
Delay(2);
P1=0xff;
P1=c;
P3_0=0;
P3_1=1;
P3_4=0;
P3_5=0;
Delay(2);
P1=0xff;
P1=d;
P3_0=1;
P3_1=0;
P3_4=0;
P3_5=0;
Delay(2);
alloff();
display1();
}
uchar inkey(void)
{
uchar jjj,keydat;
P1 = 0xFF;
P3_3=0;
keydat = P1;//讀入鍵值
P3_3=1;
keydat = keydat & 0x7f;
if (keydat != 0x7f) //有鍵輸入
{
_nop_();
_nop_();
P3_3=0;
jjj = P1; //再讀,去抖動
P3_3=1;
jjj = jjj & 0x7f;
if (jjj != keydat)
keydat = 0x7f;
do
{
P3_3=0;
jjj = P1;
P3_3=1;
jjj = jjj & 0x7F;
display();
} //等待鍵松手
while (jjj != 0x7F);
}
return (keydat);
}
void Delay (unsigned int count)//長延時
{
unsigned char i;
while (count)
{
i = 100;
while (i > 0) i--;
count--;
}
}
void init(void)
{
uint j=500;
state=0;
set_state=0;
set_state_max=26;
state_man=0;
AYS_flag=0;
BYS_flag=0;
second_flag=1;
time=0;
AYS_time=0;
BYS_time=0;
j=250;
do{
a=b=c=d=0x01;
display();
t_hour=XBYTE[0x8000+0x04];
t_minute=XBYTE[0x8000+0x02];
t_second=XBYTE[0x8000+0x00];
}while(j--);
if(AGT==0&&APGT==0&&APGS==0&&AGS==0&&AYT==0&&BGT==0&&BPGT==0&&BPGS==0&&BGS==0&&BYT==0)
{
RT=5;
APGT=20;
APGS=5;
AGS=5;
AYT=5;
AYS=2;
AGT=20;
//RT=5;
BPGT=20;
BPGS=5;
BGS=5;
BYT=5;
BYS=1;
BGT=20;
XBYTE[0x8000+0x0B]=0x86;
XBYTE[0x8000+0x0A]=0xA0;
XBYTE[0x8000+0x0A]=0x20;
XBYTE[0x8000+0x0B]=0x06;
j=250;
do{
a=0XFD;b=0x73;c=0X61;d=0XFD;
display();
}while(j--);
}
if(B10==0|B19!=23|B29!=59)
{A10=00; A20=00;
A11=30; A21=25;
A12=45; A22=35;
A13=50; A23=40;
A14=45; A24=35;
A15=35; A25=30;
A16=45; A26=35;
A17=50; A27=40;
A18=40; A28=30;
A19=00; A29=00;
B10=6; B20=0;
B11=7; B21=20;
B12=8; B22=40;
B13=11; B23=30;
B14=12; B24=30;
B15=13; B25=45;
B16=17; B26=30;
B17=18; B27=45;
B18=22; B28=0;
B19=23; B29=59;
}
COMA =0xff;
COMB =0xff;
s_flag=0;
_nop_();
_nop_();
_nop_();
_nop_();
j=250;
do{
a=0XFD;b=0xE1;c=0X61;d=0XFD;
display();
t_hour=XBYTE[0x8000+0x04];
t_minute=XBYTE[0x8000+0x02];
t_second=XBYTE[0x8000+0x00];
}while(j--);
start_flag=1;
}
void alloff(void)
{P1=0xff;
P3_0=0;
P3_1=0;
P3_4=0;
P3_5=0;
}
void int0() interrupt 0 using 1
{ bit jjj,keydat;
keydat = P3_2; //讀入鍵值
_nop_();
_nop_();
if (keydat != 1) //有鍵輸入
{
_nop_();
_nop_();
_nop_();
_nop_();
jjj = P3_2; //再讀,去抖動
if (jjj == keydat)
zxfa++;
if(zxfa==3)
{zxfa=0;
time=0;
}
}
}
void settime(void)
{uchar set_h,set_m,key;
XBYTE[0x8000+0x0B]=0x86;//停止
second_flag=0;
set_h=t_hour;
set_m=t_minute;
do
{
key=inkey();
switch (key)
{
case 0x7E:
break;
case 0x7D:
set_h++;
if(set_h>=24)
set_h=0;
break;
case 0x7B:
if(set_h<=0)
set_h=23;
else
set_h--;
break;
case 0x77:
set_m++;
if(set_m>=60)
set_m=0;
break;
case 0x6f:
if(set_m<=0)
set_m=59;
else
set_m--;
break;
case 0x5F:
t_hour=XBYTE[0x8000+0x04]=set_h;
t_minute=XBYTE[0x8000+0x02]=set_m;
t_second=XBYTE[0x8000+0x00]=0;
XBYTE[0x8000+0x0B]=0x06;//啟動時間
second_flag=1;
return;
break;
}
a=tab[set_h/10];b=tab[set_h%10];c=tab[set_m/10];d=tab[set_m%10];
display();
}while(1);
}
void display1(void)
{alloff();
if(s_flag&&second_flag)
{
P1_0=0;
P3_0=0;
P3_1=0;
P3_4=1;
P3_5=0;
}
else
{
P1_0=1;
P3_0=0;
P3_1=0;
P3_4=0;
P3_5=0;
}
Delay(1);
alloff();
switch (zxfa)
{
case 0:
P1_0=0;
P3_0=0;
P3_1=0;
P3_4=0;
P3_5=1;
break;
case 1:
P1_0=0;
P3_0=1;
P3_1=0;
P3_4=0;
P3_5=0;
break;
case 2:
P1_0=0;
P3_0=0;
P3_1=1;
P3_4=0;
P3_5=0;
break;
}
Delay(1);
alloff();
}
void check(void)
{uchar m1,m2,key;
set_flag=0;
settime_flag=0;
m1=55;
m2=55;
do
{
a=tab[m1/10];b=tab[m1%10];c=tab[m2/10];d=tab[m2%10];
display();
key=inkey();
switch (key)
{
case 0x7E:
if(m1==80&&m2==31)
settime_flag=1;
return;
break;
case 0x5F:
if(m1==80&&m2==31)
set_flag=1;
return;
break;
case 0x7D:
m1++;
break;
case 0x7B:
m1--;
break;
case 0x77:
m2++;
break;
case 0x6f:
m2--;
break;
}
}while(1);
}
void initsiu(void) //初始化單片機
{
TMOD=0x11; //定時器1:gate=0->TR1=1開始計數,C/T=0->對內部計數,模式1->16位計數
TH0=0Xd4;
TL0=0X98;
ET0=1; //打開定時器0中斷
ET1=0; //關閉定時器1中斷
IT0=1; //外中斷跳變產生中斷
EX0=1;
TR0=1; //打開計數器0
TR1=0; //關閉計數器1
EA=1; //總中斷允許
start_flag=0;
COMA =0xff;
COMB =0xff;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -