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

QQ登錄

只需一步,快速開始

搜索

stc8單片機(jī)點(diǎn)亮LED的問題

查看數(shù): 3978 | 評(píng)論數(shù): 28 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁(yè)<-左 右->
    組圖打開中,請(qǐng)稍候......
發(fā)布時(shí)間: 2022-3-23 13:51

正文摘要:

stc8單片機(jī),IO控制LED,IO口接LED正! IO P0^0-P0^4分別控制第1-第5個(gè)LED! IO P1^0-P1^4分別接5個(gè)開關(guān),IO對(duì)地觸發(fā)! 一旦對(duì)應(yīng)的P1口電平被拉低,對(duì)應(yīng)的P0口電平就會(huì)拉高,LED點(diǎn)亮! 要求按順序點(diǎn)亮5個(gè)LED! ...

回復(fù)

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ù)制代碼


ID:161164 發(fā)表于 2022-3-27 12:34
macboa 發(fā)表于 2022-3-27 10:37
各位大佬 已補(bǔ)充,麻煩再給看看吧???

沒救了
砍掉重?zé)挵?/td>
ID:879924 發(fā)表于 2022-3-27 10:37
各位大佬 已補(bǔ)充,麻煩再給看看吧???
ID:879924 發(fā)表于 2022-3-26 10:44
macboa 發(fā)表于 2022-3-25 23:35
小弟是個(gè)菜雞 剛學(xué)沒多久。大佬見笑了。1.因?yàn)槌绦虮容^簡(jiǎn)單沒用頭文件。sbit 忘記上傳了,我發(fā)圖片傳一下 ...

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時(shí)還要看其它Magnetic_Switch?你會(huì)同時(shí)按其它鍵嗎?
4. i是unsigned char,最大是255,不可能i=6000;


ID:879924 發(fā)表于 2022-3-24 22:12
SURUBU1976 發(fā)表于 2022-3-24 12:20
關(guān)鍵字有沒有用對(duì),程序?

程序在二樓
ID:879924 發(fā)表于 2022-3-24 20:43
SURUBU1976 發(fā)表于 2022-3-24 12:20
關(guān)鍵字有沒有用對(duì),程序?

程序在二樓
ID:879924 發(fā)表于 2022-3-24 16:11
還是不行 愁人。仿真沒問題。
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;

ID:507641 發(fā)表于 2022-3-24 12:20
關(guān)鍵字有沒有用對(duì),程序?
ID:879924 發(fā)表于 2022-3-24 11:43

程序在二樓,可能正在審核中
ID:879924 發(fā)表于 2022-3-24 10:34
本帖最后由 macboa 于 2022-3-24 11:42 編輯

程序在二樓
ID:161164 發(fā)表于 2022-3-24 10:34
macboa 發(fā)表于 2022-3-23 16:48
已經(jīng)發(fā)了哈 。麻煩看看

程序呢?
ID:879924 發(fā)表于 2022-3-24 10:11
各位大佬  麻煩再給小弟看看
ID:879924 發(fā)表于 2022-3-24 09:01
gongnn 發(fā)表于 2022-3-24 08:30
P0口配置位就不對(duì)了,得推挽才能高電平驅(qū)動(dòng)LED。

電路圖是錯(cuò)的 已改成灌電流了
ID:879924 發(fā)表于 2022-3-24 09:01
這個(gè)電路圖是錯(cuò)的,實(shí)際是采用灌電流。加了限流電阻。 麻煩各位大佬在給看看程序。
ID:220661 發(fā)表于 2022-3-24 08:30
P0口配置位就不對(duì)了,得推挽才能高電平驅(qū)動(dòng)LED。
ID:879924 發(fā)表于 2022-3-23 21:48
非凡科技 發(fā)表于 2022-3-23 20:59
實(shí)際不能這樣設(shè)計(jì)電路,單片機(jī)iO正極驅(qū)動(dòng)能力很弱的,而且LED要加限流電阻的。對(duì)于STC8芯片要配置IO口模式 ...

已經(jīng)改為灌電流了,加了電阻,這個(gè)圖是個(gè)縮略圖 ,,不知道為啥程序發(fā)不上來
ID:101869 發(fā)表于 2022-3-23 20:59
實(shí)際不能這樣設(shè)計(jì)電路,單片機(jī)iO正極驅(qū)動(dòng)能力很弱的,而且LED要加限流電阻的。對(duì)于STC8芯片要配置IO口模式的,默認(rèn)是高阻抗。你也沒有貼出程序,
ID:879924 發(fā)表于 2022-3-23 16:48
lkc8210 發(fā)表于 2022-3-23 16:19
程序呢?線路圖呢?上傳圖片呢?什么都沒有,人家想幫你也幫不上呀

已經(jīng)發(fā)了哈 。麻煩看看
ID:857072 發(fā)表于 2022-3-23 16:42
限流電阻都不需要的嘛
ID:1005707 發(fā)表于 2022-3-23 16:40
把程序貼上來哦
ID:161164 發(fā)表于 2022-3-23 16:19
程序呢?線路圖呢?上傳圖片呢?什么都沒有,人家想幫你也幫不上呀
ID:220661 發(fā)表于 2022-3-23 15:45
沒程序,靠猜還是靠起卦?

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

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

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