打印

为什么led灯不循环走动?

[复制链接]
1958|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
learnc51|  楼主 | 2017-11-7 16:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,num;
sbit duan=P2^2;
sbit wei=P2^3;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint);
void InitTimer();
void main()
{
        num=0;
        InitTimer();
        temp=0xfe;
        P1=temp;
        duan=1;
        P0=table[0];
        duan=0;
        wei=1;
        P0=0x00;
        wei=0;
        while(1)
        {
                delay(1000);
                temp=_crol_(temp,1);
                P1=temp;
        }
}
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void InitTimer()
{
    TMOD = 0x01;
    TH0 = (65536-50000)/256;
    TL0 = (65536-50000)%256;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
void Timer() interrupt 1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   aa++;
        if(aa==40)
                {
                        aa=0;
                        num++;
                        if(num==16)
                                num=0;
                        duan=1;
                        P0=table[num];
                        duan=0;
                }
}

相关帖子

沙发
jyzhzn| | 2017-11-7 16:41 | 只看该作者
本帖最后由 jyzhzn 于 2017-11-7 16:46 编辑

主函数中, while以上各行,只在启动时运行一次,你的输出也只运行一次,想循环,输出要放在 while中


使用特权

评论回复
板凳
learnc51|  楼主 | 2017-11-7 16:55 | 只看该作者
jyzhzn 发表于 2017-11-7 16:41
主函数中, while以上各行,只在启动时运行一次,你的输出也只运行一次,想循环,输出要放在 while中[/back ...

输出一次后,一直在while中执行循环左移啊

使用特权

评论回复
地板
dirtwillfly| | 2017-11-7 16:57 | 只看该作者
你的系统delay(1000)是延时多久?
增加到延时一秒看看

使用特权

评论回复
5
learnc51|  楼主 | 2017-11-7 17:04 | 只看该作者
dirtwillfly 发表于 2017-11-7 16:57
你的系统delay(1000)是延时多久?
增加到延时一秒看看

大概0.9秒

使用特权

评论回复
6
jyzhzn| | 2017-11-7 17:17 | 只看该作者
learnc51 发表于 2017-11-7 16:55
输出一次后,一直在while中执行循环左移啊

sbit duan=P2^2;
sbit wei=P2^3;

这两句是干什么用?


是不是输出锁存使能?


while循环中没了它俩,怎么输出?

使用特权

评论回复
7
xlong_06| | 2017-11-7 17:36 | 只看该作者
看着没有啥问题的,你可以先把你的数码管显示程序去掉,先一个个保证功能再加,而且保证自己的硬件可靠。

使用特权

评论回复
8
learnc51|  楼主 | 2017-11-7 18:13 | 只看该作者
jyzhzn 发表于 2017-11-7 17:17
sbit duan=P2^2;
sbit wei=P2^3;

循环中只是led灯的循环 左移命令啊,那两句是定义数码管的段和位

使用特权

评论回复
9
jyzhzn| | 2017-11-7 18:29 | 只看该作者
本帖最后由 jyzhzn 于 2017-11-7 18:35 编辑
learnc51 发表于 2017-11-7 18:13
循环中只是led灯的循环 左移命令啊,那两句是定义数码管的段和位

是我看贴不仔细

我猜一下,是不是最后P1口的LED全亮了?

使用特权

评论回复
10
learnc51|  楼主 | 2017-11-8 08:46 | 只看该作者
jyzhzn 发表于 2017-11-7 18:29
是我看贴不仔细

我猜一下,是不是最后P1口的LED全亮了?

一开始只有P1^0亮;
最后我分开调试led和数码管,现在正常了,不知道一开始什么原因

使用特权

评论回复
11
emco| | 2018-2-18 15:57 | 只看该作者
中断里查一查

使用特权

评论回复
12
xichandoujigu| | 2018-2-24 22:51 | 只看该作者
是不是需要上拉电阻?其实我也很菜。

使用特权

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

本版积分规则

3

主题

12

帖子

0

粉丝