2868|2

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

电子钟闹钟的添加问题 [复制链接]

#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();

}这个函数的位置对吗?

最新回复

原因是:C程序,应该把“子程序”写在前面,它的“主程序”,写在后面。然后才可以调运。   详情 回复 发表于 2010-3-10 15:19
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
报错说的是你重定义

不过看了一点好像没有,你要不换个名字看看,不知道是不是和库里的冲突了
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
原因是:C程序,应该把“子程序”写在前面,它的“主程序”,写在后面。然后才可以调运。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表