設(shè)計(jì)任務(wù):
(1)用4個(gè)按鍵key0-key3對(duì)應(yīng)控制4個(gè)小燈LED0-LED3;用觸摸按鍵進(jìn)行模式切換;用一位數(shù)碼管顯示當(dāng)前控制模式,兩位數(shù)碼管顯示當(dāng)前得分。
(2)觸摸按鍵沒有按下時(shí)處于模式1,按下后處于模式2。用模式數(shù)碼管顯示當(dāng)前的控制模式。
(3)模式1工作方式:當(dāng)點(diǎn)亮LED0時(shí),若按下對(duì)應(yīng)的控制按鍵key0,則得分加1,如若按下別的按鍵,得分不變。每次點(diǎn)亮一個(gè)小燈,得分規(guī)則相同。當(dāng)?shù)梅掷奂拥?5,不再增加,表示本輪游戲勝利。(注:小燈的切換頻率可自行調(diào)節(jié))
(4)模式2工作方式:隨機(jī)的點(diǎn)亮小燈,若按下對(duì)應(yīng)的控制按鍵,則得分加1,如按下別的按鍵,得分減1。
(5)當(dāng)?shù)梅掷奂拥?5,不再增加,表示本輪游戲勝利;當(dāng)?shù)梅譁p到0,表示本輪游戲失敗。
(6)若游戲勝利,可加快小燈的切換頻率,再次嘗試;若游戲失敗,可放慢小燈的切換頻率,再次嘗試。
設(shè)計(jì)方案:
通過觸控板對(duì)兩種模式進(jìn)行切換,未按下觸控板時(shí),處于模式一;按下觸控板時(shí),處于模式二;若再次按下則切換到模式一。
模式一工作方式:從左往右依次點(diǎn)亮LED。若在LED點(diǎn)亮?xí)r按下對(duì)應(yīng)key,得分+1;若按下key與LED燈不對(duì)應(yīng),得分不變。當(dāng)?shù)梅掷奂拥?5時(shí),仍繼續(xù)按對(duì),則得分清零,進(jìn)入下一關(guān),蜂鳴提醒且流水燈閃爍頻加快。
模式二工作方式:隨機(jī)點(diǎn)亮LED。若在LED點(diǎn)亮?xí)r按下對(duì)應(yīng)key,則得分+1;若按下key與LED燈不對(duì)應(yīng),得分-1。當(dāng)?shù)梅掷奂拥?5時(shí),仍繼續(xù)按對(duì),得分清0,進(jìn)入下一關(guān),蜂鳴提醒且流水燈閃爍頻率加快;當(dāng)?shù)梅譃?時(shí),仍繼續(xù)按錯(cuò)后,回到上一關(guān),蜂鳴提醒且小燈閃爍頻率減慢。
功能模塊包括:LED點(diǎn)亮模塊;按鍵防抖模塊;得分計(jì)數(shù)模塊;數(shù)碼管顯示模塊。
LED點(diǎn)亮模塊:
本程序中輸入時(shí)鐘為50MHz,所以一個(gè)時(shí)鐘周期為20ns(1/50MHz)。因此計(jì)數(shù)器counter 通過對(duì)50MHz系統(tǒng)時(shí)鐘計(jì)數(shù),計(jì)時(shí)到1s,需要累加1s/20ns=50000000次。頻率加快和減慢部分由計(jì)數(shù)模塊中輸出的計(jì)滿信號(hào)A,減0信號(hào)B來進(jìn)行控制,當(dāng)A為1時(shí),計(jì)時(shí)減小0.2s,當(dāng)B為1時(shí),計(jì)時(shí)增加0.2s,其設(shè)計(jì)語句為“TIME-A*push+B*push”。
模式一中LED點(diǎn)亮的設(shè)計(jì)方案是利用計(jì)數(shù)器計(jì)時(shí),當(dāng)計(jì)時(shí)到1s時(shí),讓led_control+1,使led_control在四個(gè)狀態(tài)(00,01,10,11)內(nèi)依次變化,然后利用case條件語句在四種LED燈點(diǎn)亮模式(4’b0001、4’b0010、4’b0100、4’b1000)進(jìn)行選擇,達(dá)到從左到右依次點(diǎn)亮LED的效果。
模式二中LED點(diǎn)亮的設(shè)計(jì)方案是利用偽隨機(jī)數(shù)的產(chǎn)生,當(dāng)計(jì)數(shù)器計(jì)時(shí)到1s時(shí),將偽隨機(jī)數(shù)傳輸給led達(dá)到點(diǎn)亮LED燈的效果。
按鍵防抖模塊:這一模塊在CSDN上有很多啦,這里就不在畫蛇添足啦。
得分計(jì)數(shù)模塊:
其計(jì)數(shù)功能分為兩種工作方式:模式一和模式二。模式一工作方式:若在LED點(diǎn)亮?xí)r按下對(duì)應(yīng)key,DATA+1;若按下key與LED燈不對(duì)應(yīng),DATA不變。當(dāng)DATA累加到15時(shí),繼續(xù)得分,則DATA清零,蜂鳴提醒。模式二工作方式:若在LED點(diǎn)亮?xí)r按下對(duì)應(yīng)key,則得分+1;若按下key與LED燈不對(duì)應(yīng),得分-1。當(dāng)?shù)梅掷奂拥?5時(shí),繼續(xù)按對(duì)后,得分清0,蜂鳴提醒;當(dāng)?shù)梅譃?時(shí),繼續(xù)按錯(cuò)后,蜂鳴提醒。故通過使用if_else語句對(duì)條件進(jìn)行判斷,來實(shí)現(xiàn)上述計(jì)數(shù)功能。
當(dāng)touch為“1”時(shí),處于模式一,使用條件語句進(jìn)行判斷。當(dāng)key_pluse為“1”且對(duì)應(yīng)led燈點(diǎn)亮?xí)r,使data加1,否則不變。當(dāng)data為于15時(shí),對(duì)data清0,并給計(jì)滿信號(hào)A賦值為“1”,使蜂鳴器鳴叫,并將計(jì)滿信號(hào)A輸出給LED燈點(diǎn)亮模塊,實(shí)現(xiàn)頻率的加快。
當(dāng)touch為“0”時(shí),處于模式二,使用條件語句進(jìn)行判斷。當(dāng)只要是key_pluse有效時(shí),就對(duì)key_pluse和對(duì)應(yīng)led進(jìn)行判斷。若key_pluse和對(duì)應(yīng)led相等時(shí),使data+1,否則data-1。當(dāng)data為15時(shí),對(duì)data清0,并給計(jì)滿信號(hào)A賦值為“1”,使蜂鳴器鳴叫,并將計(jì)滿信號(hào)A輸出給LED燈點(diǎn)亮模塊,實(shí)現(xiàn)LED閃爍頻率加快。當(dāng)data為0時(shí),給減0信號(hào)B賦值為“1”,使蜂鳴器鳴叫,并將減0信號(hào)輸出給給LED燈點(diǎn)亮模塊,實(shí)現(xiàn)LED閃爍頻率減慢。文章來源:http://www.zghlxwxcb.cn/news/detail-528602.html
數(shù)碼顯示模塊:這一塊也有很多資料啦,也就不贅述啦。文章來源地址http://www.zghlxwxcb.cn/news/detail-528602.html
到了這里,關(guān)于基于Verilog HDL的按鍵控制流水燈即打地鼠小游戲的設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!