找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机初学者流水灯程序错误

  [复制链接]
跳转到指定楼层
楼主
ID:638342 发表于 2019-12-23 23:11 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
大佬们,帮我看一下呗,这个错怎么改   我是初学者

-54830b693de8f6de.jpg (1.6 MB, 下载次数: 43)

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

使用道具 举报

沙发
ID:235200 发表于 2019-12-24 02:18 | 只看该作者
你上传的图片中程序12行是没错的,检查你工程中加载的main.c是否加载正确,可以双击右边"main.c"看打开的文件是否对,因为看到你左边工程建有两个群组,要不删除一个群组试试
回复

使用道具 举报

板凳
ID:546770 发表于 2019-12-24 09:18 | 只看该作者
你的第三行的sbit led=P1要改成define led  P1,sbit是位操作,不能一下子定义整个IO口;
回复

使用道具 举报

地板
ID:195446 发表于 2019-12-24 09:33 | 只看该作者
第一条语句就是错的:sbit是位操作,定义不了P1。
回复

使用道具 举报

5#
ID:638342 发表于 2019-12-24 11:17 来自手机 | 只看该作者
csmyldl 发表于 2019-12-24 02:18
你上传的图片中程序12行是没错的,检查你工程中加载的main.c是否加载正确,可以双击右边"main.c"看打开的文件 ...

双击 main.c没有任何反应呀   不过要是双击那两个错误就会跳到intrins.h的头文件中
回复

使用道具 举报

6#
ID:638342 发表于 2019-12-24 11:18 来自手机 | 只看该作者
csmyldl 发表于 2019-12-24 02:18
你上传的图片中程序12行是没错的,检查你工程中加载的main.c是否加载正确,可以双击右边"main.c"看打开的文件 ...

我删除了一个组也不行
回复

使用道具 举报

7#
ID:475247 发表于 2019-12-24 14:02 | 只看该作者
这个拿去,不谢!
#include "reg52.h"                         
#include<intrins.h>               

void main()
{
        u8 i;
        led=~0x01;
        delay(50000); //大约延时450ms       
        while(1)
        {       

                for(i=0;i<7;i++)         //将led左移一位
                {
                        led=_crol_(led,1);
                        delay(50000); //大约延时450ms       
                }
                for(i=0;i<7;i++)        //将led右移一位
                {
                        led=_cror_(led,1);
                        delay(50000); //大约延时450ms       
                }

        }               
}
回复

使用道具 举报

8#
ID:668457 发表于 2019-12-24 14:13 | 只看该作者
图片显示,mian.c没错,有问题的是intrins.h,141和129行。
回复

使用道具 举报

9#
ID:275826 发表于 2019-12-24 15:10 | 只看该作者
sbit led=P1改成 #define  led  P1
回复

使用道具 举报

10#
ID:672573 发表于 2019-12-24 16:14 | 只看该作者
试试这个#define led P1
回复

使用道具 举报

11#
ID:56002 发表于 2019-12-24 16:23 | 只看该作者
还有谁? 发表于 2019-12-24 14:02
这个拿去,不谢!
#include "reg52.h"                         
#include               

用这个函数流水灯看起来自然些
回复

使用道具 举报

12#
ID:638342 发表于 2019-12-24 16:54 来自手机 | 只看该作者
小黑屋525 发表于 2019-12-24 09:18
你的第三行的sbit led=P1要改成define led  P1,sbit是位操作,不能一下子定义整个IO口;

改了之后错误还是没变,  好无助啊
回复

使用道具 举报

13#
ID:638342 发表于 2019-12-24 17:21 来自手机 | 只看该作者
小黑屋525 发表于 2019-12-24 09:18
你的第三行的sbit led=P1要改成define led  P1,sbit是位操作,不能一下子定义整个IO口;

之后我针对这个问题又编了一个简单的程序,用sbit
声明整个IO口,计算机是检查不出来,是没有错误的,但是单片机没有反应。
回复

使用道具 举报

14#
ID:672691 发表于 2019-12-24 17:38 | 只看该作者
无法错误,定义led的端口不对
回复

使用道具 举报

15#
ID:638342 发表于 2019-12-24 21:49 来自手机 | 只看该作者
void led=P1  改成#define led=P1 但是还是不行,报错还是一样
回复

使用道具 举报

16#
ID:668457 发表于 2019-12-24 23:36 | 只看该作者

我照这敲了一遍,没错。是不是你的intrins.h错误?
#ifndef __INTRINS_H__
#define __INTRINS_H__

extern void          _nop_     (void);
extern bit           _testbit_ (bit);
extern unsigned char _cror_    (unsigned char, unsigned char);
extern unsigned int  _iror_    (unsigned int,  unsigned char);
extern unsigned long _lror_    (unsigned long, unsigned char);
extern unsigned char _crol_    (unsigned char, unsigned char);
extern unsigned int  _irol_    (unsigned int,  unsigned char);
extern unsigned long _lrol_    (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
extern void          _push_    (unsigned char _sfr);
extern void          _pop_     (unsigned char _sfr);

#endif


回复

使用道具 举报

17#
ID:141497 发表于 2019-12-25 00:16 | 只看该作者
变量声明要在程序开始,sibit是位定义。按你的写法要用宏定义define.
#include <reg52.h>
#define led P0
void delay(unsigned int z)
{
while(z--);
}
void main()
{
  unsigned char i;
  led=0xff;
  while(1)
  {
      for(i=0;i<8;i++)
       {
           led=0xff;
          led&=~(1<<i);
          delay(50000);
       }
  }
回复

使用道具 举报

18#
ID:638342 发表于 2019-12-25 09:10 来自手机 | 只看该作者
未成为大佬 发表于 2019-12-24 23:36
我照这敲了一遍,没错。是不是你的intrins.h错误?
#ifndef __INTRINS_H__
#define __INTRINS_H__

谢谢啦   问题解决啦 ,确实是intrins.h头文件中程序少加了一个岗 ,应该是我误删的  哈哈
回复

使用道具 举报

19#
ID:638342 发表于 2019-12-25 09:11 来自手机 | 只看该作者
51jia 发表于 2019-12-25 00:16
变量声明要在程序开始,sibit是位定义。按你的写法要用宏定义define.
#include
#define led P0

谢谢啦    问题解决啦  
回复

使用道具 举报

20#
ID:673161 发表于 2019-12-25 09:40 | 只看该作者
sbit是定义特殊寄存器的位变量,不能直接定义P1
回复

使用道具 举报

21#
ID:673161 发表于 2019-12-25 09:42 | 只看该作者
伪爷 发表于 2019-12-25 09:10
谢谢啦   问题解决啦 ,确实是intrins.h头文件中程序少加了一个岗 ,应该是我误删的  哈哈

原来是这样,可以可以,解决了就好
回复

使用道具 举报

22#
ID:673270 发表于 2019-12-25 11:02 | 只看该作者
sbit 是位定义,P1口8位使用,直接调用
回复

使用道具 举报

23#
ID:586188 发表于 2019-12-25 11:30 | 只看该作者
图片底下有错误提示,根据提示改
回复

使用道具 举报

24#
ID:664974 发表于 2019-12-25 13:50 来自手机 | 只看该作者
led=P1 错了哦
回复

使用道具 举报

25#
ID:546770 发表于 2019-12-25 13:54 | 只看该作者
伪爷 发表于 2019-12-24 17:21
之后我针对这个问题又编了一个简单的程序,用sbit
声明整个IO口,计算机是检查不出来,是没有错误的, ...

只可惜我电脑上没有Keil了,你可以把工程贴上来,这样子光说很难找的出问题的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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