|
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位选,控制那个数码管亮。
uchar code table1[12]={0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09,0x00,0xfd}; //共阴极0~9,“灭”,“-”
uchar data timedata[3]={0x00,0x00,0x00}; //时间缓冲区,分别为:秒,时,分。
uchar data dis[8]={0x03,0x03,0xfd,0x03,0x03,0xfd,0x03,0x03};//时间缓冲区,初始化显示00-00-00。
uchar data tt=0,con=0,con1=0,con2=0;
sbit key0=P3^4; //秒加
sbit key1=P3^3; //分加
sbit key2=P3^2; //时加
sbit beep=P3^5; //蜂鸣器
//**************延时函数*********************************
void delay(uint del)
{
uchar i, j;
for(i=0; i
for(j=0; j<=148; j++);
}
//****************数码管显示******************************
void scan()
{
uchar k;
dis[0]=timedata[0]%10; dis[1]=timedata[0]/10;
dis[3]=timedata[1]%10; dis[4]=timedata[1]/10;
dis[6]=timedata[2]%10; dis[7]=timedata[2]/10;
for (k=0;k<8;k++)
{
P0=table1[dis[k]];
P2=table[k];
delay(1);
P2=0x00;
}
while((timedata[2]++==8)&&(timedata[1]++==0)&&(timedata[0]++==0))
{
alarm();
}
}
//******************按键处理函数*调整时间****************************
void keyscan()
{
EA=0;
if(key0==0) //调秒
{ ET0=0;
delay(5);
if(key0==0)
{
timedata[0]++;
if(timedata[0]==60)
timedata[0]=0;
while(key0!=1)
scan();
delay(5);
ET0=1;
}
}
if(key1==0) //调分
{ ET0=0;
delay(5);
if(key1==0)
{
timedata[1]++;
if(timedata[1]==60)
timedata[1]=0;
while(key1!=1)
scan();
delay(5);
ET0=1;
}
}
if(key2==0) //调时
{ ET0=0;
delay(5);
if(key2==0)
{
timedata[2]++;
if(timedata[2]==24)
timedata[2]=0;
while(key2!=1)
scan();
delay(5);
ET0=1;
}
}
EA=1;
}
//*****************报警函数***************************
void alarm()
{
uchar i;
for(i=0;i<10000;i++)
beep=~beep;
}
//***************主函数****************************
void main()
{
TMOD=0x01;
ET0=1;
TR0=1;
TH0=0x40;
TL0=0x00;
EA=1;
while(1)
{
P2=0x20;
P0=dis[2];
delay(1);
P2=0x04;
P0=dis[5];
delay(1);
scan();
keyscan();
}
}
//***************定时器函数***************************
void timer0() interrupt 1
{
TH0=0x40;
TL0=0x00;
tt++;
if(tt==20)
{
tt=0;
timedata[0]++;
if(timedata[0]==60)
{
timedata[0]=0;
timedata[1]++;
if(timedata[1]==60)
{
timedata[1]=0;
timedata[2]++;
if(timedata[2]==24)
{
timedata[2]=0 ;
}
}
}
}
}
在没有写报警函数的时候,可以正常运行,但是调运了了报警函数就不对了,错误信心是:’alarm‘:redefinition。
编译通不过的,为什么呢?alarm()函数的调运有错吗?
while((timedata[2]++==8)&&(timedata[1]++==0)&&(timedata[0]++==0))
{
alarm();
}这个函数的位置对吗?
|
|