OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3637|回复: 0

关于游戏手柄的一些理解。。

[复制链接]

16

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2018-10-20
在线时间
30 小时
发表于 2018-11-5 23:41:10 | 显示全部楼层 |阅读模式
游戏手柄的读取时序应该是 :A->B->SELECT->START->UP->DOWN->LEFT->RIGHT
而不是像时序图的那样。。

$Q[D5CC@INCEYNF9%%1.png
这里 select 和START 顺序调换一下。。

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;
}


讲解下这个程序:
      当你按下 A键时,进入for循环JOYPAD_LAT 已经产生了一个下降沿,在t=0时,JOYPAD_DAT==0表示按键按下,此时检测到A按键按下。temp = 1000 0000
      跳出循环时, temp的值为  0000 0001 ,所以A按键的值为 1,也符合 首先读取A按键的时序图。
     当你按下 SELECT 按键时,经过三次循环,JOYPAD_DAT才检测到 这个按键按下   temp = 1000 0000
    在继续循环5次,跳出循环,此时  temp = 0000 0100 所以SELECT 的值为 4。  其他的值依次类推。。
   
  我们在主程序中定义一个 指针数组  
const u8*JOYPAD_SYMBOL_TBL[8]=
{"A","B","Select","Start","Up","Down","Left","Right"};//手柄按键符号定义



然后在改动下 main 程序的for循环
                        for(i=0;i<8;i++)
                        {
                                if(key&(0X01<<i))   //  在这个地方改动了。。
                                {
                                        LCD_Fill(30+56,150,30+56+48,150+16,WHITE);//清除之前的显示
                                        LCD_ShowString(30+56,150,200,16,16,(u8*)JOYPAD_SYMBOL_TBL);//显示符号
                                }               
                        }               


经战舰版上测试 没有问题。以上个人理解,有错误还往大佬指出。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 14:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表