標(biāo)題: 為什么單片機(jī)流水燈這樣寫(xiě),只能亮4個(gè)LED。我要亮8個(gè)燈 [打印本頁(yè)]

作者: jyk    時(shí)間: 2018-11-16 16:55
標(biāo)題: 為什么單片機(jī)流水燈這樣寫(xiě),只能亮4個(gè)LED。我要亮8個(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);

作者: angmall    時(shí)間: 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);




作者: kr123crg    時(shí)間: 2018-11-16 17:14
led是8位IO口嗎?沒(méi)太看懂你的代碼
作者: liyongan_1985    時(shí)間: 2018-11-16 17:22
你目前的位操作就只操作到了四個(gè)IO口,所以。。。。。。
作者: MMU_FS    時(shí)間: 2018-11-16 17:29
本帖最后由 MMU_FS 于 2018-11-16 17:37 編輯

這樣是不對(duì)的,要按十六進(jìn)制來(lái),假設(shè)led映射的P0,應(yīng)該這樣寫(xiě)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);
    }

}
         



作者: PIG_PP    時(shí)間: 2018-11-16 17:42
你的數(shù)值都不對(duì),一個(gè)是8421,8421.
作者: weiweimao1    時(shí)間: 2018-11-16 17:49
把led后邊的數(shù)改為:0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80。試一下。
作者: JIEDI    時(shí)間: 2018-11-16 18:10
有沒(méi)有圖
作者: xqj777    時(shí)間: 2018-11-16 18:48
你是要做流水燈呢還是,讓8個(gè)常亮呢?  我默認(rèn)你的led是低電平有效的, 如果是8個(gè)燈常亮,led = 0x00;  如果要依次點(diǎn)亮8個(gè)燈,你可以采用循環(huán)語(yǔ)句 led=0xff ;for(i=0;i<8; i++){led &= (0xfe<<i);  delay(50000); }
作者: jyk    時(shí)間: 2018-11-16 22:10
我就是想用最原始的方法試試,才開(kāi)始學(xué)不久。各位大神的我都試試再說(shuō)哈
作者: jyk    時(shí)間: 2018-11-16 22:17
angmall 發(fā)表于 2018-11-16 17:07
給你改了一下試試。

        while(1)

大神,我的為什么程序出現(xiàn)了什么問(wèn)題呢?
作者: jyk    時(shí)間: 2018-11-16 22:18
kr123crg 發(fā)表于 2018-11-16 17:14
led是8位IO口嗎?沒(méi)太看懂你的代碼

是8位的IO
作者: jyk    時(shí)間: 2018-11-16 22:18
liyongan_1985 發(fā)表于 2018-11-16 17:22
你目前的位操作就只操作到了四個(gè)IO口,所以。。。。。。

的確是這樣,為什么呢?出錯(cuò)在那呢?
作者: mosqu    時(shí)間: 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
你的是低電平有效還是高電平有效,怎么流水燈法,沒(méi)明白。
你程序?qū)?yīng)2進(jìn)制是這樣,對(duì)應(yīng)輸出,最多就控制了4位LED
作者: jyk    時(shí)間: 2018-11-17 16:14
mosqu 發(fā)表于 2018-11-17 08:32
0x01  ->  0000 0001
0x02  ->  0000 0010
0x03  ->  0000 0011

噢噢,明白了
作者: cgm423    時(shí)間: 2018-11-17 17:43
這個(gè)和iIO的定義有關(guān)系
作者: Glary    時(shí)間: 2018-11-17 19:05
十六進(jìn)制有abcdef的才能控制到高4位,肯定不能控制8個(gè)

作者: 555jb    時(shí)間: 2018-11-17 23:08
你可以使用51里的移位函數(shù),只要讓一個(gè)IO口的燈亮,接下來(lái)對(duì)這個(gè)IO口進(jìn)行位移

作者: z668820    時(shí)間: 2018-11-18 15:44
改成0xff試試
作者: Z1235789    時(shí)間: 2018-11-18 20:24
如果樓主的LED燈共陰的話(huà)
作者: Z1235789    時(shí)間: 2018-11-18 20:27
如果樓主LED共陰的話(huà)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);如果共陽(yáng)的話(huà)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);
作者: mrming    時(shí)間: 2018-11-19 16:15
8421,8421
作者: 1270013048    時(shí)間: 2018-11-19 18:38
你LED賦值不對(duì),當(dāng)然不能亮8個(gè)啊
作者: 南瓜cyf    時(shí)間: 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--);  } }這樣也可以
作者: zxc680128    時(shí)間: 2018-11-20 09:28
你的電路圖?是高電平,還是 低電平點(diǎn)亮?把你的賦值寫(xiě)成16進(jìn)制,就明白為何只亮四個(gè)燈了。
作者: zxc680128    時(shí)間: 2018-11-20 09:49
先弄清楚16進(jìn)制與二進(jìn)制的關(guān)系,你知道只亮四個(gè)燈了
作者: 1059552438    時(shí)間: 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ì)觀(guān)察哈,其中1就是你變換的位,所以你整個(gè)過(guò)程總共就只變換了4位,即4個(gè)LED燈點(diǎn)亮(主要是第4顆、第6顆、第7顆、第8顆,這幾顆燈珠),所以你應(yīng)該是高電平點(diǎn)亮LED燈珠。
最后給你個(gè)建議,可以看看郭天祥的單片機(jī)視頻教程,講得比較好,聽(tīng)了就懂了哈
作者: xiaooof    時(shí)間: 2018-11-20 11:07
需要控制到高4位
作者: tebieye    時(shí)間: 2018-11-20 12:46

十六進(jìn)制有abcdef的才能控制到高4位,肯定不能控制8個(gè)
作者: frankwu    時(shí)間: 2018-11-24 16:04
你這個(gè)管腳是不是定義的有問(wèn)題
作者: 小小小學(xué)扎    時(shí)間: 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)也是這樣的情況。不知道是為什么?請(qǐng)問(wèn)您知道嗎?求解答




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1