给别人弄的60S倒计时,数码管显示,需要的看看。
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
//sbit dula=P2^6;
//sbit wela=P2^7;
sbit beep=P1^4;
sbit start_key=P3^2;
static unsigned char second=60;
//uchar j,k,a1,a0,s=60;
uint m;
//uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
// 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,//数码管
0xf8,0x80,0x90};
//////////////////////////////////////
void delay(uint nms)
{
uint i,j;
for(i=nms;i>0;i--)
for(j=125;j>0;j--);
}
//////////////////////////////////
void display()
{
P0=table[second/10];
P2_2 = 0;
delay(5);
P2_2 = 1;
P0=table[second%10];
P2_3 = 0;
delay(5);
P2_3 = 1;
}
///////////////////////////////////////////
void Timer0Init(void) //50毫秒@11.0592MHz
{
// AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值
EA=1;
ET0=1;
TR0=1;
}
///////////////////////////////////////////
void main()
{
uchar a;
Timer0Init();
while(1)
{
key_scan();
for(a=100;a>0;a--)
{
display();
}
if(second==0)
{
TR0=0;//时间到,定时器关闭
beep=0;//蜂
delay(300);
beep=1;//蜂
}
}
}
/////////////////////////////////////////////////
void timer0() interrupt 1
{
TL0 = 0x00; //设置定时初值
TH0 = 0x4C; //设置定时初值
m++;
if(m==20)
{ m=0;
second--;
}
}
|