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 ...
随机推荐
- IOS网络第五天 AFN-02-文件上传,底部弹出窗体,拍照和相册获取图片上传
************** #import "HMViewController.h" #import "AFNetworking.h" @interface ...
- finally类
finally叫做最后的执行快,什么是最后的执行快?他的意思是这样的 他是写在try catch 的后面但是只能写一个,他设计这个finally的意思就是,如果try里面出错肯定会往陷阱里 面跑.没有 ...
- iOS Device Specifications Grid
- 雷克萨斯-RC
-型号:RC(双门) -价格:49-59W -动力:2T -变速箱:8挡手自一体 -长宽高:4.70,1.84,1.40 -油箱:66L -发动机:8AR-FTS -大灯:LED
- XSS漏洞
跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息 坚决不要相信任何用户输入并过滤所有特殊字符.这样既可消灭绝大部分的XSS攻击.另一个建议是输出页面时将 < 和 > 变换成 ...
- js 获取滚动条的高度 以及 设置滚动条的高度
//设置窗口滚动条高度 function setScrollTop(top){ if(!isNaN(top))document.body.scrollTop = top; } //取窗口滚动条高度 f ...
- CG_INLINE,inline 内联函数
内联函数,即在编译的时候将函数体替换函数调用,从而不需要将parameter,return address进行push/pop stack的操作,从而加速app的运行,然而,会增加二进制文件的大小. ...
- Asp.Net Mvc Areas 的用法与好处
前言 在项目中为什么要使用Areas 进行分离 大家都知道,一般的Web应用都有前台(面向用户)和后台(面向管理员)两部分,我们希望以/localhost/Admin 开始的Url 是用户的后台管理地 ...
- Python 2.7 - CentOS 7 - ImportError: No module named Tkinter
It's simple. sudo yum -y install tkinter Just want to say, "I'm back".
- idea使用心得(2)-安装设置与创建web项目
idea 是与eclipse齐名的IDE(集成开发工具),以智能闻名,不过对于熟悉eclipse的的用户来说,初次接触idea有些让人搞不清方向,下面介绍一下简单的使用 方式. 1.安装 官网下载ul ...