freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機(jī)的四路搶答器設(shè)計(jì)資料(編輯修改稿)

2024-12-18 14:56 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 a(uchar byte) //MAX7219 的驅(qū)動(dòng)程序 {} 基于 MCS51 單片機(jī)的四路搶答器 搶答器是為智力競(jìng)賽參賽者答題時(shí)進(jìn)行搶答而設(shè)計(jì)的一種優(yōu)先判決器電路,廣泛應(yīng)用于各種知識(shí)競(jìng)賽、文娛活動(dòng)等場(chǎng)合。 能夠?qū)崿F(xiàn)搶答器功能的方式有多種 。 曾經(jīng)咱們用的是 可以采用前期的模擬電路、數(shù)字電路或模擬與數(shù)字電路相結(jié)合的方式,但這種方式制作過(guò)程復(fù)雜,而且準(zhǔn)確性與可靠性不高,成品面積大,安裝、維護(hù)困難。 本次我們 單片機(jī)作為核心部件進(jìn)行邏輯控制及信號(hào)產(chǎn) 生的四路搶答器。 硬件設(shè)計(jì) 硬件電路應(yīng)能完成以下功能:參加競(jìng)賽者對(duì)主持人提出的問(wèn)題要在最短的時(shí)間內(nèi)作出判斷,并按下?lián)尨鸢存I回答問(wèn)題。 當(dāng)?shù)谝粋€(gè)人按下按鍵后,則在顯示器上顯示此競(jìng)賽者的號(hào)碼并進(jìn)行聲音提示, 同時(shí)電路將其他搶答按鍵封鎖,使其不起作用 。若有人在可以搶答之前按鍵,應(yīng)該有違規(guī)提示。電路應(yīng)該具有倒計(jì)時(shí)功能,倒計(jì)時(shí)時(shí)間可以設(shè)置并顯示,在規(guī)定時(shí)間內(nèi)沒(méi)有人搶答則本題作廢?;卮鹜昊虺瑫r(shí)后,由主持人將所有按鍵恢復(fù),重新開(kāi)始下一輪。 完成上述功能的電路如圖 所示。 各電路模塊的功能如下。 單片機(jī)部分:通過(guò)讀取 ~ 的狀態(tài)決定倒計(jì)時(shí)時(shí)間;通過(guò)讀取 P1.3~ 的狀態(tài)讀取按鍵情況;通過(guò) ~ 控制顯示模塊以顯示按鍵者的號(hào)碼和倒計(jì)時(shí)所剩時(shí)間;通過(guò) 控制蜂鳴器。 時(shí)間設(shè)定模塊:以撥碼開(kāi)關(guān) U3 作為倒計(jì)時(shí)時(shí)間的選擇信號(hào)。若 通過(guò)U3接地,倒計(jì)時(shí)時(shí)間為 10s;若 通過(guò) U3 接地,倒計(jì)時(shí)時(shí)間為 8s,若 通過(guò) U3 接地,倒計(jì)時(shí)時(shí)間為 6s,若 通過(guò) U3接地,倒計(jì)時(shí)時(shí)間為 4s。判斷時(shí) 優(yōu)先級(jí)最高, 優(yōu)先級(jí)最低。 按鍵模塊: KEY1~ KEY4的信息可以直接傳輸?shù)?~ 。單片機(jī)一旦檢測(cè)到有按鍵按下,立即將 置為低電平,將按鍵信息鎖存,以免后來(lái)的按鍵對(duì)其產(chǎn)生影響。 KEY1~ KEY4 為搶答按鍵, KEY5 為主持人控制按鍵。 數(shù)碼管顯示模塊:數(shù)碼管顯示模塊由一片 MAX7219 和 3 個(gè)數(shù)碼管組成。其中 U5 用來(lái)顯示按鍵者的編號(hào), U U7 在倒計(jì)時(shí)時(shí)顯示還有多長(zhǎng)時(shí)間,如果有人犯規(guī)搶答, U6~ U7 顯示 “FF” 。 蜂鳴器模塊:蜂鳴器在主持人發(fā)出可以搶答信號(hào)、有人按下?lián)尨鸢存I和倒計(jì)時(shí)時(shí)間到等 3種情況下發(fā)出蜂鳴聲。 程序設(shè)計(jì) 搶答器工作過(guò)程如下。 首先主持人選定倒計(jì)時(shí)時(shí)間,單片機(jī)掃描 U3以獲取此信息。如果沒(méi)有人為設(shè)置,默認(rèn)為 10s。 在按下?lián)尨鸢存I之前, 3個(gè)數(shù)碼管全部顯示 “0” 。 按下?lián)尨鸢存I之后,蜂鳴器響一聲,單片機(jī)開(kāi)始倒計(jì)時(shí),數(shù)碼管 U6 和 U7顯示倒計(jì)時(shí)時(shí)間,數(shù)碼管 U5 顯示 “0” 。 如果有競(jìng)賽者率先在規(guī)定時(shí)間內(nèi)按鍵,則蜂鳴器響一聲,數(shù)碼管 U5顯示該競(jìng)賽者的編號(hào), U6 和 U7 停止更新。 如果在主持人未按下?lián)尨鸢存I的時(shí)候有選手搶答,則此時(shí)蜂鳴器響一聲, U5顯示犯規(guī)者的編號(hào), U6和 U7顯示 “FF” 以指示有人犯規(guī)。 如果在規(guī)定時(shí)間內(nèi)無(wú)人按鍵,則 U5 顯示 “0” , U6 和 U7顯示 “EE” 以指示無(wú)人按鍵。 無(wú)論是在規(guī)定時(shí)間內(nèi)有人按鍵、在規(guī)定時(shí)間內(nèi)無(wú)人按鍵或者是有人犯規(guī),都需要主持人再按一下?lián)尨鸢存I,之后單片機(jī)根據(jù) U3狀態(tài)決定倒計(jì)時(shí)時(shí)間, 3個(gè)數(shù)碼管全部顯示 “0” ,恢復(fù)到初始狀態(tài),準(zhǔn)備下一輪搶答。 程序流程如圖 所示。 圖 四路搶答器程序流程圖 程序如例 134所示。 【例 134】用 8051 單片機(jī)控制的四路搶答 器程序。限于篇幅,這里沒(méi)有給出顯示程序,參見(jiàn) 節(jié)中例 125。 include typedef unsigned char uchar。 sbit LE=P1^4。 sbit KEY5=P3^7。 sbit DIN=P2^4。 //定義 控制 MAX7219 的串行數(shù)據(jù)輸入端 sbit LOAD=P2^3。 //定義 控制 MAX7219 的載入使能端 sbit CLK=P2^2。 //定義 控制 MAX7219 的時(shí)鐘信號(hào) sbit BUZ=P0^1。 define TIMER_HBYTE 50000/256 //定時(shí) 50ms define TIMER_LBYTE 50000%256 uchar intr_counter。 //設(shè)定的時(shí)間用需要產(chǎn)生的中斷次數(shù)表示 uchar bdata byte。 //在 bdata區(qū) 定義一個(gè)變量,便于位操作 sbit byte_7=byte^7。 bit foul_flg。 //是否有人犯規(guī)標(biāo)志 bit time_over_flg。 //是否倒計(jì)時(shí)超時(shí)標(biāo)志 bit key_flg。 //是否有人在規(guī)定時(shí)間內(nèi)按鍵標(biāo)志 void max7219_reset(void)。 //初始化 MAX7219 void write_reg(uchar,uchar)。 //向控制寄存器寫(xiě)數(shù)據(jù) void write_digit(uchar,uchar)。 //向字型寄存器寫(xiě)數(shù)據(jù) void send_data(uchar)。 //底層的硬件驅(qū)動(dòng) uchar set_time(void)。 //函數(shù)功能:設(shè)置倒計(jì)時(shí)時(shí)間 bit control_key(void)。 //函數(shù)功能:檢測(cè)主持人是否按鍵 uchar get_key_num(void)。 //函數(shù)功能:檢測(cè)哪個(gè)參賽者按鍵 void display_time(void)。 //函數(shù)功能:顯示倒計(jì)時(shí)剩余時(shí)間 void foul_handle(uchar)。 //函數(shù)功能:犯規(guī)處理 void key_handle(uchar)。 //函數(shù)功能:按鍵處理 void time_over_handle(void)。 //函數(shù)功能:超時(shí)處理 void init_t0(void)。 //函數(shù)功能:初始化 T0 定時(shí)器 void delay_20ms(void)。 //函數(shù)功能:延時(shí) 20ms,按鍵去抖動(dòng) void buz_on(void) //函數(shù)功能:蜂鳴器響 500ms void main(void) { uchar key_number。 max7219_reset()。 //初始化 MAX7219 while(1) { foul_flg=0。 //設(shè)置初始環(huán)境 time_over_flg=0。 TR0=0。 //禁止 T0 運(yùn)行 write_digit(DIGIT0,LED_code[0x0])。//上電后 3 個(gè)數(shù)碼管全部顯示 0 write_digit(DIGIT1,LED_code[0x0])。 write_digit(DIGIT2,LED_code[0x0])。 while((control_key()==1)amp。amp。(foul_flg==0)) //如果主持人沒(méi)有按鍵 { key_number=getkey_num()。 //檢查是否有人犯規(guī) if(key_number==0) //如果沒(méi)有,進(jìn)行下一次循環(huán) continue。 else //如果有人犯規(guī) { foul_handle()。 //犯規(guī)處理 foul_flg=1。 //設(shè)置犯規(guī)標(biāo)志 } } if(foul_flg==1) //如果有人犯規(guī) { while(control_key()==1)。 //等待主持人按鍵以進(jìn)入下一輪 continue。 //主持人按鍵后進(jìn)入下一輪 } else //如果沒(méi)有人犯規(guī),必定是主持人允許答題 { intr_counter=set_time()。 //讀取倒計(jì)時(shí)時(shí)間 init_t0()。 //定時(shí)器 T0 開(kāi)始計(jì)時(shí) buz_on()。 //蜂鳴器響 500ms while(time_over_flg==0amp。amp。key_flg==0) { key_number=getkey_num()。 //在規(guī)定時(shí)間內(nèi)檢查是否 有按鍵 if(key_number!=0) //如果有 { key_handle(key_number)。//按鍵處理 key_flg=1。 //設(shè)置有人按鍵答題標(biāo)志 TR0=0。 //停止 T0 運(yùn)行 } else //否則循環(huán)檢測(cè) { display_time()。 //并顯示剩余時(shí)間 continue。 } } if(key_flg==1) //如果有人在規(guī)定時(shí)間內(nèi)答題 { while(control_key==1)。 //等待主持人按鍵以進(jìn)入下一輪 continue。 //主持人按鍵后進(jìn)入下一輪 } else //倒計(jì)時(shí)時(shí)間到仍無(wú)人按鍵 { time_over_handle()。 //超時(shí)處理 while(control_key==1)。 //等待主持人按鍵以進(jìn)入下一輪 continue。 //主持人按鍵后進(jìn)入下一輪 } } } } bit control_key(void) //檢測(cè)主持人是否按鍵 { if(KEY5==1) //如果 KEY5 為高,說(shuō)明沒(méi)有按鍵 return 1。 //返回 1,表示沒(méi)有按鍵動(dòng)作 else //如果 KEY5 為低,說(shuō)明可能有按鍵動(dòng)作 delay_20ms()。 //延時(shí) 20ms,去抖動(dòng) if(KEY
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1