導航:首頁 > 操作系統 > 51單片機搶答器

51單片機搶答器

發布時間:2022-01-13 06:24:29

Ⅰ 求大神做一個51單片機的四路搶答器,要匯編程序,電路圖,和分析過程,還有4天答辯,

有一個八路的發給你吧,供參考

ORG 0000H

JMP BEGIN

ORG0030H

TABLE: ;共陰極數碼管顯示代碼表

DB 3FH,06H,5BH,4FH,66H;12345

DB 6DH,7DH,07H,7FH ;6789

DELAY: MOV R5,#20

LOOP4: MOV R6,#50H ;延時20X20ms

LOOP5: MOV R7,#100

DJNZ R7,$

DJNZ R6,LOOP5

DJNZ R5,LOOP4

RET

;---------------------------------------

BEGIN: MOV P2,#0FFH ;P2口置高電平,准備接收信號

MOV R4,#0

MOV A,R4 ;R4位標志值送A寄存器

AGAIN: MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P1,A

LOOP1: MOV A,P3 ;接收p3口的搶答信號

CPL A

JZ LOOP1

LOOP2: RRC A ;有人搶答信號則逐次移動判斷哪一位搶答

INC R4

JNC LOOP2

;********************

MOV A,R4

MOVC A,@A+DPTR ;找到相應位顯示代碼

MOV P1,A

LEDDIS:

MOVA,#0FFH

CLRC

LEDDIS1:

RLCA

DJNZR4,LEDDIS1

MOVP0,A

LOOP3: JNBP2.2,BEGIN;若主持人按下復位信號鍵,則轉向主程序

CPL P2.0 ;若沒按復位信號鍵,則通過p2.2口給出高低信號驅動蜂鳴器

LCALLDELAY ;調用延時子程序

SJMP LOOP3 ;p2.2口反復間隔0.4s變化,驅動蜂鳴器

END


Ⅱ 求51單片機6路搶答器程序

程序已發到你的郵箱,請注意查收。不明白的地方聯系我!

Ⅲ 51單片機4路搶答器

編譯器把程序編譯成HEX檔,然後在proteus內把hex檔導入單片機就可以模擬了

Ⅳ 基於51單片機的搶答器如果有兩人同時按下怎麼解決呢 比如有四組 當其中一組按下搶答鍵時 屏蔽其他組

搶答按鍵無需去抖
理論上同時觸發幾乎不可能
實際應用中同時觸發的概率取決於系統反應速度
速度越快同時觸發的概率越低
用MCU中斷截獲數據的話,大概能識別微秒級別的時間差
用CMOS鎖存器可識別納秒級別的時間差

當有按鍵被按下的時候,以最快的速度保存各埠狀態即可,無需什麼屏蔽不屏蔽

Ⅳ AT89S51單片機八路搶答器工作原理

基於MCS-51系列單片機AT89S51的八路搶答器

基於MCS-51系列單片機AT89S51的八路搶答器

前言

隨著現代電子電路的快速發展,以及電子行業對現有電子工程技術的不斷需求,特別是對實際操作實踐的電子人才的需求越來越多,所以加強學生動手能力、重視實踐應該是電子發展需求的必然趨向。實踐動手能力的培養是一種綜合能力,這種能力當然是在一定難度的前提下完成的,通過一定數量的實踐才能逐步形成的。因此在培養實踐能力的同時,要通過實踐來不斷的發現問題和解決問題的途徑和方法,從而提高實踐能力。

近年來,隨著單片機檔次的不斷提高,功能的不斷完善,其應用日趨成熟、應用領域日趨擴大,特別是工業測控、尖端武器和日用家電等領域更是因為有了單片機而生輝增色。單片機應用技術已成為一項新的工程應用技術。本次實習設計的題目為基於單片機的搶答器。

在本次的課程設計中我主要負責了該系統的印製電路板PCB的製作

一、方案論證

方案一:系統各部分採用中小規模集成數字電路,用機械開關按鈕作為控制開關,完成搶答輸入信號的觸發。該方案的特點是中小規模集成電路應用技術成熟,性能可靠,能方便地完成選手搶答的基本功能,但是由於系統功能要求較高,所以電路連接集成電路相對較多,而且過於復雜,並且製作過程工序比較煩瑣,使用不太方便。

方案二:該系統採用MCS-51系列單片機AT89S51作為控制核心,該系統可以完成運算控制、信號識別以及顯示功能的實現。由於用了單片機,使其技術比較成熟,應用起來方便、簡單並且單片機周圍的輔助電路也比較少,便於控制和實現。整個系統具有極其靈活的可編程性,能方便地對系統進行功能的擴張和更改性。CS-51單片機特點如下:

1>可靠性好:單片機按照工業控制要求設計,抵抗工業雜訊干擾優於一般的CPU,程序指令和數據都可以燒寫在ROM許多信號通道都在同一晶元,因此可靠性高。

2>易擴充:單片機有一般電腦所必須的器件,如三態雙向匯流排,串並行的輸入及輸出引腳,可擴充為各種規模的微電腦系統

3>控制功能強:單片機指令除了輸入輸出指令,邏輯判斷指令外還有更豐富的條件分支跳躍指令。原理框圖如1-1所示;

圖1-1

方案比較及其選用依據,顯然方案二比方案一簡單的多,不但從性能上優於方案一,而且在使用上及其功能的實現上都較方案一簡潔,並且由於單片機具有優越的高集成電路性,使其工作速度更快、效率更高。另外AT89S51單片機採用12MHz的晶振,提高了信號的測量精度,並且使該系統可以通過軟體改進來擴張功能。而方案一採用了中小規模集成電路,有其復雜的電路性能,從而可能會使信號的輸入輸出產生延時及不必要的誤差。依此依據選擇方案二比較適合。

二、原理分析

1.本電路採用單片機AT89C51作為控制晶元,單片機的P0口外接八個發光二極體,每個發光二極體分別作為八位選手的信號指示燈。並在各個外接電路上並接開關按鍵,按鍵另一端接地。發光二極體採用共陽極接法,由於P0口為高電平呈輸入狀態,當有按鍵按下時,P0口呈低電平與按鍵對應的發光二極體滿足點亮條件點亮。在程序編程上採用查詢,查詢P0口P0。0到P0。7的八個埠呈低電平,即查詢是哪個選手先按鍵,然後將選手號碼的位元組數據送至串列口輸出並在數碼管上顯現出來。

2.蜂鳴器是利用三極體處於開關狀態是的導通與截止工作,在三極體導通時蜂鳴器工作,三極體截止時蜂鳴器不工作。三極體採用8550PNP型基極接於P1。2口置其低電平時三極體導通,置其高電平時三極體截止。

3.數碼管採用共陽極七段顯示,其內部發光二極體為共陽極接高電平,當對應發光二極體一端為低電平時發光二極體點亮,顯示的數字或字元由送入的位元組數據控制,位元組數據的輸出採用串形口工作模式0,8位串列位元組數據的輸出通過RXD埠送出,TXD端用於送出同步移位脈沖,作為外接器件的同步移位信號。數據的發送是在TI=0的情況下,由一寫發送緩沖器的指令開始CPU執行完該指令,串列口即將8位數據從RXD端送出,同時TXD端發出同步移位脈沖。8位數據發送完畢後由硬體置位TI=1,通過查詢TI位來確定是否發送完一組數據,TI=1表示發送緩沖器已空,當要發送下一組數據時用軟體使TI清零,然後即可發送下一組數據。

4.軟體設計分析首先在程序的開始為選手設置了一段違規程序,該程序的作用是為了防止選手在主持人沒有按下搶答鍵時,有的選手已經提前搶答了,本次搶答為無效搶答,並有報警和記錄下該位選手的選號,做違規處理,如果選手超出了在規定的提前搶答次數,則該選手將被取消以後的搶答資格。如果在主持按下搶答鍵時再搶答,該次搶答被視為有效搶答,在主持按下回答問題的鍵時選手就可以在規定的時間內回答問題了

圖1-2

<1>選手查詢程序:

ORG0000H

START:CLRA

MOVA,#0FFH

MOVP0,A

LOP:JNBP2。4,LP

JNBP0。0,SA1

JNBP0。1,SA2

JNBP0。2,SA3

JNBP0。3,SA4

JNBP0。4,SA5

JNBP0。5,SA6

JNBP0。6,SA7

JNBP0。7,SA8

SJMPLOP

SA1:AJMPSB1

SA2:AJMPSB2

SA3:AJMPSB3

SA4:AJMPSB4

SA5:AJMPSB5

SA6:AJMPSB6

SA7:AJMPSB7

SA8:AJMPSB8

LP:MOVR0,#9

LOP1:LCALLLED

LCALLDEL

JNBP0。0,SIP1

JNBP0。1,SIP2

JNBP0。2,SIP3

JNBP0。3,SIP4

JNBP0。4,SIP5

JNBP0。5,SIP6

JNBP0。6,SIP7

JNBP0。7,SIP8

DECR0

CJNER0,#0,LOP1

MOVR0,#0

LCALLLED

LCALLDEL

SJMPLOP

SIP1:AJMPDIP1

SIP2:AJMPDIP2

SIP3:AJMPDIP3

SIP4:AJMPDIP4

SIP5:AJMPDIP5

SIP6:AJMPDIP6

SIP7:AJMPDIP7

SIP8:AJMPDIP8

SB1:MOVR2,#1

LCALLLED1

LCALLDE

SJMPLP1

SB2:MOVR2,#2

LCALLLED1

LCALLDE

SJMPLP1

SB3:MOVR2,#3

LCALLLED1

LCALLDE

SJMPLP1

SB4:MOVR2,#4

LCALLLED1

LCALLDE

SJMPLP1

SB5:MOVR2,#5

LCALLLED1

LCALLDE

SJMPLP1

SB6:MOVR2,#6

LCALLLED1

LCALLDE

SJMPLP1

SB7:MOVR2,#7

LCALLLED1

LCALLDE

SJMPLP1

SB8:MOVR2,#8

LCALLLED1

LCALLDE

SJMPLP1

LP1:JNBP2。4,LOP2

SJMPLP1

DIP1:MOVR2,#1

LCALLLED1

LCALLDE

SJMPLH1

DIP2:MOVR2,#2

LCALLLED1

LCALLDE

SJMPLH1

DIP3:MOVR2,#3

LCALLLED1

LCALLDE

SJMPLH1

DIP4:MOVR2,#4

LCALLLED1

LCALLDE

SJMPLH1

DIP5:MOVR2,#5

LCALLLED1

LCALLDE

SJMPLH1

DIP6:MOVR2,#6

LCALLLED1

LCALLDE

SJMPLH1

DIP7:MOVR2,#7

LCALLLED1

LCALLDE

SJMPLH1

DIP8:MOVR2,#8

LCALLLED1

LCALLDE

SJMPLH1

LH1:JNBP2。4,LOOP

SJMPLH1

LOP2:MOVA,#11H

MOVSBUF,A

JNBTI,$

CLRTI

LCALLDEL

AJMPLOP

<2>串列輸出程序:

該部分程序的設計利用了單片機的串列模式0輸出,該輸出方式佔用IO口少。可以省去許多IO口作為功能的擴展使用。在該模式下,我們採用了輸出查詢的方式,就是要藉助發送標志TI,當程序執行到發送標志位時,查詢其標志位TI的值,只要TI的值是0程序就繼續查詢,知道查詢到TI為1時才結束,然後在進入下一組數據的發送。由於串列輸出時送進去的數都是十進制數,以致計算機不能識別,所以還要把送進去的十進制數轉化成而進制數,這樣才能輸出。因此在輸出程序前必須有拆字程序,把原來送進去的十進制數轉化成二進制數,然後在輸出並通過數碼管顯示出來。但是如果在顯示選手選號與顯示選手回答問題所用的到計同用一段串列輸出程序時就會造成程序的混亂,所以在此處設計了兩段初始值不同的顯示程序,從而可能增加了程序的煩瑣化。

LED1:MOVA,R2

MOVB,#10

DIVAB

MOVR1,A

MOVR3,B

MOVA,R1

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

MOVA,R3

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

RET。

LED:MOVA,R0

MOVB,#10

DIVAB

MOVR1,A

MOVR3,B

MOVA,R1

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

MOVA,R3

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

RET

DE:CLRP1。2

LCALLDEL01

SETBP1。2

LCALLDEL01

RET

TAB:DB11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H

RET

<3>倒計時程序

該程序為選手回答問題時的30秒倒計時程序,其中前25秒為正常的倒計時,在後5秒倒計時時伴隨有報警聲,用於提示選手回答問題的剩餘時間。如果該選手在正常的倒計時內沒有完成問題的回答,那麼倒計時將被清零。

LOOP:MOVR0,#30

LPP:LCALLLED

LCALLDEL

JNBP2。4,LOP2

DECR0

CJNER0,#5,LPP

MOVR0,#5

LPP1:JNBP2。4,LOP2

LCALLLED

LCALLDE

DECR0

CJNER0,#0,LPP1

MOVR0,#0

LCALLLED

LCALLDEL

LJMPSTART

<4>延時程序

該系統設計了兩段延時程序,一段1秒延時,是為了30秒倒計時調用和程序中一秒延時所用;另一段為0。5秒延時,用於報警。程序的設計中報警時間為一秒,但是由於在硬體的設計時只設計了一個按鍵,這樣就會造成連續按鍵時會使所設定的報警聲不斷的響,這是設計中不允許的,所以在軟體編程時設計了一個0。5秒的延時,被報警時所調用,這樣就使報警聲能很清楚地區分出來了

DEL:MOVR6,#20DEL01:MOVR6,#10

DEL1:MOVR5,#100DEL11:MOVR5,#100

DEL2:MOVR4,#250DEL21:MOVR4,#250

DJNZR4,$DJNZR4,$

DJNZR5,DEL2DJNZR5,DEL21

DJNZR6,DEL1DJNZR6,DEL11

RETRET

<5>報警程序

該段程序主要是用於本系統中的所有報警使用,報警時間延時為1秒鍾。

DE:CLRP1。2

LCALLDEL01

SETBP1。2

LCALLDEL01

RET

三、製作過程

五、參考文獻

曾峰,鞏海洪,曾波,電子工業出版社,印刷電路板(PCB)設計與製作2005.8

梅海鳳,王艷秋,張軍,汪毓鐸,清華大學出版社單片機原理與介面技術2004.2

北京交通大學出版社

第二個文獻:基於51單片機八路搶答器設計程序及電路圖

基於51單片機八路搶答器設計程序及電路圖

說明:本人的這個設計改進後解決了前一個版本中1號搶答優先的問題,並增加了錦囊的設置,當參賽選手在回答問題時要求使用錦囊,則主持人按下搶答開始鍵,計時重新開始。

;八路搶答器電路請看下圖是用ps模擬的,已經測試成功

<單片機八路搶答器電路圖>

;============================================================

;================單片機八路搶答器程序=====================

;================51hei=======================

;================2008年5月=======================

;============================================================

OKEQU20H;搶答開始標志位

RINGEQU22H;響鈴標志位

ORG0000H

AJMPMAIN

ORG0003H

AJMPINT0SUB

ORG000BH

AJMPT0INT

ORG0013H

AJMPINT1SUB

ORG001BH

AJMPT1INT

ORG0040H

MAIN:MOVR1,#30;初設搶答時間為30s

MOVR2,#60;初設答題時間為60s

MOVTMOD,#11H;設置未定時器/模式1

MOVTH0,#0F0H

MOVTL0,#0FFH;越高發聲頻率越高,越尖

MOVTH1,#3CH

MOVTL1,#0B0H;50ms為一次溢出中斷

SETBEA

SETBET0

SETBET1

SETBEX0

SETBEX1;允許四個中斷,T0/T1/INT0/INT1

CLROK

CLRRING

SETBTR1

SETBTR0;一開始就運行定時器,以開始顯示FFF.如果想重新計數,重置TH1/TL1就可以了

;=====查詢程序=====

START:MOVR5,#0BH

MOVR4,#0BH

MOVR3,#0BH

ACALLDISPLAY;未開始搶答時候顯示FFF

JBP3.0,NEXT;ddddddd

ACALLDELAY

JBP3.0,NEXT;去抖動,如果"開始鍵"按下就向下執行,否者跳到非法搶答查詢

ACALLBARK;按鍵發聲

MOVA,R1

MOVR6,A;送R1->R6,因為R1中保存了搶答時間

SETBOK;搶答標志位,用於COUNT只程序中判斷是否查詢搶答

MOVR7,#01H;讀搶答鍵數據信號標志,這里表示只讀一次有用信號

MOVR3,#0AH;搶答只顯示計時,滅號數

AJMPCOUNT;進入倒計時程序,"查詢有效搶答的程序"在COUNT裡面

NEXT:JNBP1.0,FALSE1

JNBP1.1,FALSE2

JNBP1.2,FALSE3

JNBP1.3,FALSE4

JNBP1.4,FALSE5

JNBP1.5,FALSE6

JNBP1.6,FALSE7

JNBP1.7,FALSE8

AJMPSTART

;=====非法搶答處理程序=====

FALSE1:MOVR3,#01H

AJMPERROR

FALSE2:MOVR3,#02H

AJMPERROR

FALSE3:MOVR3,#03H

AJMPERROR

FALSE4:MOVR3,#04H

AJMPERROR

FALSE5:MOVR3,#05H

AJMPERROR

FALSE6:MOVR3,#06H

AJMPERROR

FALSE7:MOVR3,#07H

AJMPERROR

FALSE8:MOVR3,#08H

AJMPERROR

;=====INT0(搶答時間R1調整程序)=====

INT0SUB:MOVA,R1

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

ACALLDISPLAY;先在兩個時間LED上顯示R1

JNBP3.4,INC0;P3.4為+1s鍵,如按下跳到INCO

JNBP3.5,DEC0;P3.5為-1s鍵,如按下跳到DECO

JNBP3.1,BACK0;P3.1為確定鍵,如按下跳到BACKO

AJMPINT0SUB

INC0:MOVA,R1

CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。

MOVR1,#00H

ACALLDELAY1

AJMPINT0SUB

ADD0:INCR1

ACALLDELAY1

AJMPINT0SUB

DEC0:MOVA,R1

JZSETR1;如果R1為0,R1就置99,

DECR1

ACALLDELAY1

AJMPINT0SUB

SETR1:MOVR1,#63H

ACALLDELAY1

AJMPINT0SUB

BACK0:RETI

;=====INT1(回答時間R2調整程序)=====

INT1SUB:MOVA,R2

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

ACALLDISPLAY

JNBP3.4,INC1

JNBP3.5,DEC1

JNBP3.1,BACK1

AJMPINT1SUB

INC1:MOVA,R2

CJNEA,#63H,ADD1

MOVR2,#00H

ACALLDELAY1

AJMPINT1SUB

ADD1:INCR2

ACALLDELAY1

AJMPINT1SUB

DEC1:MOVA,R2

JZSETR2

DECR2

ACALLDELAY1

AJMPINT1SUB

SETR2:MOVR2,#63H

ACALLDELAY1

AJMPINT1SUB

BACK1:RETI

;=====倒計時程序(搶答倒計時和回答倒計時都跳到改程序)=====

REPEAT:MOVA,R2;使用錦囊時重新計時

MOVR6,A

CLRRING

COUNT:MOVR0,#00H;重置定時器中斷次數

MOVTH1,#3CH

MOVTL1,#0B0H;重置定時器

RECOUNT:MOVA,R6;R6保存了倒計時的時間,之前先將搶答時間或回答時間給R6

MOVB,#0AH

DIVAB;除十分出個位/十位

MOV30H,A;十位存於(30H)

MOV31H,B;個位存於(31H)

MOVR5,30H;取十位

MOVR4,31H;取個位

MOVA,R6

SUBBA,#07H

JNCLARGER;大於5s跳到LARGER,小於等於5s會提醒

MOVA,R0

CJNEA,#0AH,FULL;1s中0.5s向下運行

CLRRING

AJMPCHECK

FULL:CJNEA,#14H,CHECK;下面是1s的情況,響並顯示號數並清R0,重新計

SETBRING

MOVA,R6

JZQUIT;計時完畢

MOVR0,#00H

DECR6;一秒標志減1

AJMPCHECK

LARGER:MOVA,R0

CJNEA,#14H,CHECK;如果1s向下運行,否者跳到查"停/顯示"

DECR6;計時一秒R6自動減1

MOVR0,#00H

CHECK:JNBP3.1,QUIT;如按下停止鍵退出

JNBOK,CHECKK;只在回答倒計時才有效

AJMPNEXTT

CHECKK:JNBP3.0,REPEAT;判斷是否使用錦囊

NEXTT:ACALLDISPLAY

JBOK,ACCOUT;如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續倒數(這里起到鎖搶答作用)

AJMPRECOUNT

ACCOUT:

MOVA,36H

JNBACC.0,TRUE1

JNBACC.1,TRUE2

JNBACC.2,TRUE3

JNBACC.3,TRUE4

JNBACC.4,TRUE5

JNBACC.5,TRUE6

JNBACC.6,TZ1

JNBACC.7,TZ2

AJMPRECOUNT

TZ1:JMPTRUE7

TZ2:JMPTRUE8

QUIT:CLROK;如果按下了"停止鍵"執行的程序

CLRRING

AJMPSTART

;=====正常搶答處理程序=====

TRUE1:ACALLBARK

MOVA,R2

MOVR6,A;搶答時間R2送R6

MOVR3,#01H

CLROK;因為答題的計時不再查詢搶答,所以就鎖了搶答

AJMPCOUNT

TRUE2:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#02H

CLROK

AJMPCOUNT

TRUE3:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#03H

CLROK

AJMPCOUNT

TRUE4:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#04H

CLROK

AJMPCOUNT

TRUE5:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#05H

CLROK

AJMPCOUNT

TRUE6:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#06H

CLROK

AJMPCOUNT

TRUE7:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#07H

CLROK

AJMPCOUNT

TRUE8:ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#08H

CLROK

AJMPCOUNT

;=====犯規搶答程序=====

ERROR:MOVR0,#00H

MOVTH1,#3CH

MOVTL1,#0B0H

MOV34H,R3;犯規號數暫存與(34H)

HERE:MOVA,R0

CJNEA,#06H,FLASH;0.3s向下運行->滅並停響

CLRRING

MOVR3,#0AH

MOVR4,#0AH

MOVR5,#0AH;三燈全滅

AJMPCHECK1

FLASH:CJNEA,#0CH,CHECK1;下面是0.8s的情況,響並顯示號數並清R0,重新計

SETBRING

MOVR0,#00H

MOVR3,34H;取回號數

MOVR5,#0BH

MOVR4,#0BH;顯示FF和號數

AJMPCHECK1

CHECK1:JNBP3.1,QUIT1

ACALLDISPLAY

AJMPHERE

QUIT1:CLRRING

CLROK

AJMPSTART

;=====顯示程序=====

DISPLAY:MOVDPTR,#DAT1;查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出,

MOVA,R3

MOVCA,@A+DPTR

MOVP2,#0feH

MOVP0,A

ACALLDELAY2

MOVDPTR,#DAT2

MOVA,R5

MOVCA,@A+DPTR

MOVP2,#0fdH

MOVP0,A

ACALLDELAY2

MOVA,R4

MOVCA,@A+DPTR

MOVP2,#0fbH

MOVP0,A

ACALLDELAY2

RET

DAT1:DB00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H

;"滅","1","2","3","4","5","6","7","8","9","滅","F"

DAT2:DB3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H

;第一個為零,其他與上相同,因為十位如果為零顯示熄滅

;====加減時間延時(起到不會按下就加N個數)======

DELAY1:MOV35H,#08H

LOOP0:ACALLDISPLAY

DJNZ35H,LOOP0

RET

;=====延時4236個機器周期(去抖動用到)=====

DELAY:MOV32H,#12H

LOOP:MOV33H,#0AFH

LOOP1:DJNZ33H,LOOP1

DJNZ32H,LOOP

RET

;=====延時4236個機器周期(顯示用到)=====

DELAY2:MOV32H,#43H

LOOP3:MOV33H,#1EH

MOVA,R7;每隔60~70個機器周期讀一次P1口,全為1時為無效數據,繼續讀,有一個不為1時,轉到正常搶答處理

JNZAAAA1;沒讀到有效數據時繼續轉到AAAA1

LOOP2:DJNZ33H,LOOP2

DJNZ32H,LOOP3

RET

;=====讀搶答按鍵數據口程序=====

;由於在讀搶答數據口的時候,單片機首先進入倒計時程序,再調用顯示程序,最後才檢測按鍵口

;然而在檢測按鍵口時動態掃描要調用三次(4ms)延時程序.這樣就會導致讀數據口出現滯後,造成1號優先最高.8號最低.

;故採用在延時子程序中加了讀數據口程序.保證了靈敏度和可靠性

AAAA1:MOVA,P1

CJNEA,#0FFH,AA1;當不全為1時的數據為有效數據

AA0:MOV36H,A;將有效數據送到36H暫存

AJMPLOOP2

AA1:DECR7

AJMPAA0

;=====發聲程序=====

BARK:SETBRING

ACALLDELAY1

ACALLDELAY1

CLRRING;按鍵發聲

RET

;=====TO溢出中斷(響鈴程序)=====

T0INT:MOVTH0,#0ECH

MOVTL0,#0FFH

JNBRING,OUT;

CPLP3.6;RING標志位為1時候P3.6口不短取反使喇叭發出一定頻率的聲音

OUT:RETI

;=====T1溢出中斷(計時程序)=====

T1INT:MOVTH1,#3CH

MOVTL1,#0B0H

INCR0

RETI

僅供參考。

Ⅵ 51單片機三路搶答器的設計

我網路空間有一篇是四路搶答器的,可以搜索參考下。

Ⅶ 51單片機 四路搶答器

你好!這搶答器是模擬還是做實物?需要倒計時嗎?

Ⅷ 用51單片機做搶答器需要賣什麼東西

先使用proteus和uvision軟體設計好電路圖再進行模擬驗證,然後按照電路圖需要元件組裝出來PCB電路板,再使用燒錄器把程序燒錄進單片機去就可以了!

Ⅸ 51單片機用isis編程怎麼弄下降沿(搶答器)

你好:
我以前也做過搶答器,不過沒注意你提的問題是否存在。或許你可以到我網路空間里參考參考我之前的程序,空間的第一篇文章就是。
有什麼疑問可以隨時回復我。
希望我的回答能幫助到你。

閱讀全文

與51單片機搶答器相關的資料

熱點內容
內網不能訪問公網伺服器地址 瀏覽:640
程序員在廈門做什麼工作 瀏覽:682
linuxmatlab卸載 瀏覽:983
bat女程序員數量 瀏覽:517
安卓怎麼拍手機里照片 瀏覽:386
如何連接無盡之劍伺服器 瀏覽:574
業務型it程序員和技術員程序員 瀏覽:811
windows下命令 瀏覽:714
程序員努力進阿里 瀏覽:226
武器壓縮技術 瀏覽:815
pythonindexpackage 瀏覽:626
php網頁運行原理 瀏覽:283
老人存的定期存款可以加密碼嗎 瀏覽:233
tde透明加密性能 瀏覽:328
蠻力字元串匹配演算法 瀏覽:220
網路廣告是什麼app 瀏覽:565
win11如何解壓文件 瀏覽:869
貓眼是干什麼的app 瀏覽:945
vb屬於編譯 瀏覽:47
淘特app干什麼的 瀏覽:929