久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4285|回復: 7
打印 上一主題 下一主題
收起左側

做了一個8路搶答器,可是數碼管顯示亂碼,請大家幫忙看看

[復制鏈接]
跳轉到指定樓層
樓主

程序源碼
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. sbit smg1=P2^0;                //定義數碼管第一位
  4. sbit smg2=P2^1;                //定義數碼管第二位
  5. sbit smg3=P2^2;                //定義數碼管第三位
  6. sbit keyks=P3^0;        //定義開始按鍵
  7. sbit keytz=P3^1;        //定義停止按鍵
  8. sbit keyqc=P3^2;        //定義清除按鍵
  9. sbit key1=P1^0;                //定義1號搶答選手
  10. sbit key2=P1^1;                //定義2號搶答選手
  11. sbit key3=P1^2;                //定義3號搶答選手
  12. sbit key4=P1^3;                //定義4號搶答選手
  13. sbit key5=P1^4;                //定義5號搶答選手
  14. sbit key6=P1^5;                //定義6號搶答選手
  15. sbit key7=P1^6;                //定義7號搶答選手
  16. sbit key8=P1^7;                //定義8號搶答選手
  17. sbit spk=P3^7;                //定義蜂鳴器
  18. int djs=60,js=0;                   //djs和bt是初始倒計時時間,可修改
  19. //int table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  20. int table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40};

  21. void delayms(int x)           //延時函數
  22. {
  23. char i;
  24. while(x--)
  25. {
  26.   for(i=500;i>0;i--);
  27. }
  28. }



  29. void Timer0_init()                        //定時器0初始化
  30. {
  31.       js=0;
  32.           TMOD=0x01;                                  //T0為定時器方式1
  33.       TH0=0x4c;
  34.           TL0=0x00;                        
  35.       //TR0=1;//IT1=1;
  36.           ET0=1;//EX1=1;
  37.           EA=1;        
  38. }

  39. void timer0() interrupt 1 using 1        //定時器0中斷服務函數
  40. {
  41.             TF0=0;
  42.                  TH0=0x4c;
  43.                 TL0=0x00;                                        //賦初值
  44.                 js++;
  45.                 if(js==15)
  46.                   { js=0;
  47.                     djs--;                                        //產生1s的倒計時
  48.                         //led1=~led1;
  49.                    }
  50. }

  51. void djsxs()                                   //顯示倒計時函數
  52. {        int b1,b2;
  53.          b1=djs/10;
  54.         b2=djs%10;                                  // 將倒計時時間分成高低位
  55.         P0=table[b1];
  56.     smg2=0;
  57.     delayms(3);
  58.     smg2=1;                                         //顯示十位數字

  59.         P0=table[b2];
  60.         smg3=0;
  61.         delayms(3);                                 //顯示個位數字
  62.         smg3=1;
  63. }
  64. void djsxs22()                                 
  65. {        
  66.          P0=0x40;
  67.     smg1=0;
  68.     delayms(3);
  69.     smg1=1;                                        //第一位數碼管顯示-

  70.         P0=0x40;
  71.     smg2=0;
  72.     delayms(3);                           //第三位數碼管顯示-
  73.     smg2=1;

  74.         P0=0x40;
  75.         smg3=0;
  76.         delayms(3);
  77.         smg3=1;                                  //第四位數碼管顯示-
  78. }

  79. void djsxs1()
  80. {
  81.         P0=table[1];
  82.     smg1=0;
  83.     delayms(3);
  84.     smg1=1;                                   //第一位數碼管顯示1

  85. }
  86. void djsxs2()
  87. {
  88.         P0=table[2];
  89.     smg1=0;
  90.     delayms(3);
  91.     smg1=1;                                //第一位數碼管顯示2

  92. }
  93. void djsxs3()
  94. {
  95.         P0=table[3];
  96.     smg1=0;
  97.     delayms(3);
  98.     smg1=1;                          //第一位數碼管顯示3

  99. }
  100. void djsxs4()
  101. {
  102.         P0=table[4];
  103.     smg1=0;
  104.     delayms(3);
  105.     smg1=1;                         //第一位數碼管顯示4

  106. }
  107. void djsxs5()
  108. {
  109.         P0=table[5];
  110.     smg1=0;
  111.     delayms(3);
  112.     smg1=1;                   //第一位數碼管顯示5

  113. }
  114. void djsxs6()
  115. {
  116.         P0=table[6];
  117.     smg1=0;
  118.     delayms(3);
  119.     smg1=1;                        //第一位數碼管顯示6

  120. }
  121. void djsxs7()
  122. {
  123.         P0=table[7];
  124.     smg1=0;
  125.     delayms(3);
  126.     smg1=1;                  //第一位數碼管顯示7
  127. }
  128. void djsxs8()
  129. {
  130.         P0=table[8];
  131.     smg1=0;
  132.     delayms(3);
  133.     smg1=1;                 //第一位數碼管顯示8

  134. }
  135. void main()
  136. {
  137. int djs1=60;
  138. Timer0_init();         //初始化定時器中斷
  139. spk=1;                          //蜂鳴器不響
  140.         djs=60;                //倒計時賦值
  141. while(1)
  142. {

  143. LOOP1:   djs=djs1;
  144. djsxs22();        //LOOP1是標號,顯示 -  --

  145.                         if(key1==0)                 //在定時器運行狀態下,key1==0 則說明1號選手按下按鍵
  146.                                                 {
  147.                                                            delayms(3);
  148.                                                            if(key1==0)
  149.                                                            {
  150.                                                             while(!key1);          //去除按鍵抖動后,重新在判斷,是否確實按下
  151.                                                          djs=60;
  152.                                                          while(1)
  153.                                                           {
  154.                                                             TR0=0;                  //定時器停止
  155.                                                                 djsxs();         
  156.                                                            if(key2==0)          //復位按下按下
  157.                                                            {        
  158.                                                                                    delayms(3);                   //去除抖動
  159.                                                                                    if(key2==0)           //再次判斷是否按下復位按鍵
  160.                                                                                    {
  161.                                                                                     while(!key2); //如果按下復位鍵,則回到- --狀態
  162.                                                                                  djs++;
  163.                                                                                  djs1=djs;
  164.                                                                                 }
  165.                                                                         }
  166.                                                            if(key3==0)          //復位按下按下
  167.                                                            {        
  168.                                                                                    delayms(3);                   //去除抖動
  169.                                                                                    if(key3==0)           //再次判斷是否按下復位按鍵
  170.                                                                                    {
  171.                                                                                     while(!key3); //如果按下復位鍵,則回到- --狀態
  172.                                                                                  djs--;
  173.                                                                                  djs1=djs;
  174.                                                                                 }
  175.                                                                         }
  176.                                                            if(key1==0)          //復位按下按下
  177.                                                            {        
  178.                                                                                    delayms(3);                   //去除抖動
  179.                                                                                    if(key1==0)           //再次判斷是否按下復位按鍵
  180.                                                                                    {
  181.                                                                                     while(!key1); //如果按下復位鍵,則回到- --狀態
  182.                                                                                 goto LOOP1;                  //goto語句,回到loop1表號處
  183.                                                                                 }
  184.                                                                         }                                                                                   
  185.                                                           }
  186.                                                         }
  187.                                                 }
  188.                         if(keyks==0)
  189.                         {                  
  190.                           //spk=0;
  191.                            delayms(3);                 //去除按鍵抖動
  192.                            if(keyks==0)
  193.                            {
  194.                             while(!keyks);          //以上表示按下開始按鍵
  195.                                 //spk=1;                           //蜂鳴器不響
  196.                                 TR0=1;                           //啟動定時器 開始倒計時
  197.                                 while(1)
  198.                                   {
  199.                                     djsxs();
  200.                                 if(keytz==0)
  201.                                                 {
  202.                                                            delayms(3);                         //此處表示出去抖動, 以后不一一標出
  203.                                                            if(keytz==0)
  204.                                                            {
  205.                                                             while(!keytz);           //以上表示按下停止按鍵后

  206.                                                             TR0=0;                   //定時器停止

  207.                                                         }
  208.                                                 }
  209.                                    if(keyks==0)
  210.                                                 {
  211.                                                     //spk=0;
  212.                                                            delayms(3);
  213.                                                            if(keyks==0)
  214.                                                            {
  215.                                                             while(!keyks);           //以上表示按下清楚按鍵后
  216.                                                          //spk=1;                           //蜂鳴器不響
  217.                                                             TR0=1;                   //定時器啟動

  218.                                                         }
  219.                                                 }
  220. /***************************以下是八個選手搶答,key1表示1號選手,依次類推,注釋只寫第一位選手,其他和第一個完全一致,************************************/
  221.                                 if((key1==0)&&(TR0==1))                 //在定時器運行狀態下,key1==0 則說明1號選手按下按鍵
  222.                                                 {                 spk=0;                 //蜂鳴器響
  223.                                                            delayms(3);
  224.                                                            if(key1==0)
  225.                                                            {
  226.                                                             while(!key1);          //去除按鍵抖動后,重新在判斷,是否確實按下
  227.                                                           spk=1;                  //蜂鳴器不響
  228.                                                          while(1)
  229.                                                           {
  230.                                                             TR0=0;                  //定時器停止
  231.                                                                  djsxs1();          //顯示選手編號
  232.                                                                 djsxs();          //顯示剩余倒計時時間
  233.                                                            if(keyqc==0)
  234.                                                            {        
  235.                                                                                    delayms(3);                   //去除抖動
  236.                                                                                    if(keyqc==0)
  237.                                                                                    {
  238.                                                                                     while(!keyqc); //如果按下清楚鍵,則回到- --狀態

  239.                                                                                 goto LOOP1;                  //goto語句,回到loop1表號處
  240.                                                                                 }
  241.                                                                                 }                                                                                   
  242.                                                           }
  243.                                                         }
  244.                                                 }
  245.                                 if((key2==0)&&(TR0==1))
  246.                                                 {        spk=0;
  247.                                                            delayms(3);
  248.                                                            if(key2==0)
  249.                                                            {
  250.                                                             while(!key2);
  251.                                                           spk=1;
  252.                                                          while(1)
  253.                                                           {
  254.                                                             TR0=0;
  255.                                                                  djsxs2();
  256.                                                                 djsxs();
  257.                                                            if(keyqc==0)
  258.                                                            {        
  259.                                                                                    delayms(3);
  260.                                                                                    if(keyqc==0)
  261.                                                                                    {
  262.                                                                                     while(!keyqc);

  263.                                                                                 goto LOOP1;        
  264.                                                                                 }
  265.                                                                                 }                                                                                   
  266.                                                           }
  267.                                                         }
  268.                                                 }
  269.                                         if((key3==0)&&(TR0==1))
  270.                                                 {        spk=0;
  271.                                                            delayms(3);
  272.                                                            if(key3==0)
  273.                                                            {
  274.                                                             while(!key3);
  275.                                                           spk=1;
  276.                                                          while(1)
  277.                                                           {
  278.                                                             TR0=0;
  279.                                                                  djsxs3();
  280.                                                                 djsxs();
  281.                                                            if(keyqc==0)
  282.                                                            {        
  283.                                                                                    delayms(3);
  284.                                                                                    if(keyqc==0)
  285.                                                                                    {
  286.                                                                                     while(!keyqc);

  287.                                                                                 goto LOOP1;        
  288.                                                                                 }
  289.                                                                                 }                                                                                   
  290.                                                           }
  291.                                                         }
  292.                                                 }
  293.                                 if((key4==0)&&(TR0==1))
  294.                                                 {        spk=0;
  295.                                                            delayms(3);
  296.                                                            if(key4==0)
  297.                                                            {
  298.                                                             while(!key4);
  299.                                                           spk=1;
  300.                                                          while(1)
  301.                                                           {
  302.                                                             TR0=0;
  303.                                                                  djsxs4();
  304.                                                                 djsxs();
  305.                                                            if(keyqc==0)
  306.                                                            {        
  307.                                                                                    delayms(3);
  308.                                                                                    if(keyqc==0)
  309.                                                                                    {
  310.                                                                                     while(!keyqc);

  311.                                                                                 goto LOOP1;        
  312.                                                                                 }
  313.                                                                                 }                                                                                   
  314.                                                           }
  315.                                                         }
  316.                                                 }
  317.                                         if((key5==0)&&(TR0==1))
  318.                                                 {        spk=0;
  319.                                                            delayms(3);
  320.                                                            if(key5==0)
  321.                                                            {
  322.                                                             while(!key5);
  323.                                                           spk=1;
  324.                                                          while(1)
  325.                                                           {
  326.                                                             TR0=0;
  327.                                                                  djsxs5();
  328.                                                                 djsxs();
  329.                                                            if(keyqc==0)
  330.                                                            {        
  331.                                                                                    delayms(3);
  332.                                                                                    if(keyqc==0)
  333.                                                                                    {
  334.                                                                                     while(!keyqc);

  335.                                                                                 goto LOOP1;        
  336.                                                                                 }
  337.                                                                                 }                                                                                   
  338.                                                           }
  339.                                                         }
  340.                                                 }
  341.                                         if((key6==0)&&(TR0==1))
  342.                                                 {  spk=0;
  343.                                                            delayms(3);
  344.                                                            if(key6==0)
  345.                                                            {
  346.                                                             while(!key6);
  347.                                                           spk=1;
  348.                                                          while(1)
  349.                                                           {
  350.                                                             TR0=0;
  351.                                                                  djsxs6();
  352.                                                                 djsxs();
  353.                                                            if(keyqc==0)
  354.                                                            {        
  355.                                                                                    delayms(3);
  356.                                                                                    if(keyqc==0)
  357.                                                                                    {
  358.                                                                                     while(!keyqc);

  359.                                                                                 goto LOOP1;        
  360.                                                                                 }
  361.                                                                                 }                                                                                   
  362.                                                           }
  363.                                                         }
  364.                                                 }
  365.                                         if((key7==0)&&(TR0==1))
  366.                                                 {        spk=0;
  367.                                                            delayms(3);
  368.                                                            if(key7==0)
  369.                                                            {
  370.                                                             while(!key7);
  371.                                                           spk=1;
  372.                                                          while(1)
  373.                                                           {
  374.                                                             TR0=0;
  375.                                                                  djsxs7();
  376.                                                                 djsxs();
  377.                                                                 if(keyqc==0)
  378.                                                            {        
  379.                                                                                    delayms(3);
  380.                                                                                    if(keyqc==0)
  381.                                                                                    {
  382.                                                                                     while(!keyqc);

  383.                                                                                 goto LOOP1;        
  384.                                                                                 }
  385.                                                                                 }           
  386.                                                           }
  387.                                                         }
  388.                                                 }
  389.                                         if((key8==0)&&(TR0==1))
  390.                                                 {        spk=0;
  391.                                                            delayms(3);
  392.                                                            if(key8==0)
  393.                                                            {
  394.                                                             while(!key8);
  395.                                                         
  396.                                                          while(1)
  397.                                                           {
  398.                                                             TR0=0;
  399.                                                                  spk=1;
  400.                                                                  djsxs8();
  401.                                                                 djsxs();
  402.                                                            if(keyqc==0)
  403.                                                            {        
  404.                                                                                    delayms(3);
  405.                                                                                    if(keyqc==0)
  406.                                                                                    {
  407.                                                                                     while(!keyqc);

  408.                                                                                 goto LOOP1;        
  409.                                                                                 }
  410.                                                                                 }           
  411.                                                                                   }
  412.                                                              }
  413.                                                 }  
  414.                                          if(djs<=5)  spk=0;          //到倒計時小于5是,蜂鳴器響
  415.                                          if(djs==0)                           //當倒計時時間等于0后,需要按清楚鍵恢復
  416.                                           {
  417.                                           while(1)
  418.                                                   {
  419.                                                                  if(keyqc==0)
  420.                                                            {        
  421.                                                                                    delayms(3);
  422.                                                                                    if(keyqc==0)
  423.                                                                                    {
  424.                                                                                     while(!keyqc);
  425.                                                                                 spk=1;                  
  426.                                                                                 goto LOOP1;        
  427.                                                                                 }
  428.                                                                                 }
  429.                                                 }
  430.                                           }

  431.                                   }

  432.                                 }
  433.                            }
  434. }
  435. }
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:375003 發表于 2018-7-22 17:30 | 只看該作者
不知道你弄好了沒有,用上面一個數組;
寫了個測試代碼放在主函數里,
int djs1=60;
Timer0_init();         //初始化定時器中斷
spk=1;                          //蜂鳴器不響
        djs=60;                //倒計時賦值
while(1)
{
        TR0=1;
        if(js)
                {
                        P0=table[js];
                        smg3=1;
                        smg1=1;
                        smg2=1;
                        js=0;//
          }
}

tset1.PNG (32.08 KB, 下載次數: 42)

tset1.PNG
回復

使用道具 舉報

板凳
ID:377510 發表于 2018-7-22 19:41 | 只看該作者
同求解
回復

使用道具 舉報

地板
ID:330538 發表于 2018-7-22 20:14 | 只看該作者
guangshi_wq 發表于 2018-7-22 17:30
不知道你弄好了沒有,用上面一個數組;
寫了個測試代碼放在主函數里,
int djs1=60;

是插入我上面的代碼里嗎
回復

使用道具 舉報

5#
ID:330538 發表于 2018-7-22 20:26 | 只看該作者
guangshi_wq 發表于 2018-7-22 17:30
不知道你弄好了沒有,用上面一個數組;
寫了個測試代碼放在主函數里,
int djs1=60;

在開發板上可以顯示1,然后在那里就不行額
回復

使用道具 舉報

6#
ID:330538 發表于 2018-7-22 20:28 | 只看該作者
guangshi_wq 發表于 2018-7-22 17:30
不知道你弄好了沒有,用上面一個數組;
寫了個測試代碼放在主函數里,
int djs1=60;

是不是我畫板有問題
回復

使用道具 舉報

7#
ID:330538 發表于 2018-7-22 21:16 | 只看該作者

你也出現這種問題?、
回復

使用道具 舉報

8#
ID:375003 發表于 2018-7-23 01:33 | 只看該作者
終于搞好了
增加
#define uchar unsigned char //¸Ä¶t′|
#define uint unsigned int
sbit smg4=P2^3;                //¶¨òåêyÂë1üμúèyλ
void delayms(uint x)  //¸Äèy′|         //Ñóê±oˉêy
{
uchar i;
while(x--)
{
  for(i=50;i>0;i--); //¸Äò»′|;
}
}
void Timer0_init()                        //¶¨ê±Æ÷03õê¼»ˉ
{
      js=0;  TMOD=0x01;                   //T0Îa¶¨ê±Æ÷·½ê½1
      TH0=0x4c;
          TL0=0x00;                        
      //TR0=1;//IT1=1;
          ET0=1;//EX1=1;
          EA=1;        
}
void timer0() interrupt 1 using 1        //¶¨ê±Æ÷0ÖD¶Ï·tÎñoˉêy
{
        TF0=0;
        TH0=0x4c;
        TL0=0x00;                                        //¸33õÖμ
        js++;
        if(js==15)
        {
                js=0;
          djs--;                                        //2úéú1sμÄμ1¼Æê±
        //led1=~led1;
        }
}

void djsxs()                                   //ÏÔê¾μ1¼Æê±oˉêy
{
          uchar shi,ge;
                shi=djs/10;
                ge=djs%10;
        // ½«μ1¼Æê±ê±¼ä·Ö3é¸ßμíλ
                smg1=0;  
                //delayms(3);        //ÏÔê¾ê®Î»êy×Ö
                P0=table[shi];
                smg3=1;
                delayms(3);                                 //ÏÔ꾸öλêy×Ö
                smg3=0;
                //delayms(3);
          P0=table[ge];
                smg4=1;
                delayms(3);
                smg4=0;
                smg2=0;
}
void djsxs22()                                 
{        
         P0=0xc0;
    smg1=1;
    delayms(3);
    smg1=0;                                        //μúò»Î»êyÂë1üÏÔê¾-
    smg2=1;
    delayms(3);                           //μúèyλêyÂë1üÏÔê¾-
    smg2=0;
                smg3=1;
                delayms(3);
                smg3=0;  
                smg4=1;
                delayms(3);
                smg4=0;         //μúËÄλêyÂë1üÏÔê¾-
}

void djsxs1(uchar aa)
{
        P0=table[aa];
    smg1=0;
    delayms(3);
    smg1=1;                                   //μúò»Î»êyÂë1üÏÔê¾1

}
//把程序中的void djsxs1()留著,
void djsxs2(),void djsxs3(),void djsxs4(),void djsxs5(),void djsxs6(),void djsxs7(),void djsxs8(),
子函數刪了
調用處這樣djsxs1(1);
調用djsxs2();處改成djsxs1(2);
調用djsxs3();處改成djsxs1(3);
直到8

122.PNG (35.64 KB, 下載次數: 45)

122.PNG
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区视频免费看 | 日韩福利 | 婷婷色国产偷v国产偷v小说 | 欧美精品成人一区二区三区四区 | 亚洲精品www | 国产99热 | 精品美女 | 亚洲 中文 欧美 日韩 在线观看 | 色综合久久88色综合天天 | 最新中文字幕一区 | 久久国产精品72免费观看 | 日本一二三区电影 | 亚洲国产成人精品久久久国产成人一区 | 久久精品视频播放 | 国产精品国产a | 国产一区二区三区在线看 | 91大神在线看 | 久久国产欧美一区二区三区精品 | 国产在线观看不卡一区二区三区 | 中文字幕av中文字幕 | 亚洲第一在线视频 | 日本三级做a全过程在线观看 | 中文字幕一区二区三区乱码在线 | 免费一区二区 | 免费高潮视频95在线观看网站 | 成人性生交大片 | 久久一本| 91精品国模一区二区三区 | 激情久久av一区av二区av三区 | 中国三级黄色录像 | 亚洲精品日日夜夜 | 久草福利 | 成人综合视频在线观看 | 天天澡天天操 | www,黄色,com| 亚洲天堂影院 | 精品一区二区三区不卡 | 久久国产精彩视频 | 久久高清 | 成人在线免费观看 | 欧美视频二区 |