找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1849|回復: 4
收起左側(cè)

基于單片機的8位搶答器程序問題

[復制鏈接]
ID:942522 發(fā)表于 2022-3-21 17:09 | 顯示全部樓層 |閱讀模式
各位大佬,這是8位搶答器
目前能實現(xiàn)的功能是:1.按下開始鍵,開始倒計時10秒(倒計時時間暫停)
                                2.若有人搶到,蜂鳴器響一聲,然后開始20秒答題倒計時
                                3.倒計時5秒鐘蜂鳴器響
                                4.若選手答對,則按加鍵給選手加分
                                5.若選手答錯,則主持人按繼續(xù)鍵,選手們繼續(xù)搶答
紅色字體部分就是我目前遇到的困難,懇請各位大佬幫忙出出招。
感謝!感謝!萬分感謝!
單片機程序如下:
#include<reg51.h>
sbit key1=P0^0;
sbit key2=P0^1;
sbit key3=P0^2;
sbit key4=P0^3;
sbit key5=P0^4;
sbit key6=P0^5;
sbit key7=P0^6;
sbit key8=P0^7;
sbit k1=P3^6;
sbit k2=P3^7;
sbit k3=P3^3;
sbit wy=P3^4;
sbit wk_key=P3^5;
sbit ghr_key=P3^2;
bit qd_hd,speaker_permit;
bit grade_hxj;
unsigned char duanma[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char fenshu[10]={0,0,0,0,0,0,0,0,0,0};
unsigned char weima[6]={0x01,0x02,0x04,0x08,0x10,0x20};
unsigned char xianshi[6]={0,0,0,0,0,0};
unsigned char  saomiao_jishu,jishu2,zuhao=0,f_speaker;
unsigned char miao,fen;

void chushihua (void)               
  {
    zuhao=0;                                //組號  顯示 0,
        TMOD=0X11;                                       
        EA=1;                                                //設置初值;計時為0。            
        ET1=1;TR1=1;
        ET0=1;TR0=1;
        TH1=(65536-1000)/256;
        TL1=(65536-1000)%256;
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;
        jishu2=0;
        grade_hxj=0;
        qd_hd=0;
        speaker_permit=1;
  }
void dtsm(void)           //動態(tài)掃描子程序
  {
                 
         fen=fenshu[zuhao] ;
                 xianshi[0]=duanma[zuhao/10];
                 xianshi[1]=duanma[zuhao%10];
                 xianshi[2]=duanma[miao/10];
                 xianshi[3]=duanma[miao%10];
                 xianshi[4]=duanma[fen/10];
                 xianshi[5]=duanma[fen%10];
                      saomiao_jishu++;
                      if(saomiao_jishu==6)
                        {
                                  saomiao_jishu=0;
                                }
                  P2=  weima[saomiao_jishu];//位碼
                      P1=xianshi[saomiao_jishu];//段碼  
                           
  
  }
void preemptive_answer(void)                 //搶答子程序
{
if(qd_hd==0)                                                 //允 許 搶 答           
                            {
                                if(key1==0)                                
                               {                                                                                
                                zuhao=1; miao=20;qd_hd=1;
                                          speaker_permit=0;grade_hxj=1;
                                                  
                                         }   
                                  if(key2==0)           
                                         {
                                     zuhao=2; miao=20;qd_hd=1;
                                          speaker_permit=0;grade_hxj=1;
                                         }
                  if(key3==0)   
                                           {                        
                                zuhao=3; miao=20;qd_hd=1;
                                          speaker_permit=0;grade_hxj=1;
                               }                     
                                     if(key4==0)
                                           {                        
                                zuhao=4; miao=20;qd_hd=1;
                                          speaker_permit=0;grade_hxj=1;
                               }                     
                                  if(key5==0)           
                                         {  
                                     zuhao=5; miao=20;qd_hd=1;
                                          speaker_permit=0;grade_hxj=1;
                                         }  
                                    if(key6==0)
                                           {                        
                                zuhao=6; miao=20;qd_hd=1;
                                          speaker_permit=0;grade_hxj=1;
                               }                     
                                  if(key7==0)           
                                         {  
                                     zuhao=7; miao=20;qd_hd=1;
                                          speaker_permit=0;grade_hxj=1;
                                         }  
                  if(key8==0)                                
                               {
                                zuhao=8; miao=20;qd_hd=1;
                                          speaker_permit=0;grade_hxj=1;                    
                                         }
                                }           
                   if(k3==0)         //按下開始鍵
                                           {
                                          miao=10;qd_hd=0 ;

                                         }                                                  
if(qd_hd==1)       //計 數(shù)   
       {
                              
                   jishu2++;                                                  
           if(jishu2==100)                                          
          {
               jishu2=0;                                          
                   miao--;
                   if((miao<=19)&&(miao>=6))        
                           {                                 
                   speaker_permit=1;
                           }
                   if((miao<=5)&&(miao>=1))speaker_permit=0;                                                  
                   if(miao==0xff)
                     {miao=0;
                         speaker_permit=1;}                  
             }
       }

                         if(wk_key==0)                                //復 位
                              {
                       zuhao=0;
                     miao=0;
                   qd_hd=0;
                     fen=0;
                     grade_hxj=0;   
                              }
if(grade_hxj==1)
                   {
                        if(k1==0)                                //加 分
                              {
                      fenshu[zuhao]=fenshu[zuhao]+1;
                    fen=fenshu[zuhao];
                    while(k1==0);
                                        }   
                 }                                    
}
void zd(void) interrupt 3                        //蜂鳴 (中斷)
{
    TH1=(65536-8000)/256;
    TL1=(65536-8000)%256;
         jishu2++;                                                  
           if(jishu2==100)                                          
          {
               jishu2=0;                                          
                   miao--;
                   if(miao==0xff)miao=0;
                  }
                   if(miao==0)qd_hd=1;
        dtsm();
                preemptive_answer();         
}
void zd1(void) interrupt 1                //蜂鳴(中斷)
{
    TH0=(65536-1000)/256;
    TL0=(65536-1000)%256;
  if(speaker_permit==0)
        {
                ghr_key=~ghr_key;
    }
  if(wy==0)
                {
                 zuhao++;
                         if(zuhao==9)
                                {
                                 zuhao=0;
                                 fen=fenshu[zuhao] ;
                                }
                         while(wy==0);
            }               
}

void main(void)        
  {         
     chushihua();           
         while(1);
  }



回復

使用道具 舉報

ID:161164 發(fā)表于 2022-3-21 18:14 來自觸屏版 | 顯示全部樓層
不加注釋,變數(shù)名又沒意義,誰看得懂?
回復

使用道具 舉報

ID:57657 發(fā)表于 2022-3-21 20:25 | 顯示全部樓層
lkc8210 發(fā)表于 2022-3-21 18:14
不加注釋,變數(shù)名又沒意義,誰看得懂?

新人貼的程序不要看,框架太亂,代碼都是東拼西湊來的,直接從頭寫吧。
回復

使用道具 舉報

ID:161164 發(fā)表于 2022-3-21 21:25 | 顯示全部樓層
npn 發(fā)表于 2022-3-21 20:25
新人貼的程序不要看,框架太亂,代碼都是東拼西湊來的,直接從頭寫吧。

幫到一個算一個
當然無法救的就。。。
回復

使用道具 舉報

ID:844772 發(fā)表于 2022-3-22 09:54 | 顯示全部樓層
我覺得你程序改一下結(jié)構(gòu)比較好,把對鍵盤和顯示的輪詢放到主程序,時間中斷只管計時,蜂鳴器換個有源的,你居然用兩個中斷搞它太沒必要,當然主要是這個中斷問題有點多。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表