找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2742|回复: 6
收起左侧

初学单片机求解

[复制链接]
ID:138144 发表于 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;
                }


}

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

回复

使用道具 举报

ID:138144 发表于 2016-9-19 21:50 | 显示全部楼层
P2=0x02;时第一颗灯还是亮的?怎么回事啊?
回复

使用道具 举报

ID:57657 发表于 2016-9-20 07:17 | 显示全部楼层
延迟程序里的循环语句哪里去了?
回复

使用道具 举报

ID:138144 发表于 2016-9-20 10:33 | 显示全部楼层
npn 发表于 2016-9-20 07:17
延迟程序里的循环语句哪里去了?

我只是点亮某一颗LED,不需要延迟啊!
回复

使用道具 举报

ID:57657 发表于 2016-9-20 19:19 | 显示全部楼层
sz15207554653 发表于 2016-9-19 21:50
P2=0x02;时第一颗灯还是亮的?怎么回事啊?

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

回复

使用道具 举报

ID:67175 发表于 2016-9-20 19:50 | 显示全部楼层
没有原理图吗?   高电平亮还是低电平亮;  如果是低电平点亮的话,你的P2=0xc0;  二进制位1100 0000,除了P2.7 P2.6  其余的都是低电平,  while(1)中,P2.0=1; 意味着此时  P2=(1100 0001)B;
回复

使用道具 举报

ID:21069 发表于 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);
}

结果如下图
oooo.jpg

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

评分

参与人数 4黑币 +120 收起 理由
Sawardeakar + 15
刀刀见红 + 35 回帖助人的奖励!
areyouok + 35 很给力!
shuisheng + 35 很给力!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表