欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 12M,89C52單片機,1602顯示,定時器倒計時兩種時間單位問題 [打印本頁]

作者: 許許許    時間: 2020-4-5 16:42
標題: 12M,89C52單片機,1602顯示,定時器倒計時兩種時間單位問題
請問各位大神,我用一個定時器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開啟,即按鍵掃描開啟
                }
}
作者: 許許許    時間: 2020-4-5 16:50
而且前一段時間會不停循環倒計時,改了之后還是一樣
作者: wulin    時間: 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再次開啟
                }
        }
}
作者: 許許許    時間: 2020-4-6 15:52
wulin 發表于 2020-4-6 06:20
以兩種時間單位(s/ms)倒計時沒有任何技術問題,不過以1ms周期刷新LCD不現實。就算LCD能完成但肉眼根本無 ...

多謝老哥,有個問題,我按你的設置,但是倒計時跑得很快,差不多正常一秒十分之一,晶振設置確實是12M,仿真跑得很快
作者: 許許許    時間: 2020-4-6 20:23
許許許 發表于 2020-4-6 15:52
多謝老哥,有個問題,我按你的設置,但是倒計時跑得很快,差不多正常一秒十分之一,晶振設置確實是12M, ...

解決了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1