找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2481|回复: 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--;
    }

}


回复

使用道具 举报

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)里面。
回复

使用道具 举报

ID:823677 发表于 2020-9-30 13:04 | 显示全部楼层
man1234567 发表于 2020-9-30 09:12
如果 MScnt==100 时反转后 MScnt 归零,那么 MScnt > 201 又如何判断 ?
还有就这么点程序是不能正常运行 ...

没有保密成分,因为是自己想实现一个功能
回复

使用道具 举报

ID:823677 发表于 2020-9-30 13:06 | 显示全部楼层
沧兴电子 发表于 2020-9-30 08:26
建议把 LEDshan();放到主程序while里面。你选择这这个程序放在T0初始化后面,只检测  if(MScnt==100)这个条 ...

请问电机转动那个呢?转动不了,没有进行倒计时
回复

使用道具 举报

ID:239055 发表于 2020-10-4 07:21 来自手机 | 显示全部楼层
我有疑问,如果说5秒,电机转,5-10听,10-15转,根据你写的,我觉得把sec--改成++
回复

使用道具 举报

ID:239055 发表于 2020-10-4 07:23 来自手机 | 显示全部楼层
就算你sec是从15开始倒退的,那么你的控制是有矛盾的
回复

使用道具 举报

ID:852300 发表于 2020-12-5 11:08 | 显示全部楼层
while(1)后面还加不少语句!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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