找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请问如何优化这段keil C51单片机花样流水灯代码?中间的两盏灯不亮

[复制链接]
跳转到指定楼层
楼主
这是一段花样流水灯的代码,想要灯从两边往中间亮,一直循环,但现在最中间的两盏灯不亮,请问如何解决?
单片机源程序如下:
#include <reg52.h>
void DelayMs(unsigned int n);
/*------------------*/
void main (void)
{
unsigned char temp =0x7E;
unsigned int temph , templ;

while(1)
{ P1=temp;
DelayMs(2000);
{ temph=temp & 0xf0,templ=temp & 0x0f;

temph=(temph >> 1)|0x80,
templ=(templ << 1)|0x01;

temp=temph|templ;}

if(temp==0xff)
temp=0x7E; }
}
/*---------------------*/
void DelayMs(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
{ for(j=110;j>0;j--); }

}

1.jpg (354.3 KB, 下载次数: 44)

1.jpg

2.jpg (494.48 KB, 下载次数: 34)

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

使用道具 举报

沙发
ID:514901 发表于 2021-9-6 17:44 | 只看该作者
#include <reg52.h>
void DelayMs(unsigned int n);
/*------------------*/
void main (void)
{
unsigned char temp =0x7E;
unsigned int temph , templ;

while(1)
{ P1=temp;
DelayMs(2000);
if(temp==0xff)
temp=0x7E;
{ temph=temp & 0xf0,templ=temp & 0x0f;

temph=(temph >> 1)|0x80,
templ=(templ << 1)|0x01;

temp=temph|templ;}

}
}
/*---------------------*/
void DelayMs(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
{ for(j=110;j>0;j--); }

}
回复

使用道具 举报

板凳
ID:417092 发表于 2021-9-6 18:02 | 只看该作者
  1. #include <reg52.h>
  2. void DelayMs(unsigned int n);
  3. /*------------------*/
  4. void main (void)
  5. {
  6. unsigned char temp =0x7E;
  7. unsigned int temph , templ;

  8. while(1)
  9. { P1=temp;
  10. DelayMs(2000);
  11. { temph=temp & 0xf0,templ=temp & 0x0f;

  12. temph=(temph >> 1)|0x80,
  13. temph &= 0xf0;
  14. templ=(templ << 1)|0x01;
  15. templ &= 0x0f;
  16. temp=temph|templ;}

  17. if(temp==0xff)
  18. temp=0x7E; }
  19. }
  20. /*---------------------*/
  21. void DelayMs(unsigned int n)
  22. {
  23. unsigned int i,j;
  24. for(i=0;i<n;i++)
  25. { for(j=110;j>0;j--); }

  26. }
复制代码
回复

使用道具 举报

地板
ID:417092 发表于 2021-9-6 18:11 | 只看该作者
  1. #include <reg52.h>
  2. void DelayMs(unsigned int n);
  3. /*------------------*/
  4. void main (void)
  5. {
  6. unsigned char temp =0x7E;
  7. unsigned int temph , templ;

  8. while(1)
  9. { P1=temp;
  10. DelayMs(2000);
  11. { temph=temp & 0xf0,templ=temp & 0x0f;

  12. temph=(temph >> 1)|0x80,
  13. temph &= 0xf0;
  14. templ=(templ << 1)|0x01;
  15. templ &= 0x0f;
  16. temp=temph|templ;}

  17. if(temp==0xff)
  18. temp=0x7E; }
  19. }
  20. /*---------------------*/
  21. void DelayMs(unsigned int n)
  22. {
  23. unsigned int i,j;
  24. for(i=0;i<n;i++)
  25. { for(j=110;j>0;j--); }

  26. }
复制代码
回复

使用道具 举报

5#
ID:417092 发表于 2021-9-6 18:22 | 只看该作者





没什么问题呀
回复

使用道具 举报

6#
ID:417092 发表于 2021-9-6 18:31 | 只看该作者
  1. #include <reg52.h>
  2. void DelayMs(unsigned int n);
  3. /*------------------*/
  4. void main (void)
  5. {
  6. unsigned char temp =0x7E;
  7. unsigned int temph , templ;

  8. while(1)
  9. { P1=temp;
  10. DelayMs(2000);
  11. {

  12. temph=((temp >> 1)|0x80) & 0xf0,
  13. templ=((temp << 1)|0x01) & 0x0f;

  14. temp=temph|templ;}

  15. if(temp==0xff)
  16. temp=0x7E; }
  17. }
  18. /*---------------------*/
  19. void DelayMs(unsigned int n)
  20. {
  21. unsigned int i,j;
  22. for(i=0;i<n;i++)
  23. { for(j=110;j>0;j--); }

  24. }
复制代码



简化后的。。。。温故知新,,,温习一下位移运算。。。。
回复

使用道具 举报

7#
ID:417092 发表于 2021-9-6 19:24 | 只看该作者
小意思,用不再写一个从中间向俩端的流水灯呀
回复

使用道具 举报

8#
ID:964313 发表于 2021-9-8 13:00 | 只看该作者
ZMRGHY 发表于 2021-9-6 19:24
小意思,用不再写一个从中间向俩端的流水灯呀

厉害了大师,不用了,我自己想想把它搞定
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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