要求:
1:主持人按下啟動(dòng)按鈕才能開始搶答;
2:當(dāng)沒有人搶答30秒后題目作廢;
3:搶答之后有10秒的考慮時(shí)間如果答不上來題目作廢;
4:顯示搶答人的號(hào)碼;
5:顯示30秒倒計(jì)時(shí)時(shí)間;
用mcs-51單片機(jī)做六人搶答器
全部回復(fù)(32)
正序查看
倒序查看
@xing1234
如果要求時(shí)間掃描的速度不是很快就用AT89C51或AT89C2051,快的話用PIC16系列,這些都是比較通用的.PIC對(duì)初學(xué)者來說難度稍大,建議51入手.
如果我用89C51做的話:
硬件
1、 晶振選高,用24M
2、 用P0.0做啟動(dòng)開關(guān).
3、 用P1做搶答開關(guān).
4、 P2、P3做LED顯示(靜態(tài)).
程序
1、 啟動(dòng)顯示復(fù)位;
2、 一直查詢P0.0到按下啟動(dòng)開關(guān);
3、 P0.0為非后打開定時(shí)器計(jì)數(shù),1秒更新一次顯示,其余時(shí)間查詢并記錄比較P1;
4、 新讀出的P1與上次讀的數(shù)按位比較;
硬件
1、 晶振選高,用24M
2、 用P0.0做啟動(dòng)開關(guān).
3、 用P1做搶答開關(guān).
4、 P2、P3做LED顯示(靜態(tài)).
程序
1、 啟動(dòng)顯示復(fù)位;
2、 一直查詢P0.0到按下啟動(dòng)開關(guān);
3、 P0.0為非后打開定時(shí)器計(jì)數(shù),1秒更新一次顯示,其余時(shí)間查詢并記錄比較P1;
4、 新讀出的P1與上次讀的數(shù)按位比較;
0
回復(fù)
@xing1234
如果我用89C51做的話:硬件1、晶振選高,用24M2、用P0.0做啟動(dòng)開關(guān).3、用P1做搶答開關(guān).4、P2、P3做LED顯示(靜態(tài)).程序1、啟動(dòng)顯示復(fù)位;2、一直查詢P0.0到按下啟動(dòng)開關(guān);3、P0.0為非后打開定時(shí)器計(jì)數(shù),1秒更新一次顯示,其余時(shí)間查詢并記錄比較P1;4、新讀出的P1與上次讀的數(shù)按位比較;
謝謝你 給我這么多建議!! 420439660我的qq長聯(lián)系呀!我也是第一次做沒有經(jīng)驗(yàn)請(qǐng)你多多幫忙!!謝謝你!!!
0
回復(fù)
@xing1234
如果我用89C51做的話:硬件1、晶振選高,用24M2、用P0.0做啟動(dòng)開關(guān).3、用P1做搶答開關(guān).4、P2、P3做LED顯示(靜態(tài)).程序1、啟動(dòng)顯示復(fù)位;2、一直查詢P0.0到按下啟動(dòng)開關(guān);3、P0.0為非后打開定時(shí)器計(jì)數(shù),1秒更新一次顯示,其余時(shí)間查詢并記錄比較P1;4、新讀出的P1與上次讀的數(shù)按位比較;
這辦法太差,優(yōu)先級(jí)太難保證,有可能搞的順序錯(cuò)亂,2個(gè)人同時(shí)按的話有時(shí)就區(qū)分不出來的,用51實(shí)現(xiàn)這個(gè)功能太簡單了,如果軟硬件搭配的好的,也不存在什么優(yōu)先級(jí)的問題,時(shí)鐘越快,區(qū)分度越高,
0
回復(fù)
單片機(jī)六人搶答器
定時(shí)器0定時(shí)50ms 循環(huán)20次完成定時(shí)一秒 ;
用串行口做顯示輸出
外部搶答按鈕用防抖開關(guān)用中斷做的鍵盤掃描.
P1.0 做燈光報(bào)警
P1.1做聲音報(bào)警
ORG 0000H
AJMP MAIN
ORG 0003H 定義外部0中斷
AJMP INT0SEV
ORG 000BH 定義定時(shí)器0中斷
AJMP T0SEV
ORG 0030H
MAIN:
MOV SP , #60H
MOV TMOD ,#01H 定義定時(shí)器T0的工作模式
MOV TH0 ,, #3CH 給定時(shí)器賦初值
MOV TL0 ,#0B0H
MOV R2 , # 20 循環(huán)次數(shù)
MOV R3 , #0 個(gè)位顯示
MOV R4 , #3 十位顯示
SETB EA 開總中斷
SETB ET0 開定時(shí)器中斷
SETB P0.0 給p0.0賦初值
LCALL XIANSHI 調(diào)用顯示子程序
CLR P1.0
JB P0.0 , $
LCAII K3
SETB P1.0 開始按鈕
SETB IT0 邊沿觸發(fā)方式
SETB TR0 開啟定時(shí)器
SETB EX0 開啟外部中斷
JB P0.1 , $
AJMP MAIN
定時(shí)中斷
T0SEV :
MOV th0 , #3CH
MOV TL0 , #0B0H
DJNZ R2 , LOOP
MOV R2 , #20
CJNE R3 , #0 , K1
CJNE R4 , #0 , K2
CLR TR0
CLR EA
CLR ET0
CLR EX0
AJMP LOOP
K2:
MOV R3 , #9
DEC R4
AJMP LOOP
K1:
DEC R3
LOOP:
LCALL XIANSHI
RETI
外部中斷服務(wù)
INT0SEV:
CLR EA
CLR TR0
JNB P0.2 , KEY1
JNB P0.3 , KEY2
JNB P0.4 , KEY3
JNB P0.5 , KEY4
JNB P0.6 , KEY5
JNB P0.7 , KEY6
KEY1:
MOV R3 , #1
MOV R4 , #0
LCALL XIANSHI
RETI
KEY2:
MOV R3 , #2
MOV R4 , #0
LCALL XIANSHI
RETI
KEY3:
MOV R3 , #3
MOV R4 , #0
LCALL XIANSHI
RETI
KEY4:
MOV R3 , #4
MOV R4 , #0
LCALL XIANSHI
RETI
KEY5:
MOV R3 , #5
MOV R4 , #0
LCALL XIANSHI
RETI
KEY6:
MOV R3 , #6
MOV R4 , #0
LCALL XIANSHI
RETI
顯示子程序:
XIANSHI :
MOV SCON , #00H
MOV DPTR ,#TAB
MOV A , R3
MOVC A , @A+DPTR
MOV SBUF ,A
JNB TI , $
CLR TI
MOV A , R4
MOVC A , @A+DPTR
MOV SBUF ,A
JNB TI , $
CLR TI
RET
聲音報(bào)警
K3:
MOV R5 ,#50
K4:
MOV R6 ,#FFH
K5:
DJNZ R6 , K5
CPL P1.1
DJNZ R5 , K4
RET
END
定時(shí)器0定時(shí)50ms 循環(huán)20次完成定時(shí)一秒 ;
用串行口做顯示輸出
外部搶答按鈕用防抖開關(guān)用中斷做的鍵盤掃描.
P1.0 做燈光報(bào)警
P1.1做聲音報(bào)警
ORG 0000H
AJMP MAIN
ORG 0003H 定義外部0中斷
AJMP INT0SEV
ORG 000BH 定義定時(shí)器0中斷
AJMP T0SEV
ORG 0030H
MAIN:
MOV SP , #60H
MOV TMOD ,#01H 定義定時(shí)器T0的工作模式
MOV TH0 ,, #3CH 給定時(shí)器賦初值
MOV TL0 ,#0B0H
MOV R2 , # 20 循環(huán)次數(shù)
MOV R3 , #0 個(gè)位顯示
MOV R4 , #3 十位顯示
SETB EA 開總中斷
SETB ET0 開定時(shí)器中斷
SETB P0.0 給p0.0賦初值
LCALL XIANSHI 調(diào)用顯示子程序
CLR P1.0
JB P0.0 , $
LCAII K3
SETB P1.0 開始按鈕
SETB IT0 邊沿觸發(fā)方式
SETB TR0 開啟定時(shí)器
SETB EX0 開啟外部中斷
JB P0.1 , $
AJMP MAIN
定時(shí)中斷
T0SEV :
MOV th0 , #3CH
MOV TL0 , #0B0H
DJNZ R2 , LOOP
MOV R2 , #20
CJNE R3 , #0 , K1
CJNE R4 , #0 , K2
CLR TR0
CLR EA
CLR ET0
CLR EX0
AJMP LOOP
K2:
MOV R3 , #9
DEC R4
AJMP LOOP
K1:
DEC R3
LOOP:
LCALL XIANSHI
RETI
外部中斷服務(wù)
INT0SEV:
CLR EA
CLR TR0
JNB P0.2 , KEY1
JNB P0.3 , KEY2
JNB P0.4 , KEY3
JNB P0.5 , KEY4
JNB P0.6 , KEY5
JNB P0.7 , KEY6
KEY1:
MOV R3 , #1
MOV R4 , #0
LCALL XIANSHI
RETI
KEY2:
MOV R3 , #2
MOV R4 , #0
LCALL XIANSHI
RETI
KEY3:
MOV R3 , #3
MOV R4 , #0
LCALL XIANSHI
RETI
KEY4:
MOV R3 , #4
MOV R4 , #0
LCALL XIANSHI
RETI
KEY5:
MOV R3 , #5
MOV R4 , #0
LCALL XIANSHI
RETI
KEY6:
MOV R3 , #6
MOV R4 , #0
LCALL XIANSHI
RETI
顯示子程序:
XIANSHI :
MOV SCON , #00H
MOV DPTR ,#TAB
MOV A , R3
MOVC A , @A+DPTR
MOV SBUF ,A
JNB TI , $
CLR TI
MOV A , R4
MOVC A , @A+DPTR
MOV SBUF ,A
JNB TI , $
CLR TI
RET
聲音報(bào)警
K3:
MOV R5 ,#50
K4:
MOV R6 ,#FFH
K5:
DJNZ R6 , K5
CPL P1.1
DJNZ R5 , K4
RET
END
0
回復(fù)
@qb_0007
單片機(jī)六人搶答器定時(shí)器0定時(shí)50ms循環(huán)20次完成定時(shí)一秒;用串行口做顯示輸出外部搶答按鈕用防抖開關(guān)用中斷做的鍵盤掃描.P1.0做燈光報(bào)警P1.1做聲音報(bào)警ORG 0000HAJMP MAINORG 0003H 定義外部0中斷AJMP INT0SEVORG 000BH 定義定時(shí)器0中斷AJMP T0SEV ORG 0030HMAIN:MOV SP, #60HMOV TMOD,#01H定義定時(shí)器T0的工作模式MOV TH0,,#3CH 給定時(shí)器賦初值MOV TL0 ,#0B0HMOV R2 , #20循環(huán)次數(shù)MOV R3 , #0個(gè)位顯示MOV R4 , #3十位顯示SETB EA開總中斷SETB ET0開定時(shí)器中斷SETB P0.0給p0.0賦初值LCALL XIANSHI調(diào)用顯示子程序CLR P1.0JB P0.0 , $LCAII K3SETB P1.0開始按鈕SETB IT0邊沿觸發(fā)方式SETB TR0開啟定時(shí)器SETB EX0開啟外部中斷JB P0.1 , $AJMP MAIN定時(shí)中斷T0SEV:MOV th0 , #3CHMOV TL0 , #0B0HDJNZ R2 , LOOPMOV R2 , #20CJNE R3 , #0 , K1CJNE R4 , #0 , K2CLR TR0CLR EACLR ET0CLR EX0AJMP LOOPK2:MOV R3 , #9DEC R4AJMP LOOPK1:DEC R3LOOP:LCALL XIANSHIRETI外部中斷服務(wù)INT0SEV:CLR EACLR TR0JNB P0.2, KEY1JNB P0.3, KEY2JNB P0.4, KEY3JNB P0.5, KEY4JNB P0.6, KEY5JNB P0.7, KEY6KEY1:MOV R3 , #1MOV R4 , #0LCALL XIANSHIRETIKEY2:MOV R3 , #2MOV R4 , #0LCALL XIANSHIRETIKEY3:MOV R3 , #3MOV R4 , #0LCALL XIANSHIRETIKEY4:MOV R3 , #4MOV R4 , #0LCALL XIANSHIRETIKEY5:MOV R3 , #5MOV R4 , #0LCALL XIANSHIRETIKEY6:MOV R3 , #6MOV R4 , #0LCALL XIANSHIRETI顯示子程序:XIANSHI:MOV SCON , #00HMOV DPTR ,#TABMOV A ,R3MOVC A , @A+DPTRMOV SBUF ,AJNB TI , $CLR TIMOV A ,R4MOVC A , @A+DPTRMOV SBUF ,AJNB TI , $CLR TIRET聲音報(bào)警K3:MOV R5 ,#50K4:MOV R6 ,#FFHK5:DJNZ R6 , K5CPL P1.1DJNZ R5 , K4RETEND
望各位高手給予指導(dǎo)謝謝!!!
0
回復(fù)
@qb_0007
單片機(jī)六人搶答器定時(shí)器0定時(shí)50ms循環(huán)20次完成定時(shí)一秒;用串行口做顯示輸出外部搶答按鈕用防抖開關(guān)用中斷做的鍵盤掃描.P1.0做燈光報(bào)警P1.1做聲音報(bào)警ORG 0000HAJMP MAINORG 0003H 定義外部0中斷AJMP INT0SEVORG 000BH 定義定時(shí)器0中斷AJMP T0SEV ORG 0030HMAIN:MOV SP, #60HMOV TMOD,#01H定義定時(shí)器T0的工作模式MOV TH0,,#3CH 給定時(shí)器賦初值MOV TL0 ,#0B0HMOV R2 , #20循環(huán)次數(shù)MOV R3 , #0個(gè)位顯示MOV R4 , #3十位顯示SETB EA開總中斷SETB ET0開定時(shí)器中斷SETB P0.0給p0.0賦初值LCALL XIANSHI調(diào)用顯示子程序CLR P1.0JB P0.0 , $LCAII K3SETB P1.0開始按鈕SETB IT0邊沿觸發(fā)方式SETB TR0開啟定時(shí)器SETB EX0開啟外部中斷JB P0.1 , $AJMP MAIN定時(shí)中斷T0SEV:MOV th0 , #3CHMOV TL0 , #0B0HDJNZ R2 , LOOPMOV R2 , #20CJNE R3 , #0 , K1CJNE R4 , #0 , K2CLR TR0CLR EACLR ET0CLR EX0AJMP LOOPK2:MOV R3 , #9DEC R4AJMP LOOPK1:DEC R3LOOP:LCALL XIANSHIRETI外部中斷服務(wù)INT0SEV:CLR EACLR TR0JNB P0.2, KEY1JNB P0.3, KEY2JNB P0.4, KEY3JNB P0.5, KEY4JNB P0.6, KEY5JNB P0.7, KEY6KEY1:MOV R3 , #1MOV R4 , #0LCALL XIANSHIRETIKEY2:MOV R3 , #2MOV R4 , #0LCALL XIANSHIRETIKEY3:MOV R3 , #3MOV R4 , #0LCALL XIANSHIRETIKEY4:MOV R3 , #4MOV R4 , #0LCALL XIANSHIRETIKEY5:MOV R3 , #5MOV R4 , #0LCALL XIANSHIRETIKEY6:MOV R3 , #6MOV R4 , #0LCALL XIANSHIRETI顯示子程序:XIANSHI:MOV SCON , #00HMOV DPTR ,#TABMOV A ,R3MOVC A , @A+DPTRMOV SBUF ,AJNB TI , $CLR TIMOV A ,R4MOVC A , @A+DPTRMOV SBUF ,AJNB TI , $CLR TIRET聲音報(bào)警K3:MOV R5 ,#50K4:MOV R6 ,#FFHK5:DJNZ R6 , K5CPL P1.1DJNZ R5 , K4RETEND
大致瀏覽了你的程序,沒細(xì)看,有幾點(diǎn)建議:
1:顯示最好用中斷做(前提是你在練習(xí),不是做產(chǎn)品),這對(duì)你以後的顯示程序有很大的幫助,可以做成模塊!不管做什麼,特別是匯編,如果不做模塊,你的每個(gè)案子都會(huì)是新的,這樣會(huì)很累的!
2:不管你在做什麼,標(biāo)識(shí)千萬不要用K1,X1(變量或者子程序名)之類的,最好用相應(yīng)的英文或者中文拼音(不能怕這樣麻煩),這樣有助與你的寫作程序,不然程序大了會(huì)很麻煩!你會(huì)不知道哪個(gè)是哪個(gè)的!
3:不能用P1.X的方式吧,應(yīng)該重新定義或者改為P1^X的方式
至於其它的沒細(xì)看,不好評(píng)論!
1:顯示最好用中斷做(前提是你在練習(xí),不是做產(chǎn)品),這對(duì)你以後的顯示程序有很大的幫助,可以做成模塊!不管做什麼,特別是匯編,如果不做模塊,你的每個(gè)案子都會(huì)是新的,這樣會(huì)很累的!
2:不管你在做什麼,標(biāo)識(shí)千萬不要用K1,X1(變量或者子程序名)之類的,最好用相應(yīng)的英文或者中文拼音(不能怕這樣麻煩),這樣有助與你的寫作程序,不然程序大了會(huì)很麻煩!你會(huì)不知道哪個(gè)是哪個(gè)的!
3:不能用P1.X的方式吧,應(yīng)該重新定義或者改為P1^X的方式
至於其它的沒細(xì)看,不好評(píng)論!
0
回復(fù)
@fengzi7fengzi
大致瀏覽了你的程序,沒細(xì)看,有幾點(diǎn)建議:1:顯示最好用中斷做(前提是你在練習(xí),不是做產(chǎn)品),這對(duì)你以後的顯示程序有很大的幫助,可以做成模塊!不管做什麼,特別是匯編,如果不做模塊,你的每個(gè)案子都會(huì)是新的,這樣會(huì)很累的!2:不管你在做什麼,標(biāo)識(shí)千萬不要用K1,X1(變量或者子程序名)之類的,最好用相應(yīng)的英文或者中文拼音(不能怕這樣麻煩),這樣有助與你的寫作程序,不然程序大了會(huì)很麻煩!你會(huì)不知道哪個(gè)是哪個(gè)的!3:不能用P1.X的方式吧,應(yīng)該重新定義或者改為P1^X的方式至於其它的沒細(xì)看,不好評(píng)論!
謝謝你!
0
回復(fù)