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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 23652|回復(fù): 17
收起左側(cè)

51單片機(jī)學(xué)習(xí)板的8?jìng)(gè)LED燈,想從中間往兩邊流水亮怎么用程序?qū)崿F(xiàn)?請(qǐng)高手幫下

  [復(fù)制鏈接]
ID:321920 發(fā)表于 2018-5-13 12:30 | 顯示全部樓層 |閱讀模式
用一個(gè)LED變量是可實(shí)現(xiàn)流水燈的,但用兩個(gè)怎么實(shí)現(xiàn)?我用上面的方法,顯示是只亮一個(gè)燈,請(qǐng)高手指點(diǎn)

單片機(jī)源程序:
  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. }
復(fù)制代碼



評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:47286 發(fā)表于 2018-5-13 15:23 | 顯示全部樓層
沒編譯 用記事本隨便寫的 不保證全對(duì) 你試試看吧 如果問題 自己想想怎么改 能改好也是進(jìn)步啊 如果沒問題 最好也讀一下 好歹算是一種思路

#include "reg52.h"

#define unsigned char uchar
#define unsigned int uint

uchar i=0;        //定義循環(huán)變量 并賦值

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

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

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:307591 發(fā)表于 2018-5-13 13:56 | 顯示全部樓層
一個(gè)IO口只能定義一次,你在前面定義了兩次沒有用。
回復(fù)

使用道具 舉報(bào)

ID:160834 發(fā)表于 2018-5-13 14:06 | 顯示全部樓層
你上面這樣的定義
#define led1 P2    
#define led2 P2
這不是等于重復(fù)定義了嗎?
另外,一個(gè)變量就可以實(shí)現(xiàn)8位流水燈的移動(dòng),為什么要分成2個(gè)部分?
如果你真要分開,那就單獨(dú)定義每個(gè)IO口,再寫個(gè)子程序,但是這樣不是把程序復(fù)雜化了嗎?

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:195836 發(fā)表于 2018-5-13 15:29 | 顯示全部樓層
我認(rèn)為是你沒有搞清楚最基本的8個(gè)燈一起閃爍,還有八個(gè)燈流水(就最原始的從左往右,一次亮一個(gè)的那種)
把這兩個(gè)真正搞清楚了,也就會(huì)了吧
回復(fù)

使用道具 舉報(bào)

ID:328907 發(fā)表于 2018-5-13 15:35 | 顯示全部樓層
for 循環(huán)就行
回復(fù)

使用道具 舉報(bào)

ID:321920 發(fā)表于 2018-5-13 20:10 | 顯示全部樓層
dzbj 發(fā)表于 2018-5-13 15:23
沒編譯 用記事本隨便寫的 不保證全對(duì) 你試試看吧 如果問題 自己想想怎么改 能改好也是進(jìn)步啊 如果沒問題 最 ...

感謝,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:321920 發(fā)表于 2018-5-13 20:15 | 顯示全部樓層
奎爾塞拉 發(fā)表于 2018-5-13 15:29
我認(rèn)為是你沒有搞清楚最基本的8個(gè)燈一起閃爍,還有八個(gè)燈流水(就最原始的從左往右,一次亮一個(gè)的那種)
...

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

使用道具 舉報(bào)

ID:321920 發(fā)表于 2018-5-13 20:15 | 顯示全部樓層
8?jìng)(gè)燈的流水我搞清楚了 ,我想設(shè)計(jì)一個(gè)從中間向兩邊流水,如果8?jìng)(gè)燈分別是1,2,3,4,5,6,7,8,  我的意思是  左邊的4個(gè)按 4 3 2 1 同時(shí)右邊的4個(gè)是 5678的順序,也就是說,同時(shí)亮兩個(gè)的流水效果 ,
回復(fù)

使用道具 舉報(bào)

ID:321920 發(fā)表于 2018-5-13 20:59 | 顯示全部樓層
dzbj 發(fā)表于 2018-5-13 15:23
沒編譯 用記事本隨便寫的 不保證全對(duì) 你試試看吧 如果問題 自己想想怎么改 能改好也是進(jìn)步啊 如果沒問題 最 ...

感謝調(diào)試成功,學(xué)習(xí)了這個(gè)思路
  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. }
復(fù)制代碼
[/code]
回復(fù)

使用道具 舉報(bào)

ID:47286 發(fā)表于 2018-5-14 00:08 | 顯示全部樓層
epaysh 發(fā)表于 2018-5-13 20:15
8?jìng)(gè)燈的流水我搞清楚了 ,我想設(shè)計(jì)一個(gè)從中間向兩邊流水,如果8?jìng)(gè)燈分別是1,2,3,4,5,6,7 ...

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

使用道具 舉報(bào)

ID:321920 發(fā)表于 2018-5-14 05:23 來自觸屏版 | 顯示全部樓層
dzbj 發(fā)表于 2018-5-14 00:08
用我寫的那種數(shù)組的方式 你想怎么亮都可以 數(shù)組的內(nèi)容實(shí)際上就是P2端口的狀態(tài) 你只要根據(jù)你需要的邏輯定 ...

是的,這個(gè)思路很直觀,通用性也強(qiáng),感謝
回復(fù)

使用道具 舉報(bào)

ID:329253 發(fā)表于 2018-5-14 08:20 來自觸屏版 | 顯示全部樓層
我也學(xué)習(xí)到了
回復(fù)

使用道具 舉報(bào)

ID:321920 發(fā)表于 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;            
                }
        }
}
回復(fù)

使用道具 舉報(bào)

ID:328200 發(fā)表于 2018-5-18 10:02 | 顯示全部樓層
用數(shù)組最簡(jiǎn)單,將0xe7,0xdb,0xbd,0x7f放進(jìn)去,再用for循環(huán)就可以。
回復(fù)

使用道具 舉報(bào)

ID:328200 發(fā)表于 2018-5-21 08:32 | 顯示全部樓層
hfj2011 發(fā)表于 2018-5-18 10:02
用數(shù)組最簡(jiǎn)單,將0xe7,0xdb,0xbd,0x7f放進(jìn)去,再用for循環(huán)就可以。

最后一個(gè)寫錯(cuò)了,應(yīng)該是0x7e  ,粗心了哈。
回復(fù)

使用道具 舉報(bào)

ID:921275 發(fā)表于 2021-5-14 16:12 來自觸屏版 | 顯示全部樓層
hfj2011 發(fā)表于 2018-5-18 10:02
用數(shù)組最簡(jiǎn)單,將0xe7,0xdb,0xbd,0x7f放進(jìn)去,再用for循環(huán)就可以。

怎么用呢,我已經(jīng)用if語句去弄三個(gè)流水燈三個(gè)方向了,最后一個(gè)我想弄從中間向兩邊流動(dòng),弄不出來
回復(fù)

使用道具 舉報(bào)

ID:921288 發(fā)表于 2021-5-14 16:42 | 顯示全部樓層
先輸出為0,再定義一個(gè)數(shù)組{00011000,00100100,01000010,10000001},遍歷相或
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产三级精品三级在线观看四季网 | 狠狠干网站 | 成人福利网站 | 毛色毛片免费看 | 青青草社区 | 天天干天天操天天看 | 在线a视频 | 91精品观看 | 一区二区免费在线观看 | 9色视频在线 | 国产亚洲精品久久19p | 超碰美女在线 | 亚洲综合二区 | 欧美日韩精品在线一区 | 国产欧美一区二区三区在线看蜜臀 | 日本成人免费观看 | 免费观看黄色片视频 | 夜夜骑av| 国产一区二区在线免费观看 | 狠狠视频 | 一级毛片免费完整视频 | 欧美高清dvd | 日韩中文字幕在线视频观看 | 亚洲精品一区二区三区在线 | 欧美日本久久 | 国产精品国产成人国产三级 | 精精国产xxxx视频在线播放 | 欧美亚洲国产一区二区三区 | 久久精品国产一区二区三区 | 日本久久福利 | 一区二区三区精品视频 | 成人免费大片黄在线播放 | 日本精品视频在线观看 | 韩国毛片一区二区三区 | 久国产视频 | 啪啪免费网站 | 日韩精品一区二区三区 | 亚洲国产欧美日韩 | 午夜影院普通用户体验区 | 日日夜精品视频 | 国产丝袜一区二区三区免费视频 |