找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc8單片機點亮LED的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:879924 發(fā)表于 2022-3-23 13:51 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
stc8單片機,IO控制LED,IO口接LED正!
IO P0^0-P0^4分別控制第1-第5個LED!
IO P1^0-P1^4分別接5個開關(guān),IO對地觸發(fā)!
一旦對應(yīng)的P1口電平被拉低,對應(yīng)的P0口電平就會拉高,LED點亮!

要求按順序點亮5個LED!如果順序錯了,
會全部滅掉,重新開始點!

但是遇到的問題是:
每次一上電,第一個LED就會亮,
然后順序?qū)α艘矔繙绲簦?br /> 但是第二次就對了,
第二次第一個LED也不會亮了。

請問這是什么原因啊???
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

來自 2#
ID:879924 發(fā)表于 2022-3-23 21:50 | 只看該作者
本帖最后由 macboa 于 2022-3-24 10:12 編輯
  1. void main(void)
  2. {

  3.         unsigned char flag=1;
  4.         unsigned char getflag0=0,getflag1=0,getflag2=0,getflag3=0,getflag4=0;
  5.         unsigned char i=0;
  6.         unsigned char j=0,k=0;const unsigned char setMagnetic_Switch[5]={0,1,2,3,4};
  7.         unsigned char getMagnetic_Switch[5]={0,0,0,0,0};
  8.         
  9.         P0M0=0x00;
  10.         P0M1=0x00;
  11.         P1M0=0x00;
  12.         P1M1=0x00;
  13.         P2M0=0x00;
  14.         P2M1=0x00;
  15.         P3M0=0x00;
  16.         P3M1=0x00;
  17.         P4M0=0x00;
  18.         P4M1=0x00;
  19.         P5M0=0x00;
  20.         P5M1=0x00;
  21.         
  22.         Magnetic_Switch0=1;
  23.         Magnetic_Switch1=1;
  24.         Magnetic_Switch2=1;
  25.         Magnetic_Switch3=1;
  26.         Magnetic_Switch4=1;
  27.         
  28.         Speaker_Switch0=1;
  29.         Speaker_Switch1=1;
  30.         Speaker_Switch2=1;
  31.         Speaker_Switch3=1;
  32.         Speaker_Switch4=1;

  33.         
  34.         getLED0=1;
  35.         getLED1=1;
  36.         getLED2=1;
  37.         getLED3=1;
  38.         getLED4=1;
  39.         
  40.         
  41.         Right_Out1=1;
  42.         Right_Out2=1;

  43.         Wrong_Out=1;


  44.         while(1)
  45.         {        
  46. //獲取
  47.                 while(j<5)
  48.                 {
  49.                         if(Magnetic_Switch0==0&&Magnetic_Switch1!=0&&Magnetic_Switch2!=0&&Magnetic_Switch3!=0&&Magnetic_Switch4!=0&&getflag0==0)
  50.                         {
  51.                                 getMagnetic_Switch[j]=0;
  52.                                 getflag0=1;
  53.                                 getLED0=0;
  54.                                 j++;
  55.                         }
  56.                         if(Magnetic_Switch1==0&&Magnetic_Switch0!=0&&Magnetic_Switch2!=0&&Magnetic_Switch3!=0&&Magnetic_Switch4!=0&&getflag1==0)
  57.                         {
  58.                                 getMagnetic_Switch[j]=1;
  59.                                 getflag1=1;
  60.                                 getLED1=0;
  61.                                 j++;
  62.                         }
  63.                         if(Magnetic_Switch2==0&&Magnetic_Switch0!=0&&Magnetic_Switch1!=0&&Magnetic_Switch3!=0&&Magnetic_Switch4!=0&&getflag2==0)
  64.                         {
  65.                                 getMagnetic_Switch[j]=2;
  66.                                 getflag2=1;
  67.                                 getLED2=0;
  68.                                 j++;
  69.                         }
  70.                         if(Magnetic_Switch3==0&&Magnetic_Switch0!=0&&Magnetic_Switch1!=0&&Magnetic_Switch2!=0&&Magnetic_Switch4!=0&&getflag3==0)
  71.                         {
  72.                                 getMagnetic_Switch[j]=3;
  73.                                 getflag3=1;
  74.                                 getLED3=0;
  75.                                 j++;
  76.                         }
  77.                         if(Magnetic_Switch4==0&&Magnetic_Switch0!=0&&Magnetic_Switch1!=0&&Magnetic_Switch2!=0&&Magnetic_Switch3!=0&&getflag4==0)
  78.                         {
  79.                                 getMagnetic_Switch[j]=4;
  80.                                 getflag4=1;
  81.                                 getLED4=0;
  82.                                 j++;
  83.                         }
  84.                 }
  85.                 j=0;
  86.                 //比較

  87.                 while(1)
  88.                 {
  89.                         if(setMagnetic_Switch[k]==getMagnetic_Switch[k])
  90.                         {               
  91.                                 k++;
  92.                                 if(k<5)
  93.                                         continue;
  94.                                 k=0;
  95.                                 Wrong_Out=1;
  96.                                 Right_Out1=0;
  97.                                 delay1000ms();

  98.                                 while(getLED0==0||getLED1==0||getLED2==0||getLED3==0||getLED4==0)
  99.                                 {
  100.                                         if(Speaker_Switch0==0)
  101.                                         {
  102.                                                 getLED0=1;
  103.                                         }
  104.                                         if(Speaker_Switch1==0)
  105.                                         {
  106.                                                 getLED1=1;
  107.                                         }
  108.                                         if(Speaker_Switch2==0)
  109.                                         {
  110.                                                 getLED2=1;
  111.                                         }
  112.                                         if(Speaker_Switch3==0)
  113.                                         {
  114.                                                 getLED3=1;
  115.                                         }
  116.                                         if(Speaker_Switch4==0)
  117.                                         {
  118.                                                 getLED4=1;
  119.                                         }
  120.                                 }        
  121.                                 Right_Out2=0;
  122.                                 Wrong_Out=1;
  123.                                 delay1000ms();               
  124.                                 i=6000;
  125.                                 while(i>0)
  126.                                 {
  127.                                         delay1000ms();
  128.                                         i--;
  129.                                 }        
  130.                                 i=0;
  131.                                 break;
  132.                         }
  133.                         else
  134.                         {

  135.                                 getLED0=0;
  136.                                 getLED1=0;
  137.                                 getLED2=0;
  138.                                 getLED3=0;
  139.                                 getLED4=0;
  140.                                 delay1000ms();
  141.                                 getLED0=1;
  142.                                 getLED1=1;
  143.                                 getLED2=1;
  144.                                 getLED3=1;
  145.                                 getLED4=1;
  146.                                 delay1000ms();
  147.                                 getLED0=0;
  148.                                 getLED1=0;
  149.                                 getLED2=0;
  150.                                 getLED3=0;
  151.                                 getLED4=0;
  152.                                 delay1000ms();
  153.                                 getLED0=1;
  154.                                 getLED1=1;
  155.                                 getLED2=1;
  156.                                 getLED3=1;
  157.                                 getLED4=1;
  158.                                 delay1000ms();
  159.                                 getLED0=0;
  160.                                 getLED1=0;
  161.                                 getLED2=0;
  162.                                 getLED3=0;
  163.                                 getLED4=0;
  164.                                 delay1000ms();
  165.                                 getLED0=1;
  166.                                 getLED1=1;
  167.                                 getLED2=1;
  168.                                 getLED3=1;
  169.                                 getLED4=1;
  170.                                 delay1000ms();
  171.                                 
  172.                                 
  173.                                 Wrong_Out=0;
  174.                                 Right_Out1=1;
  175.                                 break;
  176.                         }
  177.                 }
  178.                 Magnetic_Switch0=1;
  179.                 Magnetic_Switch1=1;
  180.                 Magnetic_Switch2=1;
  181.                 Magnetic_Switch3=1;
  182.                 Magnetic_Switch4=1;
  183.                 getflag0=0;
  184.                 getflag1=0;
  185.                 getflag2=0;
  186.                 getflag3=0;
  187.                 getflag4=0;

  188.                 Speaker_Switch0=1;
  189.                 Speaker_Switch1=1;
  190.                 Speaker_Switch2=1;
  191.                 Speaker_Switch3=1;
  192.                 Speaker_Switch4=1;
復(fù)制代碼


回復(fù)

使用道具 舉報

來自 3#
ID:879924 發(fā)表于 2022-3-24 10:06 | 只看該作者

回復(fù)

使用道具 舉報

地板
ID:220661 發(fā)表于 2022-3-23 15:45 | 只看該作者
沒程序,靠猜還是靠起卦?
回復(fù)

使用道具 舉報

5#
ID:161164 發(fā)表于 2022-3-23 16:19 | 只看該作者
程序呢?線路圖呢?上傳圖片呢?什么都沒有,人家想幫你也幫不上呀
回復(fù)

使用道具 舉報

6#
ID:879924 發(fā)表于 2022-3-23 16:23 來自手機 | 只看該作者
本帖最后由 macboa 于 2022-3-24 10:07 編輯

你好 這是電路圖
回復(fù)

使用道具 舉報

7#
ID:1005707 發(fā)表于 2022-3-23 16:40 | 只看該作者
把程序貼上來哦
回復(fù)

使用道具 舉報

8#
ID:857072 發(fā)表于 2022-3-23 16:42 來自手機 | 只看該作者
限流電阻都不需要的嘛
回復(fù)

使用道具 舉報

9#
ID:879924 發(fā)表于 2022-3-23 16:48 | 只看該作者
lkc8210 發(fā)表于 2022-3-23 16:19
程序呢?線路圖呢?上傳圖片呢?什么都沒有,人家想幫你也幫不上呀

已經(jīng)發(fā)了哈 。麻煩看看
回復(fù)

使用道具 舉報

10#
ID:879924 發(fā)表于 2022-3-23 20:43 | 只看該作者
本帖最后由 macboa 于 2022-3-24 10:08 編輯

此電路圖錯誤,刪掉

111捕獲.PNG (142.83 KB, 下載次數(shù): 107)

111捕獲.PNG
回復(fù)

使用道具 舉報

11#
ID:101869 發(fā)表于 2022-3-23 20:59 來自手機 | 只看該作者
實際不能這樣設(shè)計電路,單片機iO正極驅(qū)動能力很弱的,而且LED要加限流電阻的。對于STC8芯片要配置IO口模式的,默認是高阻抗。你也沒有貼出程序,
回復(fù)

使用道具 舉報

12#
ID:879924 發(fā)表于 2022-3-23 21:48 | 只看該作者
非凡科技 發(fā)表于 2022-3-23 20:59
實際不能這樣設(shè)計電路,單片機iO正極驅(qū)動能力很弱的,而且LED要加限流電阻的。對于STC8芯片要配置IO口模式 ...

已經(jīng)改為灌電流了,加了電阻,這個圖是個縮略圖 ,,不知道為啥程序發(fā)不上來
回復(fù)

使用道具 舉報

13#
ID:220661 發(fā)表于 2022-3-24 08:30 | 只看該作者
P0口配置位就不對了,得推挽才能高電平驅(qū)動LED。
回復(fù)

使用道具 舉報

14#
ID:879924 發(fā)表于 2022-3-24 09:01 來自手機 | 只看該作者
這個電路圖是錯的,實際是采用灌電流。加了限流電阻。 麻煩各位大佬在給看看程序。
回復(fù)

使用道具 舉報

15#
ID:879924 發(fā)表于 2022-3-24 09:01 來自手機 | 只看該作者
gongnn 發(fā)表于 2022-3-24 08:30
P0口配置位就不對了,得推挽才能高電平驅(qū)動LED。

電路圖是錯的 已改成灌電流了
回復(fù)

使用道具 舉報

16#
ID:879924 發(fā)表于 2022-3-24 10:11 | 只看該作者
各位大佬  麻煩再給小弟看看
回復(fù)

使用道具 舉報

17#
ID:161164 發(fā)表于 2022-3-24 10:34 | 只看該作者
macboa 發(fā)表于 2022-3-23 16:48
已經(jīng)發(fā)了哈 。麻煩看看

程序呢?
回復(fù)

使用道具 舉報

18#
ID:879924 發(fā)表于 2022-3-24 10:34 | 只看該作者
本帖最后由 macboa 于 2022-3-24 11:42 編輯

程序在二樓
回復(fù)

使用道具 舉報

19#
ID:879924 發(fā)表于 2022-3-24 11:43 | 只看該作者

程序在二樓,可能正在審核中
回復(fù)

使用道具 舉報

20#
ID:507641 發(fā)表于 2022-3-24 12:20 | 只看該作者
關(guān)鍵字有沒有用對,程序?
回復(fù)

使用道具 舉報

21#
ID:879924 發(fā)表于 2022-3-24 12:41 | 只看該作者
lkc8210 發(fā)表于 2022-3-23 16:19
程序呢?線路圖呢?上傳圖片呢?什么都沒有,人家想幫你也幫不上呀

void main(void)
{

        unsigned char flag=1;
        unsigned char getflag0=0,getflag1=0,getflag2=0,getflag3=0,getflag4=0;
        unsigned char i=0;
        unsigned char j=0,k=0;const unsigned char setMagnetic_Switch[5]={0,1,2,3,4};
        unsigned char getMagnetic_Switch[5]={0,0,0,0,0};
        
        P0M0=0x00;
        P0M1=0x00;
        P1M0=0x00;
        P1M1=0x00;
        P2M0=0x00;
        P2M1=0x00;
        P3M0=0x00;
        P3M1=0x00;
        P4M0=0x00;
        P4M1=0x00;
        P5M0=0x00;
        P5M1=0x00;
        
        Magnetic_Switch0=1;
        Magnetic_Switch1=1;
        Magnetic_Switch2=1;
        Magnetic_Switch3=1;
        Magnetic_Switch4=1;
        
        Speaker_Switch0=1;
        Speaker_Switch1=1;
        Speaker_Switch2=1;
        Speaker_Switch3=1;
        Speaker_Switch4=1;

        
        getLED0=1;
        getLED1=1;
        getLED2=1;
        getLED3=1;
        getLED4=1;
        
        
        Right_Out1=1;
        Right_Out2=1;

        Wrong_Out=1;


        while(1)
        {        
//獲取
                while(j<5)
                {
                        if(Magnetic_Switch0==0&&Magnetic_Switch1!=0&&Magnetic_Switch2!=0&&Magnetic_Switch3!=0&&Magnetic_Switch4!=0&&getflag0==0)
                        {
                                getMagnetic_Switch[j]=0;
                                getflag0=1;
                                getLED0=0;
                                j++;
                        }
                        if(Magnetic_Switch1==0&&Magnetic_Switch0!=0&&Magnetic_Switch2!=0&&Magnetic_Switch3!=0&&Magnetic_Switch4!=0&&getflag1==0)
                        {
                                getMagnetic_Switch[j]=1;
                                getflag1=1;
                                getLED1=0;
                                j++;
                        }
                        if(Magnetic_Switch2==0&&Magnetic_Switch0!=0&&Magnetic_Switch1!=0&&Magnetic_Switch3!=0&&Magnetic_Switch4!=0&&getflag2==0)
                        {
                                getMagnetic_Switch[j]=2;
                                getflag2=1;
                                getLED2=0;
                                j++;
                        }
                        if(Magnetic_Switch3==0&&Magnetic_Switch0!=0&&Magnetic_Switch1!=0&&Magnetic_Switch2!=0&&Magnetic_Switch4!=0&&getflag3==0)
                        {
                                getMagnetic_Switch[j]=3;
                                getflag3=1;
                                getLED3=0;
                                j++;
                        }
                        if(Magnetic_Switch4==0&&Magnetic_Switch0!=0&&Magnetic_Switch1!=0&&Magnetic_Switch2!=0&&Magnetic_Switch3!=0&&getflag4==0)
                        {
                                getMagnetic_Switch[j]=4;
                                getflag4=1;
                                getLED4=0;
                                j++;
                        }
                }
                j=0;
                //比較

                while(1)
                {
                        if(setMagnetic_Switch[k]==getMagnetic_Switch[k])
                        {               
                                k++;
                                if(k<5)
                                        continue;
                                k=0;
                                Wrong_Out=1;
                                Right_Out1=0;
                                delay1000ms();

                                while(getLED0==0||getLED1==0||getLED2==0||getLED3==0||getLED4==0)
                                {
                                        if(Speaker_Switch0==0)
                                        {
                                                getLED0=1;
                                        }
                                        if(Speaker_Switch1==0)
                                        {
                                                getLED1=1;
                                        }
                                        if(Speaker_Switch2==0)
                                        {
                                                getLED2=1;
                                        }
                                        if(Speaker_Switch3==0)
                                        {
                                                getLED3=1;
                                        }
                                        if(Speaker_Switch4==0)
                                        {
                                                getLED4=1;
                                        }
                                }        
                                Right_Out2=0;
                                Wrong_Out=1;
                                delay1000ms();               
                                i=6000;
                                while(i>0)
                                {
                                        delay1000ms();
                                        i--;
                                }        
                                i=0;
                                break;
                        }
                        else
                        {

                                getLED0=0;
                                getLED1=0;
                                getLED2=0;
                                getLED3=0;
                                getLED4=0;
                                delay1000ms();
                                getLED0=1;
                                getLED1=1;
                                getLED2=1;
                                getLED3=1;
                                getLED4=1;
                                delay1000ms();
                                getLED0=0;
                                getLED1=0;
                                getLED2=0;
                                getLED3=0;
                                getLED4=0;
                                delay1000ms();
                                getLED0=1;
                                getLED1=1;
                                getLED2=1;
                                getLED3=1;
                                getLED4=1;
                                delay1000ms();
                                getLED0=0;
                                getLED1=0;
                                getLED2=0;
                                getLED3=0;
                                getLED4=0;
                                delay1000ms();
                                getLED0=1;
                                getLED1=1;
                                getLED2=1;
                                getLED3=1;
                                getLED4=1;
                                delay1000ms();
                                
                                
                                Wrong_Out=0;
                                Right_Out1=1;
                                break;
                        }
                }
                Magnetic_Switch0=1;
                Magnetic_Switch1=1;
                Magnetic_Switch2=1;
                Magnetic_Switch3=1;
                Magnetic_Switch4=1;
                getflag0=0;
                getflag1=0;
                getflag2=0;
                getflag3=0;
                getflag4=0;

                Speaker_Switch0=1;
                Speaker_Switch1=1;
                Speaker_Switch2=1;
                Speaker_Switch3=1;
                Speaker_Switch4=1;

回復(fù)

使用道具 舉報

22#
ID:879924 發(fā)表于 2022-3-24 16:11 來自手機 | 只看該作者
還是不行 愁人。仿真沒問題。
回復(fù)

使用道具 舉報

23#
ID:879924 發(fā)表于 2022-3-24 20:43 來自手機 | 只看該作者
SURUBU1976 發(fā)表于 2022-3-24 12:20
關(guān)鍵字有沒有用對,程序?

程序在二樓
回復(fù)

使用道具 舉報

24#
ID:879924 發(fā)表于 2022-3-24 22:12 來自手機 | 只看該作者
SURUBU1976 發(fā)表于 2022-3-24 12:20
關(guān)鍵字有沒有用對,程序?

程序在二樓
回復(fù)

使用道具 舉報

25#
ID:161164 發(fā)表于 2022-3-25 00:16 | 只看該作者
macboa 發(fā)表于 2022-3-24 11:43
程序在二樓,可能正在審核中

1. 程序不全,頭文檔呢?sbit呢?delay1000ms()呢?
2. 程序結(jié)構(gòu)極其不合理,不要while(1)包while(1)包while(XXX)
3. 按鍵掃描太累贅,為什么看Magnetic_Switch0是不是0時還要看其它Magnetic_Switch?你會同時按其它鍵嗎?
4. i是unsigned char,最大是255,不可能i=6000;


回復(fù)

使用道具 舉報

26#
ID:879924 發(fā)表于 2022-3-25 23:33 來自手機 | 只看該作者
lkc8210 發(fā)表于 2022-3-25 00:16
1. 程序不全,頭文檔呢?sbit呢?delay1000ms()呢?
2. 程序結(jié)構(gòu)極其不合理,不要while(1)包while(1)包w ...

小弟是個菜雞 剛學(xué)沒多久。大佬見笑了。1.因為程序比較簡單沒用頭文件。2. 因為實在太菜了,結(jié)構(gòu)確實不合理,但我又不知道其他方法。請大佬指點一下。3.sbit 忘記上傳了,我發(fā)圖片傳一下。4.確實是的,已經(jīng)修改

CFCA5F70-FFC5-467C-9E22-6356495DEEA4.jpeg (763.88 KB, 下載次數(shù): 155)

CFCA5F70-FFC5-467C-9E22-6356495DEEA4.jpeg
回復(fù)

使用道具 舉報

27#
ID:879924 發(fā)表于 2022-3-25 23:35 來自手機 | 只看該作者
lkc8210 發(fā)表于 2022-3-25 00:16
1. 程序不全,頭文檔呢?sbit呢?delay1000ms()呢?
2. 程序結(jié)構(gòu)極其不合理,不要while(1)包while(1)包w ...

小弟是個菜雞 剛學(xué)沒多久。大佬見笑了。1.因為程序比較簡單沒用頭文件。sbit 忘記上傳了,我發(fā)圖片傳一下。 delay1000ms()就是用stcisp生成的這個應(yīng)該不會錯。2. 因為實在太菜了,結(jié)構(gòu)確實不合理,但我又不知道其他方法。請大佬指點一下。3.確實是想保險點,怕同時按下。4.已經(jīng)修改。

2C623454-D2F0-4C04-9FE9-B39F32D1B1F3.jpeg (763.88 KB, 下載次數(shù): 92)

2C623454-D2F0-4C04-9FE9-B39F32D1B1F3.jpeg
回復(fù)

使用道具 舉報

28#
ID:879924 發(fā)表于 2022-3-26 10:44 | 只看該作者
macboa 發(fā)表于 2022-3-25 23:35
小弟是個菜雞 剛學(xué)沒多久。大佬見笑了。1.因為程序比較簡單沒用頭文件。sbit 忘記上傳了,我發(fā)圖片傳一下 ...

回復(fù)

使用道具 舉報

29#
ID:879924 發(fā)表于 2022-3-27 10:37 | 只看該作者
各位大佬 已補充,麻煩再給看看吧???
回復(fù)

使用道具 舉報

30#
ID:161164 發(fā)表于 2022-3-27 12:34 | 只看該作者
macboa 發(fā)表于 2022-3-27 10:37
各位大佬 已補充,麻煩再給看看吧???

沒救了
砍掉重?zé)挵?/td>
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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