久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 23404|回復: 17
打印 上一主題 下一主題
收起左側

51單片機學習板的8個LED燈,想從中間往兩邊流水亮怎么用程序實現?請高手幫下

  [復制鏈接]
跳轉到指定樓層
樓主
ID:321920 發表于 2018-5-13 12:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
用一個LED變量是可實現流水燈的,但用兩個怎么實現?我用上面的方法,顯示是只亮一個燈,請高手指點

單片機源程序:
  1. #include "reg52.h"                         
  2. #include<intrins.h>                 

  3. typedef unsigned int u16;           
  4. typedef unsigned char u8;

  5. #define led1 P2    
  6. #define led2 P2   

  7. void delay(u16 i)
  8. {
  9.         while(i--);        
  10. }


  11. void main()
  12. {
  13.         u8 i;
  14.         while(1)
  15.         {
  16.          led1=0xef;
  17.                 led2=0xf7;
  18.         delay(50000);  
  19.         
  20.                
  21.                 for(i=0;i<3;i++)         
  22.                 {
  23.                          led1=_crol_(led1,1);
  24.                         led2=_cror_(led2,1);
  25.                         delay(50000);  
  26.                 }
  27.                 for(i=0;i<3;i++)         
  28.                 {
  29.                          led1=_cror_(led1,1);
  30.                         led2=_crol_(led2,1);
  31.                         delay(50000);  
  32.                 }        
  33.                         
  34. }
  35. }
復制代碼



評分

參與人數 1黑幣 +8 收起 理由
cciejs12345 + 8 很給力!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 4#
ID:47286 發表于 2018-5-13 15:23 | 只看該作者
沒編譯 用記事本隨便寫的 不保證全對 你試試看吧 如果問題 自己想想怎么改 能改好也是進步啊 如果沒問題 最好也讀一下 好歹算是一種思路

#include "reg52.h"

#define unsigned char uchar
#define unsigned int uint

uchar i=0;        //定義循環變量 并賦值

uchar code a[]={0x00,0x18,0x24,0x42,0x81};        //定義循環數組
//循環數組說明 如果led共陽 上電后全亮 然后從中間兩個開始滅 如果led共陰 上電后全滅 從中心兩個開始亮
/*
0000 0000        0x00
0001 1000        0x18
0010 0100        0x24
0100 0010        0x42
1000 0001        0x81
*/
void delay(uint i)        //延時函數
{
        while(i--);        
}

void main()        //主程序
{
        while(1)        //主循環
        {
                P2=a[i];                //led端口=數組值i 初始值0 即 P2=a[0];
                delay(50000);        //延時
                i++;                        //循環變量自加
                if(i==4)                //如果 循環變量=4 即 循環完一次 a[]用到a[4]
                {
                        i=0;                        //清零 循環變量
                }
        }
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

沙發
ID:307591 發表于 2018-5-13 13:56 | 只看該作者
一個IO口只能定義一次,你在前面定義了兩次沒有用。
回復

使用道具 舉報

板凳
ID:160834 發表于 2018-5-13 14:06 | 只看該作者
你上面這樣的定義
#define led1 P2    
#define led2 P2
這不是等于重復定義了嗎?
另外,一個變量就可以實現8位流水燈的移動,為什么要分成2個部分?
如果你真要分開,那就單獨定義每個IO口,再寫個子程序,但是這樣不是把程序復雜化了嗎?

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:195836 發表于 2018-5-13 15:29 | 只看該作者
我認為是你沒有搞清楚最基本的8個燈一起閃爍,還有八個燈流水(就最原始的從左往右,一次亮一個的那種)
把這兩個真正搞清楚了,也就會了吧
回復

使用道具 舉報

6#
ID:328907 發表于 2018-5-13 15:35 | 只看該作者
for 循環就行
回復

使用道具 舉報

7#
ID:321920 發表于 2018-5-13 20:10 | 只看該作者
dzbj 發表于 2018-5-13 15:23
沒編譯 用記事本隨便寫的 不保證全對 你試試看吧 如果問題 自己想想怎么改 能改好也是進步啊 如果沒問題 最 ...

感謝,學習了
回復

使用道具 舉報

8#
ID:321920 發表于 2018-5-13 20:15 | 只看該作者
奎爾塞拉 發表于 2018-5-13 15:29
我認為是你沒有搞清楚最基本的8個燈一起閃爍,還有八個燈流水(就最原始的從左往右,一次亮一個的那種)
...

8個燈的流水我搞清楚了 ,我想設計一個從中間向兩邊流水,如果8個燈分別是1,2,3,4,5,6,7,8,  我的意思是  左邊的4個按 4 3 2 1 同時右邊的4個是 5678的順序,也就是說,同時亮兩個的流水效果
回復

使用道具 舉報

9#
ID:321920 發表于 2018-5-13 20:15 | 只看該作者
8個燈的流水我搞清楚了 ,我想設計一個從中間向兩邊流水,如果8個燈分別是1,2,3,4,5,6,7,8,  我的意思是  左邊的4個按 4 3 2 1 同時右邊的4個是 5678的順序,也就是說,同時亮兩個的流水效果 ,
回復

使用道具 舉報

10#
ID:321920 發表于 2018-5-13 20:59 | 只看該作者
dzbj 發表于 2018-5-13 15:23
沒編譯 用記事本隨便寫的 不保證全對 你試試看吧 如果問題 自己想想怎么改 能改好也是進步啊 如果沒問題 最 ...

感謝調試成功,學習了這個思路
  1. #include "reg52.h"        
  2. typedef unsigned char uchar;

  3. typedef unsigned int uint;
  4. typedef unsigned int u16;         
  5. typedef unsigned char u8;

  6. void delay(u16 i)
  7. {
  8.         while(i--);        
  9. }


  10. uchar i=0;     

  11. uchar code a[]={0x18,0x24,0x42,0x81};      
  12. /*
  13. 0000 0000        0x00
  14. 0001 1000        0x18
  15. 0010 0100        0x24
  16. 0100 0010        0x42
  17. 1000 0001        0x81
  18. */


  19. void main()      
  20. {
  21.         while(1)   
  22.         {
  23.                 P2=a[i];              
  24.                 delay(50000);      
  25.                 i++;                 
  26.                 if(i==4)              
  27.                 {
  28.                   i=0;            
  29.                 }
  30.         }
  31. }
復制代碼
[/code]
回復

使用道具 舉報

11#
ID:47286 發表于 2018-5-14 00:08 | 只看該作者
epaysh 發表于 2018-5-13 20:15
8個燈的流水我搞清楚了 ,我想設計一個從中間向兩邊流水,如果8個燈分別是1,2,3,4,5,6,7 ...

用我寫的那種數組的方式 你想怎么亮都可以 數組的內容實際上就是P2端口的狀態 你只要根據你需要的邏輯定義數組每位的值就可以顯示不同效果 也可以增加數組內容和改變i值花插著來 做其它效果 反正核心就是控制端口狀態 這個思路的核心是把要改變的部分寫在一個地方 不必為其它花樣又單獨寫程序
回復

使用道具 舉報

12#
ID:321920 發表于 2018-5-14 05:23 來自手機 | 只看該作者
dzbj 發表于 2018-5-14 00:08
用我寫的那種數組的方式 你想怎么亮都可以 數組的內容實際上就是P2端口的狀態 你只要根據你需要的邏輯定 ...

是的,這個思路很直觀,通用性也強,感謝
回復

使用道具 舉報

13#
ID:329253 發表于 2018-5-14 08:20 來自手機 | 只看該作者
我也學習到了
回復

使用道具 舉報

14#
ID:321920 發表于 2018-5-18 09:12 | 只看該作者
#include "reg52.h"        
typedef unsigned char uchar;

typedef unsigned int uint;
typedef unsigned int u16;         
typedef unsigned char u8;

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


uchar i=0;     

uchar code a[]={0xe7,0xdb,0xbd,0x7e};      
/*
0000 0000        0x00
0001 1000        0x18
0010 0100        0x24
0100 0010        0x42
1000 0001        0x81
*/


void main()      
{
        while(1)   
        {
                P2=a[i];              
                delay(50000);      
                i++;                 
                if(i==4)              
                {
                  i=0;            
                }
        }
}
回復

使用道具 舉報

15#
ID:328200 發表于 2018-5-18 10:02 | 只看該作者
用數組最簡單,將0xe7,0xdb,0xbd,0x7f放進去,再用for循環就可以。
回復

使用道具 舉報

16#
ID:328200 發表于 2018-5-21 08:32 | 只看該作者
hfj2011 發表于 2018-5-18 10:02
用數組最簡單,將0xe7,0xdb,0xbd,0x7f放進去,再用for循環就可以。

最后一個寫錯了,應該是0x7e  ,粗心了哈。
回復

使用道具 舉報

17#
ID:921275 發表于 2021-5-14 16:12 來自手機 | 只看該作者
hfj2011 發表于 2018-5-18 10:02
用數組最簡單,將0xe7,0xdb,0xbd,0x7f放進去,再用for循環就可以。

怎么用呢,我已經用if語句去弄三個流水燈三個方向了,最后一個我想弄從中間向兩邊流動,弄不出來
回復

使用道具 舉報

18#
ID:921288 發表于 2021-5-14 16:42 | 只看該作者
先輸出為0,再定義一個數組{00011000,00100100,01000010,10000001},遍歷相或
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产色婷婷| 精品欧美一区免费观看α√ | 日韩高清一区 | 欧美一级免费观看 | 成人免费在线网 | 国产精品日产欧美久久久久 | 日韩在线视频免费观看 | 国产 日韩 欧美 在线 | 91精产国品一二三区 | 亚洲一区二区三区视频免费观看 | 欧美三级网站 | 日本精品一区二区 | 亚洲国产一区二区三区 | 免费一级片 | 2020亚洲天堂 | 性大毛片视频 | 日韩视频在线一区 | 久久精品久久久 | 91精品国产乱码麻豆白嫩 | 欧美情趣视频 | 91精品国产欧美一区二区成人 | 久久青青| 国产欧美日韩精品在线观看 | 国产成人精品一区二区在线 | 午夜合集 | 国产精久久久久久久 | 日韩免费一级 | 亚洲导航深夜福利涩涩屋 | 麻豆精品一区二区三区在线观看 | 午夜国产 | 密室大逃脱第六季大神版在线观看 | 亚洲欧美日韩在线 | 亚洲精品视频观看 | 国产综合欧美 | 国产午夜亚洲精品不卡 | 久久69精品久久久久久久电影好 | 欧美日韩亚洲国产综合 | 免费成人高清在线视频 | 少妇久久久久 | 午夜一级黄色片 | 99精品99|