单片机交流
直播中

哥儿

8年用户 865经验值
擅长:嵌入式技术
私信 关注
[问答]

在单片机的P0端口如何去实现LED跑马灯呢

单片机的P0端口如何去实现LED跑马灯呢?如何对其进行proteus仿真呢?

回帖(1)

刘帅

2021-10-19 10:35:26
  1.效果展示
  1.1.代码1效果
  
  1.2.代码2效果
  
  2.Proteus仿真
  元器件:AT89C51 *1,LED-BLUE *2,LED-GREEN *2,LED-YELLOW *2,VCC *1,GROUND *1,电阻包RESPACK-8 *1.
  说明:仿真图中LED灯左侧高电平,右侧低电平时,LED正常闪烁。
  另:仿真连线使用标号模式。
  
  3.代码1
  
  # include 《reg51.h》
  unsigned char table[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; //控制P0端口
  void delay100ms(void) //误差 0us 用单片机小精灵生成的
  {
  unsigned char a,b,c;
  for(c=19;c》0;c--)
  for(b=20;b》0;b--)
  for(a=130;a》0;a--);
  }
  void main()
  {
  unsigned int i;
  while(1)
  {
  for(i = 0; i 《 8; i ++)
  {
  P0 = table[i];
  delay100ms();
  }
  }
  }
  4.代码2
  
  #include《reg51.h》
  #include《intrins.h》
  void delay100ms(void) //误差 0us 用单片机小精灵生成的
  {
  unsigned char a,b,c;
  for(c=19;c》0;c--)
  for(b=20;b》0;b--)
  for(a=130;a》0;a--);
  }
  void main()
  {
  unsigned char Data0,i;
  unsigned int Data1;
  Data0 = 0x01; // 二进制11111110B
  Data1 = 0x80; // 二进制01111111B
  while(1)
  {
  for(i = 0; i 《 8; i++) // 循环8次,可执行_crol_函数8次,将Data0各位循环左移8次,即8个LED逐个点亮。
  {
  P0 = Data0; // 将Data传递给P2口
  Data0 = _crol_(Data0, 1); // 11111110B各位左移1位
  delay100ms();
  }
  for(i = 0; i 《 8; i++) // 与上面道理相似,这是控制Data1各位右移
  {
  P0 = Data1;
  Data1 = _cror_(Data1,1);
  delay100ms();
  P0 = Data0;
  }
  }
  }
举报

更多回帖

发帖
×
20
完善资料,
赚取积分