找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2596|回复: 28
打印 上一主题 下一主题
收起左侧

stc8单片机点亮LED的问题

[复制链接]
跳转到指定楼层
楼主
stc8单片机,IO控制LED,IO口接LED正!
IO P0^0-P0^4分别控制第1-第5个LED!
IO P1^0-P1^4分别接5个开关,IO对地触发!
一旦对应的P1口电平被拉低,对应的P0口电平就会拉高,LED点亮!

要求按顺序点亮5个LED!如果顺序错了,
会全部灭掉,重新开始点!

但是遇到的问题是:
每次一上电,第一个LED就会亮,
然后顺序对了也会全部灭掉,
但是第二次就对了,
第二次第一个LED也不会亮了。

请问这是什么原因啊???
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:879924 发表于 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;
复制代码


回复

使用道具 举报

来自 3#
ID:879924 发表于 2022-3-24 10:06 | 只看该作者

回复

使用道具 举报

地板
ID:220661 发表于 2022-3-23 15:45 | 只看该作者
没程序,靠猜还是靠起卦?
回复

使用道具 举报

5#
ID:161164 发表于 2022-3-23 16:19 | 只看该作者
程序呢?线路图呢?上传图片呢?什么都没有,人家想帮你也帮不上呀
回复

使用道具 举报

6#
ID:879924 发表于 2022-3-23 16:23 来自手机 | 只看该作者
本帖最后由 macboa 于 2022-3-24 10:07 编辑

你好 这是电路图
回复

使用道具 举报

7#
ID:1005707 发表于 2022-3-23 16:40 | 只看该作者
把程序贴上来哦
回复

使用道具 举报

8#
ID:857072 发表于 2022-3-23 16:42 来自手机 | 只看该作者
限流电阻都不需要的嘛
回复

使用道具 举报

9#
ID:879924 发表于 2022-3-23 16:48 | 只看该作者
lkc8210 发表于 2022-3-23 16:19
程序呢?线路图呢?上传图片呢?什么都没有,人家想帮你也帮不上呀

已经发了哈 。麻烦看看
回复

使用道具 举报

10#
ID:879924 发表于 2022-3-23 20:43 | 只看该作者
本帖最后由 macboa 于 2022-3-24 10:08 编辑

此电路图错误,删掉

111捕获.PNG (142.83 KB, 下载次数: 87)

111捕获.PNG
回复

使用道具 举报

11#
ID:101869 发表于 2022-3-23 20:59 来自手机 | 只看该作者
实际不能这样设计电路,单片机iO正极驱动能力很弱的,而且LED要加限流电阻的。对于STC8芯片要配置IO口模式的,默认是高阻抗。你也没有贴出程序,
回复

使用道具 举报

12#
ID:879924 发表于 2022-3-23 21:48 | 只看该作者
非凡科技 发表于 2022-3-23 20:59
实际不能这样设计电路,单片机iO正极驱动能力很弱的,而且LED要加限流电阻的。对于STC8芯片要配置IO口模式 ...

已经改为灌电流了,加了电阻,这个图是个缩略图 ,,不知道为啥程序发不上来
回复

使用道具 举报

13#
ID:220661 发表于 2022-3-24 08:30 | 只看该作者
P0口配置位就不对了,得推挽才能高电平驱动LED。
回复

使用道具 举报

14#
ID:879924 发表于 2022-3-24 09:01 来自手机 | 只看该作者
这个电路图是错的,实际是采用灌电流。加了限流电阻。 麻烦各位大佬在给看看程序。
回复

使用道具 举报

15#
ID:879924 发表于 2022-3-24 09:01 来自手机 | 只看该作者
gongnn 发表于 2022-3-24 08:30
P0口配置位就不对了,得推挽才能高电平驱动LED。

电路图是错的 已改成灌电流了
回复

使用道具 举报

16#
ID:879924 发表于 2022-3-24 10:11 | 只看该作者
各位大佬  麻烦再给小弟看看
回复

使用道具 举报

17#
ID:161164 发表于 2022-3-24 10:34 | 只看该作者
macboa 发表于 2022-3-23 16:48
已经发了哈 。麻烦看看

程序呢?
回复

使用道具 举报

18#
ID:879924 发表于 2022-3-24 10:34 | 只看该作者
本帖最后由 macboa 于 2022-3-24 11:42 编辑

程序在二楼
回复

使用道具 举报

19#
ID:879924 发表于 2022-3-24 11:43 | 只看该作者

程序在二楼,可能正在审核中
回复

使用道具 举报

20#
ID:507641 发表于 2022-3-24 12:20 | 只看该作者
关键字有没有用对,程序?
回复

使用道具 举报

21#
ID:879924 发表于 2022-3-24 12:41 | 只看该作者
lkc8210 发表于 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;

回复

使用道具 举报

22#
ID:879924 发表于 2022-3-24 16:11 来自手机 | 只看该作者
还是不行 愁人。仿真没问题。
回复

使用道具 举报

23#
ID:879924 发表于 2022-3-24 20:43 来自手机 | 只看该作者
SURUBU1976 发表于 2022-3-24 12:20
关键字有没有用对,程序?

程序在二楼
回复

使用道具 举报

24#
ID:879924 发表于 2022-3-24 22:12 来自手机 | 只看该作者
SURUBU1976 发表于 2022-3-24 12:20
关键字有没有用对,程序?

程序在二楼
回复

使用道具 举报

25#
ID:161164 发表于 2022-3-25 00:16 | 只看该作者
macboa 发表于 2022-3-24 11:43
程序在二楼,可能正在审核中

1. 程序不全,头文档呢?sbit呢?delay1000ms()呢?
2. 程序结构极其不合理,不要while(1)包while(1)包while(XXX)
3. 按键扫描太累赘,为什么看Magnetic_Switch0是不是0时还要看其它Magnetic_Switch?你会同时按其它键吗?
4. i是unsigned char,最大是255,不可能i=6000;


回复

使用道具 举报

26#
ID:879924 发表于 2022-3-25 23:33 来自手机 | 只看该作者
lkc8210 发表于 2022-3-25 00:16
1. 程序不全,头文档呢?sbit呢?delay1000ms()呢?
2. 程序结构极其不合理,不要while(1)包while(1)包w ...

小弟是个菜鸡 刚学没多久。大佬见笑了。1.因为程序比较简单没用头文件。2. 因为实在太菜了,结构确实不合理,但我又不知道其他方法。请大佬指点一下。3.sbit 忘记上传了,我发图片传一下。4.确实是的,已经修改

CFCA5F70-FFC5-467C-9E22-6356495DEEA4.jpeg (763.88 KB, 下载次数: 109)

CFCA5F70-FFC5-467C-9E22-6356495DEEA4.jpeg
回复

使用道具 举报

27#
ID:879924 发表于 2022-3-25 23:35 来自手机 | 只看该作者
lkc8210 发表于 2022-3-25 00:16
1. 程序不全,头文档呢?sbit呢?delay1000ms()呢?
2. 程序结构极其不合理,不要while(1)包while(1)包w ...

小弟是个菜鸡 刚学没多久。大佬见笑了。1.因为程序比较简单没用头文件。sbit 忘记上传了,我发图片传一下。 delay1000ms()就是用stcisp生成的这个应该不会错。2. 因为实在太菜了,结构确实不合理,但我又不知道其他方法。请大佬指点一下。3.确实是想保险点,怕同时按下。4.已经修改。

2C623454-D2F0-4C04-9FE9-B39F32D1B1F3.jpeg (763.88 KB, 下载次数: 68)

2C623454-D2F0-4C04-9FE9-B39F32D1B1F3.jpeg
回复

使用道具 举报

28#
ID:879924 发表于 2022-3-26 10:44 | 只看该作者
macboa 发表于 2022-3-25 23:35
小弟是个菜鸡 刚学没多久。大佬见笑了。1.因为程序比较简单没用头文件。sbit 忘记上传了,我发图片传一下 ...

回复

使用道具 举报

29#
ID:879924 发表于 2022-3-27 10:37 | 只看该作者
各位大佬 已补充,麻烦再给看看吧???
回复

使用道具 举报

30#
ID:161164 发表于 2022-3-27 12:34 | 只看该作者
macboa 发表于 2022-3-27 10:37
各位大佬 已补充,麻烦再给看看吧???

没救了
砍掉重炼吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表