您的位置 首页 主动

定时器初始化之后,无法更改其值?

昨天有同学问我有一个关于单片机的功能如何实现:1:假设按下KEY1,启动30S倒数途中按下KEY2,跳去执行其他函数,30S倒数取消2:按下KEY1,启

昨日有同学问我有一个关于单片机的功用怎么完成:

1:
假定按下KEY1,发动30S倒数
途中按下KEY2,跳去履行其他函数,30S倒数撤销
2:
按下KEY1,发动30S倒数
途中按下KEY2,跳去其他函数履行一起,不影响30S倒数
进过问询,归于要求1,而且运用矩阵键盘
风趣的是,我认为要求2更简单完成,成果要求2一下就做到了,可是要求1想了好久,问题在于:按下KEY2履行其他程序后,按下KEY1不是从头进行倒数。我总想着是否可以把守时器从头赋值,试过了修正各个相关寄存器,十分奇怪的是,初始化之后,守时器值好像就无法更改?上网查了查,查不到相关的疑问。
可是就在一会儿,答案一闪而过,终究程序如下(省去了大部分程序和变量的界说等):
void main()
{
init();//守时中止的相关初始化
while(1)
{
keyscan();
if (1 == keynum)
{
disp();//数码管显现倒计时状况
LED = 1;
keyscan();
}
if (2 == keynum)
{
LED = 0;
keyscan();
time = 30;//便是这一句,完成了了从头倒计时
}
}
}
void tim1(void) interrupt 1
{
TH0 = (65535-62484)/256;
TL0 = (65535-62484)%6;
timer++; //由于守时器无法完成一秒守时,用一个变量完成
if (timer >= 16)
{
timer = 0;
time–;
if( time <= 0)
time = 30; //用于时刻显现
}
}
解决问题的办法,便是把显现的数字从头赋值为30,不要管守时器现在的状况是怎么样,由于完成作用便是给人看的,只需观察到的表象符合要求就可以,编程的工作,往往便是这么山重水复疑无路,柳暗花明又一村。尽管不清楚是否影响守时的精度,但这种转化视点思考问题的思路确实是言必有中。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/256750.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部