有一種常見的益智小遊戲:
遊戲中,螢幕會顯示一組10位數字,並很快消失,
玩家通過瞬時記憶,輸入相同的內容,如正確,進入下一關;錯誤,將重新開始
隨著關卡後移,螢幕顯示陣列的時間會越來越短,以提高難度
51雖然是一款最基礎的微控制器,但這次,我想實現上面的遊戲功能。
需要的外設:(如圖)51開發板 ,整合一體的紅外置收頭 遙控器 lcd1602
先預想好按鍵功能:
分析幾個問題:
1、產生隨機數的方法:rand函式,種子則通過定時器的th 和tl讀取
2、紅外遙控資料的讀取:好在開發板接到的是微控制器的外部中斷1引腳 p3.3 通過外部中斷,讀取按鍵資料按照紅外協議即可
3、儲存遊戲記錄:好不容易玩到成績很高的記錄,一定要儲存下來,這裡利用開發板上的at24c02可實現,通過微控制器io口模擬iic的訪問,記錄遊戲最高記錄
4、遊戲中原本該按確認鍵(或其他),結果按錯了:做乙個按鍵過濾機制,當前遊戲處於某一狀態下,其他按鍵按下無效。
有了上面的幾條分析,在寫程式的時候就會順利很多。下面貼出來主要函式的**:
獲取隨機數:
void getrand()
}外部中斷的紅外遙控資料讀取:
void exint1()interrupt 2
;ex1=0;
for(i=0;i<255;i++) //9ms內有高電平認為是干擾
}while(!(p3&0x08)); //等待9ms低電平過去
for(i=0;i<4;i++)
}addr[i]=addr[i]>>1; //接收一位資料
if(k>=8)
addr[i]=addr[i]|0x80; //高電平大於0.56ms,則為1
k=0;
}}
flag_r = 1;
revd = addr[2];
ex1=1;
}iic模擬:
bit writenbyte(unsigned int sla,unsigned int suba,unsigned int *s,unsigned int n)
if(status == 1) //狀態過濾機制 1
好了,編譯通過就開始遊戲吧:
51微控制器設計計算器
參考了這個博主的 寫的覺得條理很清楚 的寫法基本也是按照這位博主的,只改了一些 矩陣按鍵代表計算器中的值 可以實現連續的加減乘除 p0 傳送資料 p2實現動態數碼管的片選 p1接矩陣按鍵 36 9清零25 8 14 70下面是 在這裡插入 片 include include define uc un...
基於51微控制器modbusRTU從機設計
在了解modbus協議後就是基於該協議的設計了,下面先說一下基於航太電子htm52微控制器的從機設計。設計思想如下 modbus協議是以主從的方式通訊的,也就是上位機傳送指令,下位機應答機制,發起通訊的一直是上位機,下位機只要應答就好了。modbus協議被設計出來是針對plc應用的,這裡我們可以簡單...
藍橋杯微控制器設計與開發筆記(一)
近期和我們實驗室的小夥伴一起參加了第七屆藍橋杯微控制器開發與設計組省賽,在這裡將備賽期間的一些資料和經驗總結一下,並分享給大家。藍橋杯微控制器開發板是國信長天的ct107d微控制器綜合訓練平台,個人感覺這塊開發板的設計還是很不錯的。之前一直用的普中的板子,自己也做過一些最小系統板,練習了藍橋杯的板子...