标题: 初学单片机求解 [打印本页]

作者: sz15207554653    时间: 2016-9-19 21:48
标题: 初学单片机求解
/***********************************************************************
                          点亮LED灯
***********************************************************************/
#include<reg52.h>

sbit LED0=P2^0;

void Delay10ms(unsigned int ms);

void main()
{
    P2=0xc0;
    while(1)
            {
                   LED0=1;
                }


}

为啥第一颗灯老是亮,为什么?小虾一枚


作者: sz15207554653    时间: 2016-9-19 21:50
P2=0x02;时第一颗灯还是亮的?怎么回事啊?
作者: npn    时间: 2016-9-20 07:17
延迟程序里的循环语句哪里去了?
作者: sz15207554653    时间: 2016-9-20 10:33
npn 发表于 2016-9-20 07:17
延迟程序里的循环语句哪里去了?

我只是点亮某一颗LED,不需要延迟啊!
作者: npn    时间: 2016-9-20 19:19
sz15207554653 发表于 2016-9-19 21:50
P2=0x02;时第一颗灯还是亮的?怎么回事啊?

0x02 二进制等于 10, P2.0等于0也就是GND LED另一端接的VCC 当然要亮。
写个流水灯程序之类的,那个灯亮灭不能改变则是那个IO口坏了或线路有短路或开路。


作者: 李志博32    时间: 2016-9-20 19:50
没有原理图吗?   高电平亮还是低电平亮;  如果是低电平点亮的话,你的P2=0xc0;  二进制位1100 0000,除了P2.7 P2.6  其余的都是低电平,  while(1)中,P2.0=1; 意味着此时  P2=(1100 0001)B;
作者: jinsheng7533967    时间: 2019-2-2 01:25
其实你范错就只是敲错一个字符,下面看正确的:

#include<reg52.h>

sbit LED0=P2^0;

void Delay10ms(unsigned int ms);

void main()
{
    P2=0x00; //P2口全置低//P2=0xC0;这是你的,一个字符之差,估计你超PDF上的资料没看清所致

    while(1)
        {
                LED0=1;
        }       
}

我们再来谈谈,开机后没给P1,P2,P3,P0值时他们是高电平还是低电平

#include<reg52.h>
sbit LED0=P2^0;

void Delay10ms(unsigned int ms);

void main()
{
   
    while(1);
}

结果如下图


结果是除P0外全都是高电平,
所以,你只要P2口只亮一个灯,就得先将P2口全部置低,这样当你LED0=1时才亮一个灯
至于P0口为什么不是高电平,那是因为他内部是开漏设计




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