
硬件电路 有2位数码管可以显示秒表的时间 0~10秒
有3个按键 K1为开始计时 K2为停止计时 K3为清零
软件设计:
K1按下则启动定时器定时 每到1秒 显示器缓冲单元内容加1
K2按下则停止定时器定时
K3按下则将显示器缓冲单元内容清零。
型号不同,可能略有不同,但大同小异。
以下是科沃德电子定时器的 *** 作说明:
一、调整当前时间
使用定时器时,须先将定时器的显示时间调整到当前时间。
1、按住“时钟”键的同时,分别按“星期” 、“小时” 、“分钟” 键,调整到当前的时间。(每按一次增加一小时,长按可快速调整。)
2、按“时钟”键3秒后,当前时间增加1小时,同时液晶屏显示“夏令时”字样,进入夏令时功能,再按“时钟”键3秒,取消夏令时功能,时间自动减少1小时。
二、设置程序
1、按“设定”键,即可进入定时模式设置,屏幕上显示“1开” 。
2、按“小时” 、“分钟”和“星期” ,即第一组定时开始工作的时间,其中,按“星期”键,可选择不同星期组合模式。可根据需求,定时器只在设定的星期数中工作。
3、再按“设定”键,屏幕上显示“1关” ,即第一组定时关闭时间,时间设置参考“1开”设置方法。以此类推,最多可设置20组开与关。
4、设置完成后按“时钟”键返回当前时间。
注:
(1) 如果每天不需要设定20组,而其他组已经设定,必须按“清除”键,将多余各组的时间程序清除。
电子计时器这样调成倒计时:
倒计时功能
在时间显示的时候(也就是屏幕上面没有字符在闪烁的情况下) 按一下←按键 进入倒计时设置功能
然后通过设置按键和← →按键来设置倒计时的时 分 秒, 设置好后 按一下倒计时按键开始启动倒计时。
我已经完成了,下面是电路图和实际效果,你也试试,程序已经调试完成了!!!是使用秒表程序改编完成的,喜欢的话,点一个赞吧!希望能帮到你!!!
#include "reg52h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};//显示0~F的值
u8 ssec=100,sec=60,min=04;
u8 DisplayData[8];
sbit beep=P1^5;
unsigned long counter=0;
unsigned int c=0;
sbit p15=P1^5;
bit p;
/
函 数 名 : delay
函数功能 : 延时函数,i=1时,大约延时10us
/
void delay(u16 i)
{
while(i--);
}
/
函 数 名 : Timer0Init
函数功能 : 定时器0初始化
输 入 : 无
输 出 : 无
/
void Timer0Init()
{
TMOD=0X11;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0Xd8; //给定时器赋初值,定时10ms
TL0=0Xf0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器 -->启动定时器中断!
ET1=1;
TR1=1;
TH1=(65536-250)/256; //FC
TL1=(65536-250)%256;
}
/
函 数 名 : DigDisplay
函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示
/
void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//显示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//显示第7位
}
P0=DisplayData[i];//发送段码
delay(100); //间隔一段时间扫描
P0=0x00;//消隐-->撤销选中;
}
}
void datapros()
{
DisplayData[0]=smgduan[ssec%10];
DisplayData[1]=smgduan[ssec/10];
DisplayData[2]=0x40;
DisplayData[3]=smgduan[sec%10];
DisplayData[4]=smgduan[sec/10];
DisplayData[5]=0x40;
DisplayData[6]=smgduan[min%10];
DisplayData[7]=smgduan[min/10];
}
/
函 数 名 : main
函数功能 : 主函数
输 入 : 无
输 出 : 无
/
void main()
{
Timer0Init(); //定时器0初始化
while(1)
{
datapros();
DigDisplay();
}
}
/
函 数 名 : void Timer0() interrupt 1
函数功能 : 定时器0中断函数
输 入 : 无
输 出 : 无
/
void Timer0() interrupt 1
{
TH0=0Xd8; //给定时器赋初值,定时10ms
TL0=0Xf0;
ssec--;
if(ssec==00) //1s
{
ssec=100;
sec--;
if(sec==00)
{
sec=60;
min--;
if(min==-1)
{
P1=1;
ssec=0;sec=0;min=0;
TR0=0;
}
}
}
}
void Timer1() interrupt 3
{
TH1=(65536-250)/256; //FC
TL1=(65536-250)%256;
if(p!=1) p15=~p15;
if(p==1) p15=0;
c++;
if(c==250)
{
//c=0;
p=~p;
}
if(c>=250&&1695);
if(c==1696) c=0;
}
实验电子秒表使用方法如下
使用时,用拇指指关节或用食指第二指关节扣住按键,并将秒表靠住自己的胸部,不在任何的摆臂动作中完成按键。
按表时不要用力过猛,以防损坏机件;回表后,如秒针不指零,应记下其数值(零点读数),试验后从测量值中将其减去(注意符号);按键时尽量用正确的角度和适合的力量,不要按在按钮的边缘或斜角度按,避免卡住或损坏按钮。
计时开启后不要将秒表挂在脖子上或放在口袋内跑动,防止跑的过程中秒表按键与身体相撞,造成意外的停止或开启。
扩展资料
秒表主要有机械和电子两大类,电子表又可分为三按键和四按键两大类。绝大部分体育教师使用的多是电子秒表,机械秒表在很多地方已经成为历史。电子秒表是一种较先进的电子计时器,国产的电子秒一般都是利用石英振荡器的振荡频率作为时间基准,采用6位液晶数字显示时间,具有显示直观、读取方便、功能多等优点。
保持电池的定期更换,一般在显示变暗时即可更换,不要等电子秒表的电池耗尽再更换。电子秒表平时放置的环境要干燥、安全,做到防潮、防震、防腐蚀、防火等工作。避免在电子秒表上放置物品。没有把握的情况下,不要随意打开私自进行维修,应送专业人士进行维修。
我有一个大问题。我不知道如何用按钮停止计时器并用另一个按钮重新启动计时器。
这是我到目前为止的代码:
此代码是启动计时器的按钮的中断处理程序。我认为通过启用定时器是可能的,到目前为止它是有效的。
void EXTI0_1_IRQHandler(void)
{
if ((EXTI->PR & EXTI_PR_PR1) == EXTI_PR_PR1) / Check line 1 has triggered the IT /
{
EXTI->PR = EXTI_PR_PR1; / Clear the pending bit /
NVIC_EnableIRQ(TIM7_IRQn);
}
}
此代码是停止计时器的按钮的中断处理程序。这段代码不起作用,计时器一直亮着。
void EXTI4_15_IRQHandler(void)
{
if ((EXTI->PR & EXTI_PR_PR4) == EXTI_PR_PR4) / Check line 1 has triggered the IT /
{
EXTI->PR = EXTI_PR_PR4; / Clear the pending bit /
NVIC_DisableIRQ(TIM7_IRQn);
}
}
有没有人有一些提示或知道它必须是怎样的?
最佳答案
我认为“NVIC_DisableIRQ(TIM7_IRQn);”只需禁用计时器的中断但不停止计时器。
您可能需要:“TIM_Cmd(TIM7, DISABLE);”而不是“NVIC_DisableIRQ(TIM7_IRQn);”
以上就是关于采用AT89C51单片机设计一只电子秒表,倒计时(60~1每间隔1秒倒数)全部的内容,包括:采用AT89C51单片机设计一只电子秒表,倒计时(60~1每间隔1秒倒数)、科沃德电子定时器怎么设定有知道的回复,谢谢了、电子计时器怎么调成倒计时等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)