找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 11603|回復(fù): 31
打印 上一主題 下一主題
收起左側(cè)

為什么單片機(jī)流水燈這樣寫,只能亮4個(gè)LED。我要亮8個(gè)燈

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:427818 發(fā)表于 2018-11-16 16:55 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
        while(1)
        {
           led = 0x01;
           delay(50000);
           led = 0x02;
           delay(50000);
           led = 0x03;
           delay(50000);
           led = 0x04;
           delay(50000);
           led = 0x11;
           delay(50000);
           led = 0x12;
           delay(50000);
           led = 0x13;
           delay(50000);
           led = 0x14;
           delay(50000);
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:155507 發(fā)表于 2018-11-16 17:07 | 只看該作者
給你改了一下試試。

        while(1)
        {
           led = 0x01;
           delay(50000);
           led = 0x02;
           delay(50000);
           led = 0x04;
           delay(50000);
           led = 0x08;
           delay(50000);
           led = 0x10;
           delay(50000);
           led = 0x20;
           delay(50000);
           led = 0x40;
           delay(50000);
           led = 0x80;
           delay(50000);



回復(fù)

使用道具 舉報(bào)

板凳
ID:427831 發(fā)表于 2018-11-16 17:14 | 只看該作者
led是8位IO口嗎?沒太看懂你的代碼
回復(fù)

使用道具 舉報(bào)

地板
ID:295874 發(fā)表于 2018-11-16 17:22 | 只看該作者
你目前的位操作就只操作到了四個(gè)IO口,所以。。。。。。
回復(fù)

使用道具 舉報(bào)

5#
ID:379730 發(fā)表于 2018-11-16 17:29 | 只看該作者
本帖最后由 MMU_FS 于 2018-11-16 17:37 編輯

這樣是不對的,要按十六進(jìn)制來,假設(shè)led映射的P0,應(yīng)該這樣寫uint8_t temp = 0x01 , i = 0;
led = temp;

while(1)
{      temp = 0x01;
    for(i = 0 ; i < 8 ;  i ++)
    {
        led =(temp << 1) | temp;
        delay(50000);
    }
    temp = 0x7F;
    for(i = 0 ; i < 8 ;  i ++)
    {
l        ed =(temp >> 1) & temp;
        delay(50000);
    }

}
         


回復(fù)

使用道具 舉報(bào)

6#
ID:427839 發(fā)表于 2018-11-16 17:42 | 只看該作者
你的數(shù)值都不對,一個(gè)是8421,8421.
回復(fù)

使用道具 舉報(bào)

7#
ID:423511 發(fā)表于 2018-11-16 17:49 | 只看該作者
把led后邊的數(shù)改為:0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80。試一下。
回復(fù)

使用道具 舉報(bào)

8#
ID:389298 發(fā)表于 2018-11-16 18:10 | 只看該作者
有沒有圖
回復(fù)

使用道具 舉報(bào)

9#
ID:63351 發(fā)表于 2018-11-16 18:48 | 只看該作者
你是要做流水燈呢還是,讓8個(gè)常亮呢?  我默認(rèn)你的led是低電平有效的, 如果是8個(gè)燈常亮,led = 0x00;  如果要依次點(diǎn)亮8個(gè)燈,你可以采用循環(huán)語句 led=0xff ;for(i=0;i<8; i++){led &= (0xfe<<i);  delay(50000); }
回復(fù)

使用道具 舉報(bào)

10#
ID:427818 發(fā)表于 2018-11-16 22:10 | 只看該作者
我就是想用最原始的方法試試,才開始學(xué)不久。各位大神的我都試試再說哈
回復(fù)

使用道具 舉報(bào)

11#
ID:427818 發(fā)表于 2018-11-16 22:17 | 只看該作者
angmall 發(fā)表于 2018-11-16 17:07
給你改了一下試試。

        while(1)

大神,我的為什么程序出現(xiàn)了什么問題呢?
回復(fù)

使用道具 舉報(bào)

12#
ID:427818 發(fā)表于 2018-11-16 22:18 | 只看該作者
kr123crg 發(fā)表于 2018-11-16 17:14
led是8位IO口嗎?沒太看懂你的代碼

是8位的IO
回復(fù)

使用道具 舉報(bào)

13#
ID:427818 發(fā)表于 2018-11-16 22:18 | 只看該作者
liyongan_1985 發(fā)表于 2018-11-16 17:22
你目前的位操作就只操作到了四個(gè)IO口,所以。。。。。。

的確是這樣,為什么呢?出錯(cuò)在那呢?
回復(fù)

使用道具 舉報(bào)

14#
ID:410399 發(fā)表于 2018-11-17 08:32 | 只看該作者
0x01  ->  0000 0001
0x02  ->  0000 0010
0x03  ->  0000 0011
0x04  ->  0000 0100
0x11  ->  0000 1011
0x12  ->  0000 1100
0x13  ->  0000 1101
0x14  ->  0000 1110
你的是低電平有效還是高電平有效,怎么流水燈法,沒明白。
你程序?qū)?yīng)2進(jìn)制是這樣,對應(yīng)輸出,最多就控制了4位LED
回復(fù)

使用道具 舉報(bào)

15#
ID:427818 發(fā)表于 2018-11-17 16:14 | 只看該作者
mosqu 發(fā)表于 2018-11-17 08:32
0x01  ->  0000 0001
0x02  ->  0000 0010
0x03  ->  0000 0011

噢噢,明白了
回復(fù)

使用道具 舉報(bào)

16#
ID:392042 發(fā)表于 2018-11-17 17:43 | 只看該作者
這個(gè)和iIO的定義有關(guān)系
回復(fù)

使用道具 舉報(bào)

17#
ID:428347 發(fā)表于 2018-11-17 19:05 | 只看該作者
十六進(jìn)制有abcdef的才能控制到高4位,肯定不能控制8個(gè)
回復(fù)

使用道具 舉報(bào)

18#
ID:300347 發(fā)表于 2018-11-17 23:08 | 只看該作者
你可以使用51里的移位函數(shù),只要讓一個(gè)IO口的燈亮,接下來對這個(gè)IO口進(jìn)行位移
回復(fù)

使用道具 舉報(bào)

19#
ID:428719 發(fā)表于 2018-11-18 15:44 | 只看該作者
改成0xff試試
回復(fù)

使用道具 舉報(bào)

20#
ID:428557 發(fā)表于 2018-11-18 20:24 | 只看該作者
如果樓主的LED燈共陰的話
回復(fù)

使用道具 舉報(bào)

21#
ID:428557 發(fā)表于 2018-11-18 20:27 | 只看該作者
如果樓主LED共陰的話while(1)         {            led = 0x01;            delay(50000);            led = 0x02;            delay(50000);            led = 0x04;            delay(50000);            led = 0x08;            delay(50000);            led = 0x10;            delay(50000);            led = 0x20;            delay(50000);            led = 0x40;            delay(50000);            led = 0x80;            delay(50000);如果共陽的話while(1)         {            led = 0x01;            delay(50000);            led = 0x02;            delay(50000);            led = 0x04;            delay(50000);            led = 0x08;            delay(50000);            led = 0xfe;            delay(50000);            led = 0xfd;            delay(50000);            led = 0xfb;            delay(50000);            led = 0xf7;            delay(50000);
回復(fù)

使用道具 舉報(bào)

22#
ID:422467 發(fā)表于 2018-11-19 16:15 | 只看該作者
8421,8421
回復(fù)

使用道具 舉報(bào)

23#
ID:407083 發(fā)表于 2018-11-19 18:38 | 只看該作者
你LED賦值不對,當(dāng)然不能亮8個(gè)啊
回復(fù)

使用道具 舉報(bào)

24#
ID:429435 發(fā)表于 2018-11-19 19:50 | 只看該作者
#include<reg52.h> #define uint unsigned int #define uchar unsigned char uint i,j,z,; uchar a; void main(){ a=0xfe; for(z=0;z<8;z++){ P1=a; a=~a; a=a<<1; a=~a; for(i=150;i>0;i--) for(j=110;j>0;j--);  } }這樣也可以
回復(fù)

使用道具 舉報(bào)

25#
ID:255398 發(fā)表于 2018-11-20 09:28 | 只看該作者
你的電路圖?是高電平,還是 低電平點(diǎn)亮?把你的賦值寫成16進(jìn)制,就明白為何只亮四個(gè)燈了。
回復(fù)

使用道具 舉報(bào)

26#
ID:255398 發(fā)表于 2018-11-20 09:49 | 只看該作者
先弄清楚16進(jìn)制與二進(jìn)制的關(guān)系,你知道只亮四個(gè)燈了
回復(fù)

使用道具 舉報(bào)

27#
ID:168851 發(fā)表于 2018-11-20 10:55 | 只看該作者
你的程序只是動(dòng)作了4個(gè)IO口,具體的可以看看這個(gè)哈,你需要將十六進(jìn)制轉(zhuǎn)換為二進(jìn)制,轉(zhuǎn)換后如下(8421轉(zhuǎn)換哈)
0x01 --> 0000 0001 --->只亮最后1個(gè)燈珠
0x02 --> 0000 0010 --->只亮倒數(shù)第2個(gè)燈珠
0x03 --> 0000 0011 --->只亮最后2個(gè)燈珠
0x04 --> 0000 0100 --->只亮倒數(shù)第3個(gè)燈珠
0x11 --> 0001 0001 --->只亮第4個(gè)和第8個(gè)燈珠
0x12 --> 0001 0010 --->只亮第4個(gè)和第7個(gè)燈珠
0x13 --> 0001 0011 --->只亮第4個(gè)、第7個(gè)和第8個(gè)燈珠
0x14 --> 0001 0100 --->只亮第4個(gè)和第6個(gè)燈珠
你仔細(xì)觀察哈,其中1就是你變換的位,所以你整個(gè)過程總共就只變換了4位,即4個(gè)LED燈點(diǎn)亮(主要是第4顆、第6顆、第7顆、第8顆,這幾顆燈珠),所以你應(yīng)該是高電平點(diǎn)亮LED燈珠。
最后給你個(gè)建議,可以看看郭天祥的單片機(jī)視頻教程,講得比較好,聽了就懂了哈
回復(fù)

使用道具 舉報(bào)

28#
ID:429759 發(fā)表于 2018-11-20 11:07 | 只看該作者
需要控制到高4位
回復(fù)

使用道具 舉報(bào)

29#
ID:429813 發(fā)表于 2018-11-20 12:46 | 只看該作者

十六進(jìn)制有abcdef的才能控制到高4位,肯定不能控制8個(gè)
回復(fù)

使用道具 舉報(bào)

30#
ID:432415 發(fā)表于 2018-11-24 16:04 | 只看該作者
你這個(gè)管腳是不是定義的有問題
回復(fù)

使用道具 舉報(bào)

31#
ID:910589 發(fā)表于 2021-4-22 22:46 | 只看該作者
xqj777 發(fā)表于 2018-11-16 18:48
你是要做流水燈呢還是,讓8個(gè)常亮呢?  我默認(rèn)你的led是低電平有效的, 如果是8個(gè)燈常亮,led = 0x00;  如 ...

你好,試了一下你的流水燈的程序,只有前7個(gè)LED會(huì)工作,最后一個(gè)一直不亮。還有用了幾個(gè)其他的流水燈的實(shí)驗(yàn)也是這樣的情況。不知道是為什么?請問您知道嗎?求解答
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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