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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2979|回復: 8
打印 上一主題 下一主題
收起左側

小白一枚,STC15W408as單片機倒計時程序問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:823677 發表于 2020-9-29 20:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
目標:啟動時LED閃爍,倒計時15秒, 轉5秒、停5秒、再轉5秒   
遇到困難:LED不閃爍,倒計時15秒直接跳過去了,直接到蜂鳴器滴滴叫了,求助!


定時器初始化子程序  5毫秒
------------------------------------------------*/

單片機源程序如下:

void initT0()
{
            AUXR |= 0x80;                //定時器時鐘1T模式
            TMOD &= 0xF0;                //設置定時器模式
           TH0=(65536-55296)/256; //5ms
           TL0=(65536-55296)%256;
            TF0 = 0;       //清除TF0標志
               EA = 1;
               ET0 = 1;
               TR0 = 1;        //定時器0開始計時         
}


void LEDshan()   //這里LED閃爍不了????不知道為什么
{        
    if(MScnt==100)
      {
      LED1 = ~LED1;
      LED2 = ~LED2;
      MScnt=0;
      }
}


void main()
{         
        initT0();
        LEDshan();
        while(1)   
   {  
            
         if(sec<=15)
      {
          TR0=1;
          if(sec<5)
          {DJ=0;    //電機轉動
          }
         if(sec>=5&&sec<=10)
         {DJ=1;   //電機停止
          }
         if(sec>10&&sec<=15)
         {DJ=0;   //電機轉動
          }
           buzzer=0;
           sec=0;         
        }   


}


/* 定時器0中斷服務函數 */
void T0int( ) interrupt 1
{  
        TL0 = 0x00;                //設置定時初值
        TH0 = 0x28;                //設置定時初值
                LEDSMGscan();
                KeyScan();
                MScnt++;       //中斷次數計數值加1
    if (MScnt > 201)  //中斷200次即1秒
    {        
        MScnt = 0;      //清零計數值以重新開始下1秒計時
                sec--;
    }

}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:748096 發表于 2020-9-30 08:26 | 只看該作者
建議把 LEDshan();放到主程序while里面。你選擇這這個程序放在T0初始化后面,只檢測  if(MScnt==100)這個條件一遍,就跳過了,即使條件滿族也不會閃爍,何況該條件有99.99%的概率條件不會滿足。
回復

使用道具 舉報

板凳
ID:584814 發表于 2020-9-30 09:12 | 只看該作者
如果 MScnt==100 時反轉后 MScnt 歸零,那么 MScnt > 201 又如何判斷 ?
還有就這么點程序是不能正常運行的,如有保密部分可以用星號或說明一下。
回復

使用道具 舉報

地板
ID:146782 發表于 2020-9-30 12:00 | 只看該作者
LEDshan();放的位置不對,應該要在while(1)里面。
回復

使用道具 舉報

5#
ID:823677 發表于 2020-9-30 13:04 | 只看該作者
man1234567 發表于 2020-9-30 09:12
如果 MScnt==100 時反轉后 MScnt 歸零,那么 MScnt > 201 又如何判斷 ?
還有就這么點程序是不能正常運行 ...

沒有保密成分,因為是自己想實現一個功能
回復

使用道具 舉報

6#
ID:823677 發表于 2020-9-30 13:06 | 只看該作者
滄興電子 發表于 2020-9-30 08:26
建議把 LEDshan();放到主程序while里面。你選擇這這個程序放在T0初始化后面,只檢測  if(MScnt==100)這個條 ...

請問電機轉動那個呢?轉動不了,沒有進行倒計時
回復

使用道具 舉報

7#
ID:239055 發表于 2020-10-4 07:21 來自觸屏版 | 只看該作者
我有疑問,如果說5秒,電機轉,5-10聽,10-15轉,根據你寫的,我覺得把sec--改成++
回復

使用道具 舉報

8#
ID:239055 發表于 2020-10-4 07:23 來自觸屏版 | 只看該作者
就算你sec是從15開始倒退的,那么你的控制是有矛盾的
回復

使用道具 舉報

9#
ID:852300 發表于 2020-12-5 11:08 | 只看該作者
while(1)后面還加不少語句!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表