找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4111|回复: 7
收起左侧

51单片机跑马灯问题,端口直接赋值和变量赋值的区别

[复制链接]
ID:308903 发表于 2018-8-24 16:17 | 显示全部楼层 |阅读模式
先总结说明下:

第一个程序,来着开发板自带程序,可以正常左右循环;第二个程序 只是取消了 uchar LED 这个变量,直接赋值P2 端口,就不行了!

不知道为什么?    求指点下, 是不是哪个概念没理解清楚?


这个程序是正常运行的,来着普中开发板

#include <reg52.h>
void delay(unsigned int i);  
char LED;


main()
{
  unsigned char i;

  while (1)
  {         LED = 0xfe;
           
           for (i = 0 ;i < 8 ; i++)
          {
           P2  = LED;
           delay(500);
           LED = LED << 1;            
           LED = LED | 0x01;        
           if (LED == 0x7f)         break;        
           }
        
           for (i = 0 ;i < 8 ; i++)
           {
                 
                  P2  = LED;
                  delay(500);
                  LED = LED >> 1;        
                  LED = LED | 0x80;        
           
           }

   }

}


/******延时*************/
void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)
        for(j = 255; j > 0; j--);

}


下面这个程序,就只能跑一下了!#include  < reg52.h >

#define uchar unsigned  char
#define uint  unsigned  int

/*****延时*****/

void delayMS  ( uint  ms )
{
  uchar i;

  while ( ms-- )
  {
    for ( i = 0;  i < 255;  i++ );
  }
}

/***主函数***/

void  main  ()
{
  uchar i;

  while ( 1 )
  {   

    for ( i = 0;  i < 8;  i++ )
     {
       P2  = 0xfe;
       delayMS ( 500 );

       P2 = P2  << 1;
       P2 = P2  | 0x01;

       if ( P2  == 0x7f )
       break;
     }

     for  ( i = 0;  i < 8;  i++ )
     {
       P2 = 0xfe;
       delayMS  ( 500 );

       P2 = P2  >> 1;
       P2 = P2  | 0x80;
     }
  }
}


回复

使用道具 举报

ID:389714 发表于 2018-8-24 16:44 | 显示全部楼层
P2 是端口寄存器,不是变量,不能左右移

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:389714 发表于 2018-8-24 16:46 | 显示全部楼层
P2 口是寄存器,不是变量,只能赋值,不能左右移。
回复

使用道具 举报

ID:388013 发表于 2018-8-24 17:41 | 显示全部楼层
移位要加移位的头文件
回复

使用道具 举报

ID:308903 发表于 2018-8-27 09:23 | 显示全部楼层
zjp_zy 发表于 2018-8-24 16:46
P2 口是寄存器,不是变量,只能赋值,不能左右移。

  谢谢,再去翻了下书,

书上写了:   P0~P3 ,归于专用寄存器,(特殊功能寄存器),,位于内部RAM 区的高 128 字节处 ( 80H - FFH 之间)

没好好学习~




回复

使用道具 举报

ID:308903 发表于 2018-8-27 09:23 | 显示全部楼层
1984528951 发表于 2018-8-24 17:41
移位要加移位的头文件

谢谢,还真是漏下了~
回复

使用道具 举报

ID:390344 发表于 2018-8-27 11:21 | 显示全部楼层
你看一下郭老师的单片机  跑马灯历程  应该很好用
上面有程序  你对照看一下
回复

使用道具 举报

ID:390373 发表于 2018-8-27 12:42 | 显示全部楼层
很好,谢谢,很好
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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