找回密码
 立即注册

QQ登录

只需一步,快速开始

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

刚入门的新手关于sbit定义的问题。

[复制链接]
跳转到指定楼层
楼主
在简单的点亮led灯中

我把sbit d0=P0^0;用d0运行程序时,程序下载到单片机上没作用;

但是直接用P0=0x01;就可以点亮led,究竟是哪里不对呢?
希望知道的人指导指导我。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:97948 发表于 2016-5-24 15:32 来自手机 | 只看该作者
单片机上电时,4个io口默认都是高电平,建议检查确定LED负极接到p.1.0口
回复

使用道具 举报

板凳
ID:97948 发表于 2016-5-24 15:38 来自手机 | 只看该作者
姜万孟55 发表于 2016-5-24 15:32
单片机上电时,4个io口默认都是高电平,建议检查确定LED负极接到p.1.0口

如果只是简单的LED点亮,直接另LED=0,
如果想让LED不断点亮熄灭,LED=0,延时,LED=1。
回复

使用道具 举报

地板
ID:119742 发表于 2016-5-24 21:38 | 只看该作者
姜万孟55 发表于 2016-5-24 15:38
如果只是简单的LED点亮,直接另LED=0,
如果想让LED不断点亮熄灭,LED=0,延时,LED=1。

不需要定义sbit LED=P0^0;吗?
回复

使用道具 举报

5#
ID:39386 发表于 2016-5-26 14:47 | 只看该作者
应该是这句Sbit d0=P0^0;有问题。大小写,0与字母0的区别等
回复

使用道具 举报

6#
ID:119742 发表于 2016-5-26 20:59 | 只看该作者
huangfuxi2002 发表于 2016-5-26 14:47
应该是这句Sbit d0=P0^0;有问题。大小写,0与字母0的区别等

s要大写吗?我去试试。
回复

使用道具 举报

7#
ID:39386 发表于 2016-5-27 12:32 | 只看该作者
s不用大写的。
回复

使用道具 举报

8#
ID:39386 发表于 2016-5-28 08:04 | 只看该作者
问题解决了没有
回复

使用道具 举报

9#
ID:119742 发表于 2016-5-28 17:37 | 只看该作者

没有。我又遇到新问题了。。。。。。我定义P0口#define GPIO_DIG P0
#include<reg51.h>
#define DPIO_DIG P0
unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(void)
{
        while(1)
        {
//                GPIO_DIG=~DIG_CODE[0];
                P0=~DIG_CODE[0];
        }
}
变量DPIO_DIG不能用,但是直接用P0口可以用。
不知道哪里错了。
回复

使用道具 举报

10#
ID:119742 发表于 2016-5-28 17:40 | 只看该作者

没有,还遇到新的问题。
#include<reg51.h>
#define DPIO_DIG P0
unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(void)
{
        while(1)
        {
//                GPIO_DIG=~DIG_CODE[0];
                P0=~DIG_CODE[0];
        }
}
我定义变量GPIO_DIG,但是用注释的那条出错。用P0=就不报错。
回复

使用道具 举报

11#
ID:39386 发表于 2016-6-2 22:25 | 只看该作者
我试过了可以得啊。
#include <reg52.h>
#include <intrins.h>
#define FOSC 11059200L //晶振设置,默认使用11.0592M Hz
//#define FOSC 12000000L //晶振设置,使用12M Hz
//#define FOSC 24000000L //晶振设置,使用24M Hz

//IO接口定义

//全局变量定义
unsigned char a,b,k;
sbit b0=P0^0;

/*******************************************************************************
* 函 数 名 :Delayms
* 函数功能 :实现 ms级的延时
* 输    入 :ms
* 输    出 :无
*******************************************************************************/
void delayms(unsigned int ms)
{
        unsigned int i,j;
        for(i=0;i<ms;i++)
        #if FOSC == 11059200L
                for(j=0;j<114;j++);
        #elif FOSC == 12000000L
          for(j=0;j<123;j++);
        #elif FOSC == 24000000L
                for(j=0;j<249;j++);
        #else
                for(j=0;j<114;j++);
        #endif
}

/*******************************************************************************
* 函 数 名 :main
* 函数功能 :主函数,实现LED灯闪烁
* 输    入 :无
* 输    出 :无
*******************************************************************************/
void main()
{

        while(1)
        {
           b0=0;
           delayms(1000);
          b0=1;
           delayms(1000);
        }
}
回复

使用道具 举报

12#
ID:39386 发表于 2016-6-2 22:30 | 只看该作者
好像特殊功能寄存器P0、P1、P3、等

是不能宏定义的。。。。
回复

使用道具 举报

13#
ID:119742 发表于 2016-6-3 20:59 | 只看该作者
huangfuxi2002 发表于 2016-6-2 22:30
好像特殊功能寄存器P0、P1、P3、等

是不能宏定义的。。。。

可以了,。。。重新打开再试的时候就通过了,谢谢啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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