找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1872|回复: 6
打印 上一主题 下一主题
收起左侧

初学单片机求解

[复制链接]
跳转到指定楼层
楼主
/***********************************************************************
                          点亮LED灯
***********************************************************************/
#include<reg52.h>

sbit LED0=P2^0;

void Delay10ms(unsigned int ms);

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


}

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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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,不需要延迟啊!
回复

使用道具 举报

5#
ID:57657 发表于 2016-9-20 19:19 | 只看该作者
sz15207554653 发表于 2016-9-19 21:50
P2=0x02;时第一颗灯还是亮的?怎么回事啊?

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

回复

使用道具 举报

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

使用道具 举报

7#
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);
}

结果如下图


结果是除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 单片机教程网

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