📄 1602菜单实验.c
字号:
else timerbit[4][0]++;}
else timerbit[4][1]++;
logtimer[4][1]=timerbit[4][1];
logtimer[4][0]=timerbit[4][0];
add_dec5=0;}
key=0;
break;
case 14: if(!start5)
{if(timerbit[4][3]==9) //五组,秒加
{timerbit[4][3]=0;
if(timerbit[4][2]==5)
timerbit[4][2]=0;
else timerbit[4][2]++;}
else timerbit[4][3]++;
logtimer[4][2]=timerbit[4][2];
logtimer[4][3]=timerbit[4][3];
add_dec5=0;}
key=0;
break;
case 15: if(stop5==0)
{display[5][2]=~display[5][2];//五组,开始/暂停
if(display[5][2])
display1[5][0]+=0x10;
else
display1[5][0]-=0x10;
start5=~start5;
DDRB=0XF8;
PORTB=0X07;
while(PINB!=0x07) //如果有1脚为0即有按键动作
{display1_out();}
v_Get1302(buffer3);
if((timerbit[4][0]+timerbit[4][1]+timerbit[4][2]+timerbit[4][3])==0)
add_dec5=~add_dec5;
start5_5=data[BcdToBin(buffer3[0]&0x0f)];}
else {buzzer=0;
display[5][2]=~display[5][2];
if(display[5][2])
display1[5][0]+=0x10;
else
display1[5][0]-=0x10;
stop5=~stop5;
timerbit[4][0]=logtimer[4][0];
timerbit[4][1]=logtimer[4][1];
timerbit[4][2]=logtimer[4][2];
timerbit[4][3]=logtimer[4][3];
DDRB=0XF8;
PORTB=0X07;
while(PINB!=0x07) //如果有1脚为0即有按键动作
{display1_out();}
}
key=0;break;
case 16: if(!start1){timerbit[0][0]=timerbit[0][1]=timerbit[0][2]=timerbit[0][3]=0;
logtimer[0][1]=timerbit[0][1];
logtimer[0][2]=timerbit[0][2];
logtimer[0][3]=timerbit[0][3];
logtimer[0][4]=timerbit[0][4];}
break;
case 17: if(!start2){timerbit[1][0]=timerbit[1][1]=timerbit[1][2]=timerbit[1][3]=0;
logtimer[1][1]=timerbit[1][1];
logtimer[1][2]=timerbit[1][2];
logtimer[1][3]=timerbit[1][3];
logtimer[1][4]=timerbit[1][4];}
break;
case 18: if(!start3){timerbit[2][0]=timerbit[2][1]=timerbit[2][2]=timerbit[2][3]=0;
logtimer[2][1]=timerbit[2][1];
logtimer[2][2]=timerbit[2][2];
logtimer[2][3]=timerbit[2][3];
logtimer[2][4]=timerbit[2][4];}
break;
case 19: if(!start4){timerbit[3][0]=timerbit[3][1]=timerbit[3][2]=timerbit[3][3]=0;
logtimer[3][1]=timerbit[3][1];
logtimer[3][2]=timerbit[3][2];
logtimer[3][3]=timerbit[3][3];
logtimer[3][4]=timerbit[3][4];}
break;
case 20: if(!start5){timerbit[4][0]=timerbit[4][1]=timerbit[4][2]=timerbit[4][3]=0;
logtimer[4][1]=timerbit[4][1];
logtimer[4][2]=timerbit[4][2];
logtimer[4][3]=timerbit[4][3];
logtimer[4][4]=timerbit[4][4];}
break;
default:
break;
}
}
/******************************************************************** */
//595驱动
/******************************************************************** */
void wr595(unsigned char DAT)
{unsigned char k,i;
for(k=8;k>0;k--)
{i=k-1;
SDI=DAT>>i;
SCR=1;
asm ("NOP");
asm ("NOP");
SCR=0; }
}
void out595(void)
{LCR=0;
asm ("NOP");
asm ("NOP");
LCR=1;
asm ("NOP");
asm ("NOP");
LCR=0;}
/******************************************************************** */
//LED时钟显示驱动
/******************************************************************** */
void display_out(void)
{unsigned char a,s;
//
wr595(display[5][0]);
for(a=s=5;a>0;a--)
wr595(display[--s][0]);
out595();
SETBIT(PORT_595,LED1);
delay_nus(5000);
CLRBIT(PORT_595,LED1);
//
wr595(display[5][0]);
for(a=s=5;a>0;a--)
wr595(display[--s][1]);
out595();
SETBIT(PORT_595,LED2);
delay_nus(5000);
CLRBIT(PORT_595,LED2);
//
wr595(display[5][0]);
for(a=s=5;a>0;a--)
wr595(display[--s][2]);
out595();
SETBIT(PORT_595,LED3);
delay_nus(5000);
CLRBIT(PORT_595,LED3);
//
wr595(display[5][0]);
for(a=s=5;a>0;a--)
wr595(display[--s][3]);
out595();
SETBIT(PORT_595,LED4);
delay_nus(5000);
CLRBIT(PORT_595,LED4);
}
/******************************************************************** */
//LED定时器显示驱动
/******************************************************************** */
void display1_out(void)
{unsigned char a,s;
//
wr595(display1[5][0]);
for(a=s=5;a>0;a--)
wr595(display1[--s][0]);
out595();
SETBIT(PORT_595,LED1);
delay_nus(5000);
CLRBIT(PORT_595,LED1);
//
wr595(display1[5][0]);
for(a=s=5;a>0;a--)
wr595(display1[--s][1]);
out595();
SETBIT(PORT_595,LED2);
delay_nus(5000);
CLRBIT(PORT_595,LED2);
//
wr595(display1[5][0]);
for(a=s=5;a>0;a--)
wr595(display1[--s][2]);
out595();
SETBIT(PORT_595,LED3);
delay_nus(5000);
CLRBIT(PORT_595,LED3);
//
wr595(display1[5][0]);
for(a=s=5;a>0;a--)
wr595(display1[--s][3]);
out595();
SETBIT(PORT_595,LED4);
delay_nus(5000);
CLRBIT(PORT_595,LED4);
}
/******************************************************************** */
//LED日期显示数据输入
/******************************************************************** */
void displayinput(char*P)
{ display[0][0]=0x5B;
display[0][1]=0X3F;
display[0][2]=data[BcdToBin(buffer3[6]>>4)];
display[0][3]=data[BcdToBin(buffer3[6]&0x0f)];
display[1][0]=data[BcdToBin(buffer3[4]>>4)];
display[1][1]=data[BcdToBin(buffer3[4]&0x0f)];
display[1][2]=data[BcdToBin(buffer3[3]>>4)]+0x80;
display[1][3]=data[BcdToBin(buffer3[3]&0x0f)];
display[2][0]=data[BcdToBin(buffer3[2]>>4)];
display[2][1]=data[BcdToBin(buffer3[2]&0x0f)];
display[2][2]=data[BcdToBin(buffer3[1]>>4)]+0x80;
display[2][3]=data[BcdToBin(buffer3[1]&0x0f)];
display[3][0]=data[BcdToBin(buffer3[0]>>4)]+0x80;
display[3][1]=data[BcdToBin(buffer3[0]&0x0f)];
}
/******************************************************************** */
//LED定时显示数据输入
/******************************************************************** */
void displayinput1(void)
{if(!((display1[5][1]==0)^(start1==0)))
{display1[0][0]=data[timerbit[0][0]];
display1[0][1]=data[timerbit[0][1]];
display1[0][2]=data[timerbit[0][2]]+0x80;
display1[0][3]=data[timerbit[0][3]];}
else {if(start1_1!=startdata){display1[0][0]=0x00;
display1[0][1]=0x00;
display1[0][2]=0x00;
display1[0][3]=0x00;}}
display1[1][0]=data[timerbit[1][0]];
display1[1][1]=data[timerbit[1][1]];
display1[1][2]=data[timerbit[1][2]]+0x80;
display1[1][3]=data[timerbit[1][3]];
display1[2][0]=data[timerbit[2][0]];
display1[2][1]=data[timerbit[2][1]];
display1[2][2]=data[timerbit[2][2]]+0x80;
display1[2][3]=data[timerbit[2][3]];
display1[3][0]=data[timerbit[3][0]];
display1[3][1]=data[timerbit[3][1]];
display1[3][2]=data[timerbit[3][2]]+0x80;
display1[3][3]=data[timerbit[3][3]];
display1[4][0]=data[timerbit[4][0]];
display1[4][1]=data[timerbit[4][1]];
display1[4][2]=data[timerbit[4][2]]+0x80;
display1[4][3]=data[timerbit[4][3]];
}
/******************************************************************** */
//计时
/******************************************************************** */
void start_time(void)
{if(start1)
{if(start1_1!=startdata)
{start1_1=data[BcdToBin(buffer3[0]&0x0f)];
if(add_dec1!=0)
{if(timerbit[0][3]==9)
{timerbit[0][3]=0;
if(timerbit[0][2]==5)
{timerbit[0][2]=0;
if(timerbit[0][1]==9)
{timerbit[0][1]=0;
if(timerbit[0][0]==9)
timerbit[0][0]=0;
timerbit[0][0]++;}
else timerbit[0][1]++;}
else timerbit[0][2]++;}
else timerbit[0][3]++; }
else {if((timerbit[0][0]+timerbit[0][1]+timerbit[0][2]+timerbit[0][3])!=0)
{if(timerbit[0][3]==0)
{timerbit[0][3]=9;
if(timerbit[0][2]==0)
{timerbit[0][2]=5;
if(timerbit[0][1]==0)
{timerbit[0][1]=9;
if(timerbit[0][0]==0)
;
else timerbit[0][0]--;}
else timerbit[0][1]--;}
else timerbit[0][2]--;}
else timerbit[0][3]--;}
else{ buzzer=1;
start1=~start1;
stop1=~stop1;}
}}
}
if(start2)
{if(start2_2!=startdata)
{start2_2=data[BcdToBin(buffer3[0]&0x0f)];
if(add_dec2!=0)
{if(timerbit[1][3]==9)
{timerbit[1][3]=0;
if(timerbit[1][2]==5)
{timerbit[1][2]=0;
if(timerbit[1][1]==9)
{timerbit[1][1]=0;
if(timerbit[1][0]==9)
timerbit[1][0]=0;
timerbit[1][0]++;}
else timerbit[1][1]++;}
else timerbit[1][2]++;}
else timerbit[1][3]++; }
else {if((timerbit[1][0]+timerbit[1][1]+timerbit[1][2]+timerbit[1][3])!=0)
{if(timerbit[1][3]==0)
{timerbit[1][3]=9;
if(timerbit[1][2]==0)
{timerbit[0][1]=5;
if(timerbit[1][1]==0)
{timerbit[1][1]=9;
if(timerbit[1][0]==0)
;
else timerbit[1][0]--;}
else timerbit[1][1]--;}
else timerbit[1][2]--;}
else timerbit[1][3]--;}
else{ buzzer=1;
start2=~start2;
stop2=~stop2;}
}}
}
if(start3)
{if(start3_3!=startdata)
{start3_3=data[BcdToBin(buffer3[0]&0x0f)];
if(add_dec3!=0)
{if(timerbit[2][3]==9)
{timerbit[2][3]=0;
if(timerbit[2][2]==5)
{timerbit[2][2]=0;
if(timerbit[2][1]==9)
{timerbit[2][1]=0;
if(timerbit[2][0]==9)
timerbit[2][0]=0;
timerbit[2][0]++;}
else timerbit[2][1]++;}
else timerbit[2][2]++;}
else timerbit[2][3]++; }
else {if((timerbit[2][0]+timerbit[2][1]+timerbit[2][2]+timerbit[2][3])!=0)
{if(timerbit[2][3]==0)
{timerbit[2][3]=9;
if(timerbit[2][2]==0)
{timerbit[2][2]=5;
if(timerbit[2][1]==0)
{timerbit[2][1]=9;
if(timerbit[2][0]==0)
;
else timerbit[2][0]--;}
else timerbit[2][1]--;}
else timerbit[2][2]--;}
else timerbit[2][3]--;}
else{ buzzer=1;
start3=~start3;
stop3=~stop3;}
}}
}
if(start4)
{if(start4_4!=startdata)
{start4_4=data[BcdToBin(buffer3[0]&0x0f)];
if(add_dec4!=0)
{if(timerbit[3][3]==9)
{timerbit[3][3]=0;
if(timerbit[3][2]==5)
{timerbit[3][2]=0;
if(timerbit[3][1]==9)
{timerbit[3][1]=0;
if(timerbit[3][0]==9)
timerbit[3][0]=0;
timerbit[3][0]++;}
else timerbit[3][1]++;}
else timerbit[3][2]++;}
else timerbit[3][3]++; }
else {if((timerbit[3][0]+timerbit[3][1]+timerbit[3][2]+timerbit[3][3])!=0)
{if(timerbit[3][3]==0)
{timerbit[3][3]=9;
if(timerbit[3][2]==0)
{timerbit[3][2]=5;
if(timerbit[3][1]==0)
{timerbit[3][1]=9;
if(timerbit[3][0]==0)
;
else timerbit[3][0]--;}
else timerbit[3][1]--;}
else timerbit[3][2]--;}
else timerbit[3][3]--;}
else{ buzzer=1;
start4=~start4;
stop4=~stop4;}
}}
}
if(start5)
{if(start5_5!=startdata)
{start5_5=data[BcdToBin(buffer3[0]&0x0f)];
if(add_dec5!=0)
{if(timerbit[4][3]==9)
{timerbit[4][3]=0;
if(timerbit[4][2]==5)
{timerbit[4][2]=0;
if(timerbit[4][1]==9)
{timerbit[4][1]=0;
if(timerbit[4][0]==9)
timerbit[4][0]=0;
timerbit[4][0]++;}
else timerbit[4][1]++;}
else timerbit[4][2]++;}
else timerbit[4][3]++; }
else {if((timerbit[4][0]+timerbit[4][1]+timerbit[4][2]+timerbit[4][3])!=0)
{if(timerbit[4][3]==0)
{timerbit[4][3]=9;
if(timerbit[4][2]==0)
{timerbit[4][2]=5;
if(timerbit[4][1]==0)
{timerbit[4][1]=9;
if(timerbit[4][0]==0)
;
else timerbit[4][0]--;}
else timerbit[4][1]--;}
else timerbit[4][2]--;}
else timerbit[4][3]--;}
else{ buzzer=1;
start5=~start5;
stop5=~stop5;}
}}
}
}
/***********************************************************************************************
计时减
***************************************************************************************************/
void start_timedec(void)
{if(start1)
{if(start1_1!=startdata)
{start1_1=data[BcdToBin(buffer3[0]&0x0f)];
if(timerbit[0][3]==0)
{timerbit[0][3]=9;
if(timerbit[0][2]==0)
{timerbit[0][2]=5;
if(timerbit[0][1]==0)
{timerbit[0][1]=9;
if(timerbit[0][0]==0)
timerbit[0][0]=9;
timerbit[0][0]--;}
else timerbit[0][1]--;}
else timerbit[0][2]--;}
else timerbit[0][3]--; }
}
}
SIGNAL(SIG_OVERFLOW0)
{if(++t>14)
{buzzer=1;t=0;
}
}
/***********************************************************************************************
主函数
***************************************************************************************************/
int main()
{
TCNT0=0; // T/C0 开始值
TCCR0=_BV(CS02)|_BV(CS00); // 预分频 ck/1024 ,计数允许
sei();
DDRB=0X00;
PORTB=0X00;
DDRC=0X00;
PORTC=0X00;
DDRD=0X00;
PORTD=0X00;
initialize_1302();
buzzer=0;
buzzer_1=1;
switch1=~switch1;
SETBIT(DDR_595,LED2);
SETBIT(DDR_595,LED1);
SETBIT(DDR_595,LED3);
SETBIT(DDR_595,LED4);
SCR1=1;
LCR1=1;
SDI1=1;
//eeprom_write_byte(&timerrom,6);
while(1)
{ v_Get1302(buffer3);
startdata=data[BcdToBin(buffer3[0]&0x0f)];
SETBIT(PORTC,PC1);
if(!CHKBIT(PINC,PC1))
{ switch1=~switch1;
buzzer=0;
while(!CHKBIT(PINC,PC1));
delay_nms(10);
}
if(switch1)
{ DDRB=0XF8;
PORTB=0X07;
if(PINB!=0x07) //如果有1脚为0即有按键动作
scankey();
// buzzer=0;
key_day();
v_Get1302(buffer3);
displayinput(buffer3);
display_out();}
if(!switch1)
{DDRB=0XF8;
PORTB=0X07;
if(PINB!=0x07) //如果有1脚为0即有按键动作
{scankey();
key_timer();}
displayinput1();
display1_out();
}
start_time();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -