打印

麻烦各位老师帮我看看这个程序有什么问题(51),谢谢

[复制链接]
669|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
辣条42|  楼主 | 2018-5-22 11:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "reg52.h"
#include<intrins.h>                       
#define uint unsigned int         
#define uchar unsigned char
#define led P2

void delay(uchar i)
{
        while(i--);
}

void main()
{
        led=0xfe;
        while(1)
        {
                delay(50000);
                led=_crol_(led,1);
        }               
}
我想实现流水灯,我查了一下,说是直接循环移动IO口是不行的,我想求证一下这个,或者这个程序还错在什么地方。灯是低电平亮

评论
xch 2018-5-23 10:42 回复TA
可以直接循环移动P口。 你这delay函数入口参数uchar 是16位宽的吗? 调用它使用了5w这么大的数据 
辣条42 2018-5-22 12:03 回复TA
/************************************************************************************** * LED流水灯实验 * 实现现象:下载程序后LED呈现流水灯效果进行左移右移滚动 注意事项:无 ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include<intrins.h> //因为要用到左右移函数,所以...  

相关帖子

沙发
叫我如花| | 2018-5-22 11:47 | 只看该作者
首先声明,我也是个菜鸟。我不晓得直接循环移动IO口行不行。如果不行,你可以先循环一个数值,然后再赋给P2口。

使用特权

评论回复
板凳
辣条42|  楼主 | 2018-5-22 12:03 | 只看该作者
叫我如花 发表于 2018-5-22 11:47
首先声明,我也是个菜鸟。我不晓得直接循环移动IO口行不行。如果不行,你可以先循环一个数值,然后再赋给P2 ...

赋数值是可以的,但是还有一个程序是直接循环的,但是可以实现,我发上来给大家看看,麻烦仁兄也看看,一起讨论一下

使用特权

评论回复
地板
辣条42|  楼主 | 2018-5-22 12:04 | 只看该作者
/**************************************************************************************
*                              LED流水灯实验                                                                                                  *
实现现象:下载程序后LED呈现流水灯效果进行左移右移滚动
注意事项:无                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>                //因为要用到左右移函数,所以加入这个头文件

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

#define led P2           //将P2口定义为led 后面就可以使用led代替P2口

/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{
        u8 i;
        led=0xfe;
        delay(50000); //大约延时450ms       
        while(1)
        {       
/*                for(i=0;i<8;i++)
                {
                        P2=~(0x01<<i);         //将1右移i位,然后将结果取反赋值到P2口
                        delay(50000); //大约延时450ms
                }
*/               
                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       
                }       
        }               
}

使用特权

评论回复
评论
辣条42 2018-5-22 13:37 回复TA
这个程序直接用IO口循环可以,麻烦各位大哥帮小弟解答一番 
5
花开葬侬| | 2018-5-22 17:24 | 只看该作者
试试能点亮不?我也新手一枚。

#include "reg52.h"
#include<intrins.h>                        
#define uint unsigned int         
#define uchar unsigned char

void delay(uchar i)
{
        while(i--);
}

void main()
{
        uchar m,led;
                led=0xfe;
                m=led;
        while(1)
        {
              delay(50000);
               m=_crol_(m,1);
                           P2=m;
        }               
}

试试能点亮不?新手一枚。

使用特权

评论回复
6
ayb_ice| | 2018-5-22 17:27 | 只看该作者
本帖最后由 ayb_ice 于 2018-5-22 17:28 编辑

可以的,只是从引脚读取数据,可能1读回的0,因为标准51输出能力弱

使用特权

评论回复
7
HappyXue| | 2018-5-22 19:35 | 只看该作者
首先你尝试后得到的结果是怎样的?就代码看来,延时函数应该达不到你想要的时间长度,uchar的表示范围是0~255

使用特权

评论回复
8
叫我如花| | 2018-5-23 10:34 | 只看该作者
我感觉楼上说的对。你用你的程序跑出来是什么样子呢。是不是看起来全亮了啊。delay函数里面UCHAR类型只能取值0-255,可能需要换个UINT类型来试试。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

19

帖子

0

粉丝