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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1818|回復: 4
收起左側

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

[復制鏈接]
ID:942522 發表于 2022-3-21 17:09 | 顯示全部樓層 |閱讀模式
各位大佬,這是8位搶答器
目前能實現的功能是:1.按下開始鍵,開始倒計時10秒(倒計時時間暫停)
                                2.若有人搶到,蜂鳴器響一聲,然后開始20秒答題倒計時
                                3.倒計時5秒鐘蜂鳴器響
                                4.若選手答對,則按加鍵給選手加分
                                5.若選手答錯,則主持人按繼續鍵,選手們繼續搶答
紅色字體部分就是我目前遇到的困難,懇請各位大佬幫忙出出招。
感謝!感謝!萬分感謝!
單片機程序如下:
#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)           //動態掃描子程序
  {
                 
         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)       //計 數   
       {
                              
                   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 發表于 2022-3-21 18:14 來自手機 | 顯示全部樓層
不加注釋,變數名又沒意義,誰看得懂?
回復

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费xxxxx在线视频 | 日本一区二区高清不卡 | 午夜视频一区 | 一级做a爰片性色毛片16美国 | aaaaaaa片毛片免费观看 | 精品久久亚洲 | 国产综合精品一区二区三区 | 亚洲永久字幕 | 国产美女久久 | 精品乱子伦一区二区三区 | 最新超碰| 国产美女福利在线观看 | 精品一区二区免费视频 | 日韩www| 精品综合 | 成人午夜黄色 | 伊人操| 国产欧美一区二区三区在线播放 | 在线成人| 国产黄色在线观看 | 精品九九久久 | 视频一区在线观看 | 成人在线视频网站 | 精品一区二区三区入口 | 超碰免费在线 | 亚洲不卡在线观看 | 国产精品久久在线 | 91精品国产91久久综合桃花 | 日本视频在线播放 | 欧美成人精品一区 | 中文字幕在线第一页 | 日韩成人精品视频 | 国产精品国产三级国产aⅴ中文 | 欧美白人做受xxxx视频 | 国产精品毛片一区二区在线看 | 久久大 | 国产精品乱码一区二区三区 | 中文字幕在线不卡播放 | 国产免费观看久久黄av片涩av | 成人亚洲在线 | 亚洲成人免费av |