FC手柄键值读取
FC手柄,大致可分為兩種:一種手柄插口是11針的,一種是9針的,可以直接和DR9的串口頭對插。
FC手柄有10個按鍵(實際上只有8個):
上、下、左、右、Start、Select、A、B、A連發、B連發。
A和A連發是一個鍵值,而B和B連發也是一個鍵值,只是連發按鍵當你一直按下的時候,會不停的發送(方便快速按鍵,比如發炮彈之類的功能)。
FC手柄的控制電路,由1個8位并入串出的移位寄存器(CD4021),外加一個時基集成電路(NE555,用于連發)構成。讀取手柄按鍵值的信息十分簡單:先Latch(鎖存鍵值),然后就得到了第一個按鍵值(A,下降沿采集),之后在7個Clock的作用下,依次讀取其他按鍵的鍵值,總共8個按鍵鍵值。
讀寫時序圖:
code
//手柄延遲函數 //t:要延遲的時間 void JOYPAD_Delay(u16 t) {while(t--); } //讀取手柄按鍵值. //FC手柄數據輸出格式: //每給一個脈沖,輸出一位數據,輸出順序: //A->B->SELECT->START->UP->DOWN->LEFT->RIGHT. //總共8位,對于有C按鈕的手柄,按下C其實就等于A+B同時按下. //按下是1,松開是0. //返回值: //[7]:右 //[6]:左 //[5]:下 //[4]:上 //[3]:Start //[2]:Select //[1]:B //[0]:A u8 JOYPAD_Read(void) {vu8 temp=0;u8 t;JOYPAD_LAT=1; //鎖存當前狀態JOYPAD_Delay(80);JOYPAD_LAT=0; for(t=0;t<8;t++){temp>>=1; if(JOYPAD_DAT==0)temp|=0x80;//LOAD之后,就得到第一個數據JOYPAD_CLK=1; //每給一次脈沖,收到一個數據JOYPAD_Delay(80);JOYPAD_CLK=0; JOYPAD_Delay(80); }return temp; }總結
- 上一篇: cent os 7.x上安装oracle
- 下一篇: 树脂除镍离子交换作用