找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1394|回复: 4
打印 上一主题 下一主题
收起左侧

12M,89C52单片机,1602显示,定时器倒计时两种时间单位问题

[复制链接]
跳转到指定楼层
楼主
ID:693676 发表于 2020-4-5 16:42 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问各位大神,我用一个定时器1,按键设置倒计时一段时间,时间单位是秒,时间到继电器断开;继电器一断马上倒计时另一段时间,时间单位是豪秒,时间到继电器吸合。请问样子思路可行吗,我写了定时器1程序,但是仿真只会倒计时一段时间,后面不会倒计时了,我是初学者,写的程序很简单,请单片机大神帮帮忙
/*------------------------------------------------
                 定时器1中断子程序
------------------------------------------------*/
void Timer1_isr(void) interrupt 3
{
  TH1=(65536-50000)/256;//定时器装初值
  TL0=(65536-50000)%256;
          count++; //中断次数累加
        if(count==20) //20次50毫秒为1秒
        {
                count=0;
                Pon--;                // 单片机工作默认继电器闭合,Pon上电时间倒计时,单位秒
                write_twodate(9,Pon);        //变化送到LCD显示
        }
        if(Pon==0)
        {
         JDQ=0;                  //继电器断开
         count++;                   //继电器断电后,Poff掉电时间倒计时
        }
        if(count==1)         //1次为1毫秒,这里是错误的,实际为50ms,还没想到办法转换不同单位
        {
                count=0;
                Poff--;          //Poff掉电时间倒计时,单位毫秒
                write_onedate(10,Poff);        //变化送到LCD显示
        }
         if(Poff==0)
         {
            JDQ=1;                //继电器吸合
            TR1=0;      //定时器1关闭,即倒计时关闭
                TR0=1;           // 定时器0开启,即按键扫描开启
                }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:693676 发表于 2020-4-5 16:50 来自手机 | 只看该作者
而且前一段时间会不停循环倒计时,改了之后还是一样
回复

使用道具 举报

板凳
ID:213173 发表于 2020-4-6 06:20 | 只看该作者
以两种时间单位(s/ms)倒计时没有任何技术问题,不过以1ms周期刷新LCD不现实。就算LCD能完成但肉眼根本无法分辨。给你改为1ms中断周期并增加一个标志位allow用于区分两种时间单位的倒计时,至于LCD显示ms问题只能呵呵了。
void Timer1_isr(void) interrupt 3
{
        TH1=(65536-1000)/256;//定时器装初值
        TL0=(65536-1000)%256;
        if(allow==0)
        {
                count++; //中断次数累加
                if(count==1000) //1000次1毫秒为1秒
                {
                        count=0;
                        Pon--;                // 单片机工作默认继电器闭合,Pon上电时间倒计时,单位秒
                        write_twodate(9,Pon);        //变化送到LCD显示
                        if(Pon==0)
                        {
                                JDQ=0;                  //继电器断开
                                allow=1;
                        //        count++;                   //继电器断电后,Poff掉电时间倒计时
                        }
                }
        }
        else
        {       
//                if(count==1)         //1次为1毫秒,这里是错误的,实际为50ms,还没想到办法转换不同单位
//                {
//                        count=0;
                Poff--;          //Poff掉电时间倒计时,单位毫秒
                write_onedate(10,Poff);        //变化送到LCD显示
//                }
                if(Poff==0)
                {
                        JDQ=1;                //继电器吸合
                        TR1=0;      //定时器1关闭,即倒计时关闭
                        TR0=1;           // 定时器0开启,即按键扫描开启

                        allow=0;//到此一轮倒计时结束,等待定时器1再次开启
                }
        }
}
回复

使用道具 举报

地板
ID:693676 发表于 2020-4-6 15:52 来自手机 | 只看该作者
wulin 发表于 2020-4-6 06:20
以两种时间单位(s/ms)倒计时没有任何技术问题,不过以1ms周期刷新LCD不现实。就算LCD能完成但肉眼根本无 ...

多谢老哥,有个问题,我按你的设置,但是倒计时跑得很快,差不多正常一秒十分之一,晶振设置确实是12M,仿真跑得很快
回复

使用道具 举报

5#
ID:693676 发表于 2020-4-6 20:23 来自手机 | 只看该作者
许许许 发表于 2020-4-6 15:52
多谢老哥,有个问题,我按你的设置,但是倒计时跑得很快,差不多正常一秒十分之一,晶振设置确实是12M, ...

解决了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表