关于单片机秒表、倒计时C语言程序有关问题
发布时间:2010-06-14 16:01:41 文章来源:www.iduyao.cn 采编人员:星星草
关于单片机秒表、倒计时C语言程序问题
我做的是一个万年历,有调整、闹钟、秒表、倒计时的功能。现在是秒表和倒计时不能用,按确定键应该可以开始秒表计时,可是就是没动静,我把相关程序发上来,求高手帮忙解决,万分感谢。
#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');
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
c51串口求助!
串口接收程序如下
void rec_gps(void) interrupt 4 {
uchar str;
uint i,k;
k=0;
i=0;...
-
win7运行CodeWarrior IDE出错
我的本安装了CodeWarrior IDE,一运行就会出现提示:
IDE 4.1 Build 0622 已停止工作。
或者提示:
Unha...
-
关于AT指令控制GSM短信猫的问题
C/C++ code
打开串口
BOOL CComm::OpenComm(const char* pPort,
int nBaudRa...
-
关于51中断求教
各位大虾,我现在要做一个GPS授时的小程序,遇到如下困惑,求大虾们解答:
1 线路板上带有时钟芯片,平时显示时间是...
-
atd指令拨号,如何判断电话状态
在网上找了许久,终于找到一位仁心解决方案,这个指令是可以得到手机当时的状态,但是不管是空号、欠费、...
-
知道在哪跑飞,跑飞的详细原因有谁能解释一下。
今天出现这样的问题:
将这个中断函数注释掉:
#pragma vector=USCI_B2_VECTOR
__in...
-
51程序移植到2051
大牛们,我想吧一个51的程序移植到2051中,用NXP的89V51芯片时用到的I/O口只有P1.0 P1.1 P1.2 3三个,我现在移植到AT...
-
一道课程设计题:基于单片机的波形发生器的设计
设计要求:
1.能产生正弦波、方波、三角波、锯齿波等4种周期性波形,并且可通过调节变...
-
解析单片机最小系统及相关电路
原文出自:电子发烧友论坛——单片机论坛[color=#FF0000][/color]
单片机最小系统单片机最小系统介...
-
单片机学习书籍大全推荐
在电子发烧友论坛里看到了单片机学习资料汇总,特地搜罗了过来,不知道大家看过几本,也希望让需要学习的人 都...