打印

为什么我的灯闪烁不正常

[复制链接]
749|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1349236685|  楼主 | 2015-1-17 12:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想让我的灯闪灭五次,关闭led一会(比如1s或者1min),再闪灭五次。
可是现在情况是先闪五次,然后灯应该亮的第一次灭的,然后亮四次,之后一直这么循环。。。关闭led那段程序不能启动
#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int

sbit led=P2^7;
sbit jum=P3^2;

uint x;
uchar n,num,m,a;

        void init()
        {
                num=0;
            led=0;
            
        }       

        void time0() interrupt 1
        {
                uchar m=0;
            TH0=(65536-50000)/256;
            TL0=(65536-50000)%256;
            num++;      //亮灭时间判断
                a++;    //亮灭之后,led灭几秒钟等待时控制            

                if(m==0) //led亮灭
               
            {
                        if(num==10)  //led亮灭时灭
                    {
                                led=1;
                       
                        }
                    if(num==20)    //led亮灭时亮
                    {
                                num=0;
                                led=0;                                       
                                n++;                     
                       
                        }
                        if(n==5)    //亮五次之后关闭led
                        {
                       
                                n=0;
                                led=1;
                                m=1;   

                        }
                }
       
        }


void main()
{
        init();
        TMOD=0X11;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;
        EA=1;
        TR0=1;
       
  
        while(1)
    {
            if(m==1)          //关闭led一段时间
                {
                        led=1;
                        TH0=(65536-50000)/256;
                    TL0=(65536-50000)%256;
                        a++;
               
                        if(a==12000)
                        {
                                   a=0;
                                m=0;
               
               
                        }
                }       
    }
                 

}

相关帖子

沙发
cainiao_123| | 2015-1-17 13:01 | 只看该作者
为何在主程序中给定时器赋初始值?

使用特权

评论回复
板凳
1349236685|  楼主 | 2015-1-17 13:06 | 只看该作者
cainiao_123 发表于 2015-1-17 13:01
为何在主程序中给定时器赋初始值?

主程序不需要  我看的一个视频就这么讲的赋值的。。。

使用特权

评论回复
地板
cainiao_123| | 2015-1-17 13:34 | 只看该作者
本帖最后由 cainiao_123 于 2015-1-17 13:37 编辑
1349236685 发表于 2015-1-17 13:06
主程序不需要  我看的一个视频就这么讲的赋值的。。。

如果没有开定时器中断就可以这样赋值,否则不用这样

另:
uchar n,num,m,a;
......
a++;
      if(a==12000)
......

这里的a 永远也不会等于12000

使用特权

评论回复
5
cainiao_123| | 2015-1-17 13:48 | 只看该作者
1349236685 发表于 2015-1-17 13:06
主程序不需要  我看的一个视频就这么讲的赋值的。。。

void time0() interrupt 1
        {
                uchar m=0;
........................
                if(m==0)
                {....}

每次进中断,m 都是0 ,覆盖掉全局变量 m
.....
太混乱了

使用特权

评论回复
6
1349236685|  楼主 | 2015-1-19 11:58 | 只看该作者
cainiao_123 发表于 2015-1-17 13:48
void time0() interrupt 1
        {
                uchar m=0;

恩,我是初学者,刚才您说的问题我都改了··谢谢您  不过还是那个现象  程序里还有问题呢~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

71

帖子

0

粉丝