打印
[51单片机]

我这个灯为什么只闪一次就灭,跪求大神帮忙

[复制链接]
905|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1349236685|  楼主 | 2015-1-13 12:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int

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

uint i,j,x;
uchar n,y,num;

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

        void time0() interrupt 1
        {
               
            TH0=(65536-50000)/256;
            TL0=(65536-50000)%256;
            num++;
                if(num==20)
                {
                        num=0;
                }
       
        }

        /* void delay(x)
  {
          for(i=0;i<100;i++)
        for(j=0;j<x;j++);
  }        */

void main()
{
        init();
        TMOD=0X11;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;
        EA=1;
        TR0=1;
       
    while(1)
        {
                if(num==10)
            {
                        led=1;
                        TH0=(65536-50000)/256;
                    TL0=(65536-50000)%256;
               
                       
                }
                if(num==20)
            {
                        num=0;
                        led=0;
                        TH0=(65536-50000)/256;
                    TL0=(65536-50000)%256;
                        num=0;
                       
                }
       
        }
}

相关帖子

沙发
JY-DX-JY| | 2015-1-13 12:43 | 只看该作者
if(num==20)
                {
                        num=0;
                }
这儿的原因,一到20就归0啦。
你写成小于10灯亮,大于10灯灭。

使用特权

评论回复
板凳
1349236685|  楼主 | 2015-1-13 13:32 | 只看该作者
JY-DX-JY 发表于 2015-1-13 12:43
if(num==20)
                {
                        num=0;

我想让他一闪一闪的,归零之后应该反复亮灭吧

使用特权

评论回复
地板
JY-DX-JY| | 2015-1-13 14:16 | 只看该作者
因为在中断里到20就归零了,所以主程序检测不到=20.
num++;
                if(num==20)
                {
                        num=0;
                }
就是说加到20,判断=20,num=0,中断退出以后,num=0,不是20了。

使用特权

评论回复
5
1349236685|  楼主 | 2015-1-13 14:48 | 只看该作者
哦,明白,谢谢您,大神~~

使用特权

评论回复
6
ayb_ice| | 2015-1-13 15:12 | 只看该作者
void main()
{
        init();
        TMOD=0X11;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;
        EA=1;
        TR0=1;

        while(1)
        {
                if(num < 10){
                        led=1;
                }else{
                        led=0;
                }
        }
}

使用特权

评论回复
7
1349236685|  楼主 | 2015-1-14 12:24 | 只看该作者
本帖最后由 1349236685 于 2015-1-14 12:29 编辑
ayb_ice 发表于 2015-1-13 15:12
void main()
{
        init();

好,写的真简洁明了~~  但是灯只能亮一次,不过又学习了一种新的思路,谢谢

使用特权

评论回复
8
ayb_ice| | 2015-1-14 13:32 | 只看该作者
1349236685 发表于 2015-1-14 12:24
好,写的真简洁明了~~  但是灯只能亮一次,不过又学习了一种新的思路,谢谢 ...

怎么会只亮一次呢,加上中断代码就可以了

void time0() interrupt 1
        {
               
            TH0=(65536-50000)/256;
            TL0=(65536-50000)%256;
            num++;
                if(num==20)
                {
                        num=0;
                }
        
        }

使用特权

评论回复
9
mcuzone| | 2015-1-14 13:45 | 只看该作者
多画画流程图,仔细看看程序逻辑

使用特权

评论回复
10
1349236685|  楼主 | 2015-1-17 12:40 | 只看该作者
ayb_ice 发表于 2015-1-14 13:32
怎么会只亮一次呢,加上中断代码就可以了

void time0() interrupt 1

恩  是 谢谢您~~

使用特权

评论回复
11
1349236685|  楼主 | 2015-1-17 12:40 | 只看该作者
mcuzone 发表于 2015-1-14 13:45
多画画流程图,仔细看看程序逻辑

恩 好~~

使用特权

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

本版积分规则

33

主题

71

帖子

0

粉丝