yfx2021 发表于 2021-11-5 10:32:19

51单片机流水灯问题

按照攻略119页的代码可以正常实现依次点亮一个led,但是修改后,就变成逐渐点亮每一个灯。想问一下,备注错的那种写法为啥不对了,仿真调试,观察外设p2口是对的状态,下载就不对。代码如下:
#include<reg52.h>
#define led P2

typedef unsigned char u8;
typedef unsigned int u16;

void delay_10us(u16 n)
{
        while(n--);
}

void main()
{
        u8 i;
       
        while(1)
        {
                for(i=0;i<8;i++)
                {
                        //led=~(0x01<<i);                        //对
                        led=0xfe<<i;                           //错
                        delay_10us(50000);
       
                }
        }
}

yfx2021 发表于 2021-11-5 10:43:24

应该是向左移位后低位补0,这点忽略了
仿真确实不一定和实际相等

kkk_189 发表于 2021-11-5 22:22:07

led=0xfe<<i;假如i=1; 1111 1110 <<1 ==1111 1100
~(0x01<<i); 0x01<<1-> 0000 0001 <<1 == 0000 0010 取反后是11111101
页: [1]
查看完整版本: 51单片机流水灯问题