标题: 单片机抢答器相关 求帮助 [打印本页]

作者: 田所浩二单推人    时间: 2021-5-13 15:19
标题: 单片机抢答器相关 求帮助
要求和仿真出现的问题如图 不知道是代码/电路问题还是仿真自身的不足

Proteus没有带dp的单管 就用了mpx4
代码如下
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. uchar code segtab[]=
  5. {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
  6. 0x83,0xc6,0xa1,0x86,0x8e,0x89,0x8c,0xff,0xbf,0x8d};
  7. uchar dbuf[6]={0,0,0,0,0x12,0x11};
  8. sbit SPK=P1^0;
  9. sbit K1=P2^4;
  10. sbit K2=P2^5;
  11. sbit K3=P2^6;
  12. sbit K4=P2^7;
  13. bit start;

  14. void delay(void)
  15. {   uchar i;
  16.     for(i=0;i<200;i++);
  17. }

  18. void int0(void)interrupt 0
  19. {   start=1;
  20. }


  21. void disp(void)
  22. {  uchar n,bsel;
  23.    bsel=0x01;
  24.    for(n=0;n<6;n++)
  25.    {   P2=bsel;
  26.        P0=segtab[dbuf[n]];
  27.        bsel=_crol_(bsel,1);
  28.        delay();
  29.        P0=0xff;
  30.    }
  31. }


  32. void main(void)
  33. {
  34.     uchar i;
  35.     start=0;
  36.     EX0=1;
  37.     IT0=1;
  38.     EA=1;
  39.     while(1)
  40.     {   while(start==0)disp();
  41.        start=0;
  42.        dbuf[5]=0;
  43.        while((P2&0x0f)==0x0f)disp();
  44.        for(i=0;i<10;i++)disp();
  45.        if((P2&0x0f)!=0x0f)
  46.         {
  47.            if(K1==0)i=1;
  48.            else if(K2==0)i=2;
  49.            else if(K3==0)i=3;
  50.            else if(K4==0)i=4;
  51.            dbuf[5]=i;
  52.            dbuf[i-1]=dbuf[i-1]+1;
  53.            for(i=0;i<200;i++)
  54.             {   delay();
  55.                 SPK=~SPK;
  56.             }
  57.         }
  58.     }
  59. }
复制代码

1.jpg (2.29 MB, 下载次数: 27)

1.jpg

1.gif (288.34 KB, 下载次数: 34)

1.gif

作者: timerzero    时间: 2021-5-13 16:50
电路图都不对啊;P2-7经典组接到正极,数码管只用一位的话1234中接一个啊
作者: 田所浩二单推人    时间: 2021-5-13 18:49
timerzero 发表于 2021-5-13 16:50
电路图都不对啊;P2-7经典组接到正极,数码管只用一位的话1234中接一个啊

请问P2^7怎么接
作者: 田所浩二单推人    时间: 2021-5-13 19:07
目前的情况

2.gif (264.46 KB, 下载次数: 18)

2.gif

作者: timerzero    时间: 2021-5-13 21:02
楼主你好,我是小白所以我这肯定没有答案,如果你有时间能否解释一下下面几句都是什么意思呢?
bsel=0x01;
dbuf[5]=0;

for(i=0;i<200;i++)
            {   delay();
                SPK=~SPK;
            }            谢谢啦/比心
作者: 田所浩二单推人    时间: 2021-5-13 22:01
bsel=0x01;//首先点亮最低位
dbuf[5]=0;//按下PULSE键后,数码管显示0

for(i=0;i<200;i++)//产生100个周期为2ms左右的方波
            {   delay();//延时1ms
                SPK=~SPK;//产生方波
            }      




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1