nes 红白机模拟器 第3篇 游戏手柄测试 51 STM32
手柄使用的是 CD4021 ,datasheet 上说支持 3V - 15V 。

因为手柄是 5V 供电,2440 开发板上是GPIO 3.3V 电平,STM32 GPIO 也是 3.3V (也兼容5V)电平。
所以先在 STM32 上测试能用后,在接到 2440 开发板上。

正好是 8个键值,用来点 8个 LED 。按下一个键,就会亮一个灯。
c51 :
#include <reg52.h> sbit CLK = P2 ^ ;
sbit LATCH = P2 ^ ;
sbit DAT0 = P2 ^ ; void Delay10us() //@11.0592MHz
{
unsigned char i;
i = ;
while (--i);
} unsigned char joypad()
{
int i;
unsigned char cmd = ;
LATCH = ;
Delay10us();
LATCH = ;
for(i=; i<;i++)
{
Delay10us();
if(DAT0)
{
cmd |= <<i;
}
CLK = ;
Delay10us();
CLK = ;
}
LATCH = CLK = ;
return cmd;
} int main()
{
unsigned char cmd;
CLK = LATCH = DAT0 = ;
Delay10us();
while()
{
cmd = joypad();
//点灯
P1 = cmd;
}
}
STM32 : 主要部分,其它部分源码,可以在STM32分类里面找到。
#include "stm32f10x.h"
#include "bitband.h"
#include "delay.h" void SystemInit()
{
RCC->CR |= RCC_CR_HSEON; /* 外部时钟开 */
while(! (RCC->CR & RCC_CR_HSERDY)); /* 检查标志位判断是否就续 */ RCC->CFGR = RCC_CFGR_PPRE1_2; /* APB1低速设备2分频72M/2=36M */
RCC->CFGR |= RCC_CFGR_PLLMULL9; /* PLL 9 倍频 */
RCC->CFGR |= RCC_CFGR_PLLSRC; /* HSE 做为 PLL 输入 */ FLASH->ACR |= ; /* 2个等待状态 72M */ RCC->CR |= RCC_CR_PLLON; /* 启用 PLL */
while(! (RCC->CR & RCC_CR_HSERDY)); /* 检查标志位判断是否就续 */ RCC->CFGR |=RCC_CFGR_SW_PLL; /* 选择外部时钟作为系统时钟 */
while( != ((RCC->CFGR>>) & )); /* 检查标志位判断是否就续 */
} u8 joypad()
{
int i;
u8 cmd = ;
GPC_BSRR() = ;
delay_us();
GPC_BRR() = ;
for(i=; i<;i++)
{
delay_us();
//低电平时表示按下了
if( == GPC_IDR())
{
cmd |= <<i;
}
GPC_BSRR() = ;
delay_us();
GPC_BRR() = ;
}
GPC_BRR() = ;
GPC_BRR() = ;
return cmd;
} int main(void)
{
u8 cmd;
//引脚启用时钟 IOA IOB IOC
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN; GPIOC->CRL = ; //配置LED灯引脚模式 PC7
GPIOC->CRL |= GPIO_CRL_MODE7; //MODE 设为 11 :50M 输出模式
GPC_BSRR() = ; //配置 手柄CLK引脚模式 PC0
GPIOC->CRL |= GPIO_CRL_MODE0; //MODE 设为 11 :50M 输出模式
//默认 低电平
GPC_BRR() = ; //配置 手柄LATCH引脚模式 PC1
GPIOC->CRL |= GPIO_CRL_MODE1; //MODE 设为 11 :50M 输出模式
//默认 低电平
GPC_BRR() = ; //手柄 DAT0 输入引脚 PC2
GPIOC->CRL |= GPIO_CRL_CNF2_1; //10 输入模式 上拉 / 下拉
//设置下拉
GPC_BRR() = ; //循环点亮
while()
{
cmd = joypad();
//如果有输入就点LED
if(cmd)
{
GPC_ODR() = ;
}
else
{
GPC_ODR() = ;
} }
return ;
}
nes 红白机模拟器 第3篇 游戏手柄测试 51 STM32的更多相关文章
- nes 红白机模拟器 第7篇 编译使用方法
模拟器,基于 InfoNES ,作者添加修改以下功能: 1, joypad 真实手柄驱动程序(字符型设备驱动) 2,原始图像只有256*240 ,添加 图像放大算法,这里实现了2种,a, 最近邻插值 ...
- arm 2440 linux 应用程序 nes 红白机模拟器 第1篇
对比了很多种,开源的 NES 模拟器 VirtuaNES , nestopia , FakeNES , FCEUX , InfoNES , LiteNES 最后决定使用 LiteNES 进行移值,它是 ...
- nes 红白机模拟器 第1篇
对比了很多种,开源的 NES 模拟器 VirtuaNES , nestopia , FakeNES , FCEUX , InfoNES , LiteNES 最后决定使用 LiteNES 进行移值,它是 ...
- arm 2440 linux 应用程序 nes 红白机模拟器 第4篇 linux 手柄驱动支持
小霸王学习机的真实手柄,实测CPU 占用 80% 接线图: 手柄读时序: joypad.c 驱动: 普通的字符设备驱动. #include <linux/module.h> #includ ...
- arm 2440 linux 应用程序 nes 红白机模拟器 第2篇 InfoNES
InfoNES 支持 map ,声音,代码比较少,方便 移值. 在上个 LiteNES 的基础上,其实不到半小时就移值好了这个,但问题是,一直是黑屏.InfoNES_LoadFrame () Wo ...
- nes 红白机模拟器 第6篇 声音支持
InfoNES 源码中并没有包含 linux 的声音支持. 但提供 wince 和 win 的工程,文件,通过分析,win 的 DirectSound 发声,在使用 linux ALSA 实现. 先使 ...
- nes 红白机模拟器 第5篇 全屏显示
先看一下效果图 放大的原理是使用最初级的算法,直接取对应像素法. /*================================================================= ...
- nes 红白机模拟器 第4篇 linux 手柄驱动支持
小霸王学习机的真实手柄,实测CPU 占用 80% 接线图: 手柄读时序: joypad.c 驱动: 普通的字符设备驱动. #include <linux/module.h> #includ ...
- nes 红白机模拟器 第2篇 InfoNES
InfoNES 支持 map ,声音,代码比较少,方便 移值. 在上个 LiteNES 的基础上,其实不到半小时就移值好了这个,但问题是,一直是黑屏.InfoNES_LoadFrame () Wo ...
随机推荐
- 计算LDA模型困惑度
http://www.52nlp.cn/lda-math-lda-%E6%96%87%E6%9C%AC%E5%BB%BA%E6%A8%A1 LDA主题模型评估方法--Perplexity http:/ ...
- 【emWin】例程三:显示方向的切换
实验指导书及代码包下载: http://pan.baidu.com/s/1pK9o0xP
- 关于 apue.h 的使用方法
unix中有很多地方使用到apue.h .apue.h是作者自己写的一个头文件,这个文件怎么用,晚上有很多方法,但是经过尝试大多不好用. 经过本人尝试,可以把src.3e.tar.gz 的代码解压到 ...
- JavaScript 入门教程四 语言基础【3】
一.数据类型介绍: String 1.是使用 Unicode 字符组成的字符序列.所以可以容纳各种语言. 2.字符串可以使用双引号(“”)或者单引号('')表示,但必须成对出现. 3.转移序列使用 \ ...
- Ubuntu ./configure 半途终止 导致没有生成makefile文件 解决方法
在安装thrift的时候,解压包进入目录,执行命令: ./configure 之后,发现某些包没有安装,导致configure到一半的时候退出,接着make发现没有makefile文件.估计是我系统安 ...
- git 强制覆盖本地
git fetch --all git reset --hard origin/master git pull 参考:https://ruby-china.org/topics/2494
- Thinking in Java——笔记(16)
Arrays Why arrays are special There are three issues that distinguish arrays from other types of con ...
- [bzoj1087][scoi2005]互不侵犯king
题目大意 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 思路 首先,搜索可以放弃,因为这是一 ...
- Python先合并再排序
前几天遇到的美团笔试题 题目:大概要求输入两组数字,对这两组数值排序然后输出结果 思路:输入两组数,合并两组数,排序 list1 = raw_input("input some number ...
- 使用 JDBC 和 JavaTemplate 查询SQL语句返回 List<Map<String,Object>>
使用JDBC执行sql语句返回List 类型: public class JdbcUtil { private static Log log = LogFactory.getLog(JdbcUtil. ...