关于单片机秒表、倒计时C语言程序问题

kuixue 2011-12-07 08:50:32
我做的是一个万年历,有调整、闹钟、秒表、倒计时的功能。现在是秒表和倒计时不能用,按确定键应该可以开始秒表计时,可是就是没动静,我把相关程序发上来,求高手帮忙解决,万分感谢。
#include "SYSTEM.H"
#define KEY P2
SYSTEMTIME CurrentTime;
sbit tz=KEY^0;
sbit jia1=KEY^1;
sbit jian1=KEY^2;
sbit miaob=KEY^3;
sbit naoz=KEY^4;
sbit daojs=KEY^5;
sbit zs=KEY^6;
sbit qued=KEY^7;
sbit fmq=P1^3;
unchar slect;//调整按键次数变量
unchar bdata b;//确定按键变量(秒表模块)
unchar bdata c;//确定按键变量(倒计时模块)
unchar flag;//状态变量
unchar fanh;//返回显示时间标志位
char dshour,dsmin,dssec;
unchar timer1h,timer1l;
unchar count;//循环5ms次数
char fen,miao,ms;
char daojsh,daojsm,daojss;
/*********************************************
*名称:timer0() interrupt 1
*功能:中断5ms
*输入:无
*输出:无
**********************************************/
void timer0(void) interrupt 1
{
TF0=0;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
count++;

}
以下是Read_key()程序的一部分
if(miaob==0)//秒表状态
{
delay(10);
if(miaob==0)
{
while(!miaob);
flag=3;
lcd_pos(5,1);
prints("00:00:00");
ms=miao=fen=0;
slect=0;
}
}
if(daojs==0)//倒计时状态
{
delay(10);
if(daojs==0)
{
while(!daojs);
flag=4;
lcd_pos(5,1);
prints("00:00:00");
CurrentTime.Second=0;
CurrentTime.Minute=0;
CurrentTime.Hour=0;
slect=1;
}
}
if(qued==0)
{
delay(10);
if(qued==0)
{
while(!qued);
lcd_wcmd(0x0c);
if(flag==1)
{
stop_time(1);
DS1302_SetTime(DS1302_SECOND,CurrentTime.Second);
DS1302_SetTime(DS1302_MINUTE,CurrentTime.Minute);
DS1302_SetTime(DS1302_HOUR,CurrentTime.Hour);
DS1302_SetTime(DS1302_DAY,CurrentTime.Day);
DS1302_SetTime(DS1302_MONTH,CurrentTime.Month);
DS1302_SetTime(DS1302_YEAR,CurrentTime.Year);
DS1302_SetTime(DS1302_WEEK,CurrentTime.Week);
slect=0;

}
if(flag==2)
{
dshour=CurrentTime.Hour;
dsmin=CurrentTime.Minute;
dssec=CurrentTime.Second;

slect=0;
}
if(flag==3)
{

b=~b;
if(b==0)TR0=1;
else {TR0=0;count=0;}
}
if(flag==4)
{

daojsh=CurrentTime.Hour;
daojsm=CurrentTime.Minute;
daojss=CurrentTime.Second;

slect=0;
c=~c;
if(c==0)TR0=1;
else {TR0=0;count=0;}

}

}
}
if(count)
{
if(flag==3)
{
if(count==2)
{
count=0;
ms++;
if(ms==100)
{
ms=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
lcd_pos(5,1);
printc(fen/10+'0');
lcd_pos(6,1);
printc(fen%10+'0');
}
lcd_pos(8,1);
printc(miao/10+'0');
lcd_pos(9,1);
printc(miao%10+'0');
}
lcd_pos(11,1);
printc(ms/10+'0');
lcd_pos(12,1);
printc(ms%10+'0');
}
}
if(flag==4)
{
if(count==200)
{
count=0;
daojss--;
if(daojss==-1)
{
daojss=59;
daojsm--;
if(daojsm==-1)
{
daojsm=59;
daojsh--;
lcd_pos(5,1);
printc(daojsh/10+'0');
lcd_pos(6,1);
printc(daojsh%10+'0');
}
lcd_pos(8,1);
printc(daojsm/10+'0');
lcd_pos(9,1);
printc(daojsm%10+'0');
}
lcd_pos(11,1);
printc(daojss/10+'0');
lcd_pos(12,1);
printc(daojss%10+'0');
}
if(daojsh==0&daojsm==0&daojss==0)//倒计时到0报警
{
fmq=1;
delay(400);
fmq=0;
}

}
}

if(zs==0)
{
delay(10);
if(zs==0)
{
while(!zs);

flag=0;
TR0=0;
b=c=1;
stop_time(0);//时钟继续走
count=0;
fanh=1;

}
}

}
主程序:
void main(void)
{
unint d,time,cnt,i;
lcd_init();
DS1302_Initial();

lcd_pos(0,0); //设置 Date:显示位置
prints("Date:"); //显示 Date:字符
lcd_pos(0,1); //设置 Time:显示位置
prints("Time:");
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
EA=1;
ET0=1;
fmq=0;
b=1;c=1;count=0;cnt=0;
while(1)
{

DS1302_GetTime(¤tTime); //获得DS1302时钟数据
DateToStr(¤tTime); //日期转化成字符
TimeToStr(¤tTime); //时间转化成字符


lcd_pos(5,0); //控制显示位置
prints(CurrentTime.DateString);
lcd_pos(5,1); //控制显示位置
prints(CurrentTime.TimeString);
if(CurrentTime.Hour==dshour&¤tTime.Minute==dsmin&¤tTime.Second==dssec)
{
time=30;d=1;
}
if(CurrentTime.Minute==0&¤tTime.Second==0)
{
d=2;time=5;//隔一秒响一声
fmq=1;
if(CurrentTime.Hour>13)i=CurrentTime.Hour-12;
else if(CurrentTime.Hour==0)i=12;
else i=CurrentTime.Hour;
}
if(time)
{
if(d==1)
{
fmq=1;time--;
if(time==0)fmq=0;
}
if(d==2)
{
if(!(time--)){fmq=!fmq;cnt++;time=5;}
if(cnt==i*2){fmq=0;time=0;}
}
}
if(P2!=0xff)//按键扫描
{
while(1)
{
Read_key();
if(fanh==1){fanh=0;break;}
}
}
delay(20);



}
}
...全文
853 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhp1888 2011-12-09
  • 打赏
  • 举报
回复
不同的单片机调用计时器的方法不同,不能只以C代码来确定。
AnYidan 2011-12-07
  • 打赏
  • 举报
回复
单片机/工控 论坛
猪头小哥 2011-12-07
  • 打赏
  • 举报
回复
单片机方面的程序不能光看程序的 你得和原理图的连线相结合~~~~
TR0=1; 没有 这是启动定时器的~~

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧