标题: 51单片机流水灯程序,看哪里出错了,灯全暗新手求解答 [打印本页]

作者: inception    时间: 2015-7-13 21:37
标题: 51单片机流水灯程序,看哪里出错了,灯全暗新手求解答
51单片机流水灯程序,看哪里出错了,灯全暗
#include <reg52.h>
typedef unsigned int  u16;
typedef unsigned char u8;

void delay(u16 num)
{
        u16 x,y;
        for(x=num; x>0; x--)
                for(y=110; y>0; y--)
                {
                        ;//延时1ms
                }
}
void main(void)
{
       u8 n,temp_val;
                P1=0xFF;//LED输出模式
                temp_val=0xFF;

        while(1)
        {

                for(n=1;n<8;n++)
                {
                temp_val = (temp_val << 1) || (0x01);
                P1=temp_val;
                delay(500);
                }

        }
}


作者: liaolinhui    时间: 2015-7-13 23:15
temp_val = (temp_val << 1) || (0x01);的或改成与,因为用或的话temp_val 会一直是0xff
作者: 电子爱好者life    时间: 2015-7-13 23:30
逻辑或只是用于判断,即只有0和1,按位或才是用于计算。temp = 0xff,左移一位变成0xfe,在和0x01 逻辑或变成了0x01,你说的全部不亮,我就不知道原因,因为不知道你的硬件电路是怎样的!如果改成和 0x01 按位或 temp一直为0xff,如果是共阳,全不亮是正确的。但是你写的是逻辑或,结果只能是0x01 。
作者: 电子爱好者life    时间: 2015-7-13 23:35
liaolinhui 发表于 2015-7-13 23:15
temp_val = (temp_val

改成逻辑与和按位与都不能实现
作者: inception    时间: 2015-7-14 10:39
谢各位,明白了, 初值设成0xfe,左移后在按位或就可以了
作者: Ahaopiqi    时间: 2015-7-14 11:35
temp_val = (temp_val << 1) || (0x01);
这句话,错了,
把||改成&就可以了
作者: 云帝辰    时间: 2015-7-14 16:07
temp_val=0xFF;    temp_val = (temp_val << 1) || (0x01);  会一直是1  当然全灭了
作者: dingmingzhou    时间: 2015-7-20 18:25
你那程序,与也罢,或也罢(你用“||"或常数?????!!!!)都不行的,不好用的!你试试这个:
#include <reg52.h>
#include <intrins.h>
typedef unsigned int  u16;
typedef unsigned char u8;

void delay(u16 num)
{
        u16 x,y;
        for(x=num; x>0; x--)
          for(y=110; y>0; y--);
}
void main(void)
{
       u8 temp_val;
        temp_val=0x01;
        while(1)
        {               
                temp_val = _crol_(temp_val,1);   //左移
               //        temp_val = _cror_(temp_val,1);           //右移
                            P1= temp_val ;
                delay(5000);

                }
}


作者: 段水青云    时间: 2015-7-20 19:31
再好好分析下,慢慢来
作者: 段水青云    时间: 2015-7-20 19:34
学习单片机重要的是不要急,慢慢来
作者: wjz891120    时间: 2015-7-21 11:13
设置初值
作者: z67230101    时间: 2015-7-23 11:36
temp_val = (temp_val << 1) || (0x01);
这句有错。运算符用的 有误
作者: future001    时间: 2015-7-23 11:39
temp_val=0xFF;    temp_val = (temp_val << 1) || (0x01);  会一直是1  当然全灭了

作者: 438226465    时间: 2015-7-24 14:52
编程序一定要细心,错一步都不行的!
作者: 438226465    时间: 2015-7-24 14:52
慢慢来,编多了就会了
作者: yaobaige    时间: 2015-7-24 15:06
temp_val=0xFF;    temp_val = (temp_val << 1) || (0x01);  会一直是1  当然全灭了
作者: vianowu    时间: 2015-7-24 15:10
temp_val=0xFF;    temp_val = (temp_val << 1) || (0x01); //注意所用的运算符号,和运算结果
作者: 12346    时间: 2015-7-24 16:08
454654
作者: 565    时间: 2015-7-25 14:54
我也有这样错误
作者: 问问123    时间: 2015-7-25 16:32
根据你的仿真图,看是高电平亮还是低电平亮,再决定使用0xfe还是0x01
作者: 芥末    时间: 2015-9-3 21:48
去掉||
作者: sawyer_bai    时间: 2015-9-4 09:18
初始值就是FF,你后面||还是0x01,最后的结果就是永远都是FF,要是你的LED另一端接的是VCC,那可不就一直全暗么
作者: HuM    时间: 2015-9-4 11:11

temp_val = (temp_val << 1) && (0x01);
作者: 袁诗奎    时间: 2015-9-5 09:18
你的灯是高电平 亮还是低电平亮的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1