本帖最后由 xichandoujigu 于 2018-1-30 23:37 编辑
附代码如下
#include <REG51.H>
int fen_gao,fen_di,miao_gao,miao_di; // 秒个位,十位、分个位、十位
unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit P37=P3^3;
sbit P36=P3^4;
sbit P35=P3^5;
sbit P34=P3^7;
sbit beep=P3^0;
int zhongduan_cnt;
//10ms延时子程序(12MHZ)
void delay_ms(void)
{
int i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
void init()
{
TMOD=0x01; //定时器初始化 选择timer0做16位定时器
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //开放中断
ET0=1; //开放timer0中断
TR0=1; //启动timer0
}
void display(int fen_gao,fen_di,miao_gao,miao_di)
{
P1 = 0X00;
P37=1;
P1=Tab[fen_gao];
delay_ms() ;
P37=0;
P1 = 0X00;
P36=1;
P1=Tab[fen_di];
delay_ms() ;
P36=0;
P1 = 0X00;
P35=1;
P1=Tab[miao_gao];
delay_ms() ;
P35=0;
P1 = 0X00;
P34=1;
P1=Tab[miao_di];
delay_ms() ;
P34=0;
}
void Delay_beep(int x)
{ int t; while(x--) for(t=0;t<120;t++); } //按周期t发音
void Play(int t)
{ int i; for(i=0;i<100;i++) { beep=~beep; Delay_beep(t); } beep=0; }
void timer0(void) interrupt 1 using 1
{
TH0 = (65536-50000)/256;
TL0= (65536-50000)%256;
zhongduan_cnt++;
}
/*********主程序********************/
void main()
{
beep=0;
miao_di=5;
miao_gao=0;
fen_di=0;
fen_gao=0;
zhongduan_cnt=0;
P35=0;
P37=0;
P34=0;
P36=0;
init();
while(1)
{
if(zhongduan_cnt>19) //如果到了1S
{
zhongduan_cnt=0; //清零
if(miao_di==0 && miao_gao==0 && fen_di==0 && fen_gao==0)
{ Play(2);}//归零开始响
else if (miao_di==0 && miao_gao==0 && fen_di==0)
{ miao_di=9; miao_gao=5;fen_di=9;fen_gao=fen_gao-1; }
else if (miao_di==0 && miao_gao==0 && fen_di!=0)
{ miao_di=9;miao_gao=5;fen_di=fen_di-1; }
else if (miao_di==0 && miao_gao!=0)
{ miao_di=9;miao_gao=miao_gao-1; }
else if (miao_di!=0)
miao_di= miao_di-1;
}
display(fen_gao,fen_di,miao_gao,miao_di);
}
}
程序的意思是倒计时5秒后蜂鸣器响,帮忙看看,谢谢!
|