找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2747|回復(fù): 8
收起左側(cè)

小白一枚,STC15W408as單片機(jī)倒計(jì)時(shí)程序問題

[復(fù)制鏈接]
ID:823677 發(fā)表于 2020-9-29 20:27 | 顯示全部樓層 |閱讀模式
目標(biāo):?jiǎn)?dòng)時(shí)LED閃爍,倒計(jì)時(shí)15秒, 轉(zhuǎn)5秒、停5秒、再轉(zhuǎn)5秒   
遇到困難:LED不閃爍,倒計(jì)時(shí)15秒直接跳過去了,直接到蜂鳴器滴滴叫了,求助!


定時(shí)器初始化子程序  5毫秒
------------------------------------------------*/

單片機(jī)源程序如下:

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


void LEDshan()   //這里L(fēng)ED閃爍不了????不知道為什么
{        
    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;    //電機(jī)轉(zhuǎn)動(dòng)
          }
         if(sec>=5&&sec<=10)
         {DJ=1;   //電機(jī)停止
          }
         if(sec>10&&sec<=15)
         {DJ=0;   //電機(jī)轉(zhuǎn)動(dòng)
          }
           buzzer=0;
           sec=0;         
        }   


}


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

}


回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:584814 發(fā)表于 2020-9-30 09:12 | 顯示全部樓層
如果 MScnt==100 時(shí)反轉(zhuǎn)后 MScnt 歸零,那么 MScnt > 201 又如何判斷 ?
還有就這么點(diǎn)程序是不能正常運(yùn)行的,如有保密部分可以用星號(hào)或說明一下。
回復(fù)

使用道具 舉報(bào)

ID:146782 發(fā)表于 2020-9-30 12:00 | 顯示全部樓層
LEDshan();放的位置不對(duì),應(yīng)該要在while(1)里面。
回復(fù)

使用道具 舉報(bào)

ID:823677 發(fā)表于 2020-9-30 13:04 | 顯示全部樓層
man1234567 發(fā)表于 2020-9-30 09:12
如果 MScnt==100 時(shí)反轉(zhuǎn)后 MScnt 歸零,那么 MScnt > 201 又如何判斷 ?
還有就這么點(diǎn)程序是不能正常運(yùn)行 ...

沒有保密成分,因?yàn)槭亲约合雽?shí)現(xiàn)一個(gè)功能
回復(fù)

使用道具 舉報(bào)

ID:823677 發(fā)表于 2020-9-30 13:06 | 顯示全部樓層
滄興電子 發(fā)表于 2020-9-30 08:26
建議把 LEDshan();放到主程序while里面。你選擇這這個(gè)程序放在T0初始化后面,只檢測(cè)  if(MScnt==100)這個(gè)條 ...

請(qǐng)問電機(jī)轉(zhuǎn)動(dòng)那個(gè)呢?轉(zhuǎn)動(dòng)不了,沒有進(jìn)行倒計(jì)時(shí)
回復(fù)

使用道具 舉報(bào)

ID:239055 發(fā)表于 2020-10-4 07:21 來自手機(jī) | 顯示全部樓層
我有疑問,如果說5秒,電機(jī)轉(zhuǎn),5-10聽,10-15轉(zhuǎn),根據(jù)你寫的,我覺得把sec--改成++
回復(fù)

使用道具 舉報(bào)

ID:239055 發(fā)表于 2020-10-4 07:23 來自手機(jī) | 顯示全部樓層
就算你sec是從15開始倒退的,那么你的控制是有矛盾的
回復(fù)

使用道具 舉報(bào)

ID:852300 發(fā)表于 2020-12-5 11:08 | 顯示全部樓層
while(1)后面還加不少語句!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表