找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2631|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

請問如何優(yōu)化這段keil C51單片機花樣流水燈代碼?中間的兩盞燈不亮

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:964313 發(fā)表于 2021-9-6 16:33 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這是一段花樣流水燈的代碼,想要燈從兩邊往中間亮,一直循環(huán),但現(xiàn)在最中間的兩盞燈不亮,請問如何解決?
單片機源程序如下:
#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, 下載次數(shù): 45)

1.jpg

2.jpg (494.48 KB, 下載次數(shù): 35)

2.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:514901 發(fā)表于 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--); }

}
回復(fù)

使用道具 舉報

板凳
ID:417092 發(fā)表于 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. }
復(fù)制代碼
回復(fù)

使用道具 舉報

地板
ID:417092 發(fā)表于 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. }
復(fù)制代碼
回復(fù)

使用道具 舉報

5#
ID:417092 發(fā)表于 2021-9-6 18:22 | 只看該作者





沒什么問題呀
回復(fù)

使用道具 舉報

6#
ID:417092 發(fā)表于 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. }
復(fù)制代碼



簡化后的。。。。溫故知新,,,溫習一下位移運算。。。。
回復(fù)

使用道具 舉報

7#
ID:417092 發(fā)表于 2021-9-6 19:24 | 只看該作者
小意思,用不再寫一個從中間向倆端的流水燈呀
回復(fù)

使用道具 舉報

8#
ID:964313 發(fā)表于 2021-9-8 13:00 | 只看該作者
ZMRGHY 發(fā)表于 2021-9-6 19:24
小意思,用不再寫一個從中間向倆端的流水燈呀

厲害了大師,不用了,我自己想想把它搞定
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表