作者:GWD 时间:2019.7.1
一、 学习要点 1.检测正常电压时2..5V,最大值5V,最小值0V,实际上是两个x,y方向滑动变阻器,使用PCF通过检测8591模数转换模块电压值的变化,可以知道摇杆的位置; 2.它就像游戏控制台中的操纵杆。您可以控制输入操纵杆模块 x、 y、 z 它可以被视为按钮和电位计在特定值下实现某种功能的组合。数据类型 x,y 维维模拟输入信号 z 因此,维是数字输入信号,x 和 y 端口连接到模拟插脚传感器端, z 端口连接到数字端口。 二、 手册分析 1、 2、PS2 游戏双轴摇杆传感器模块采用原装优质金属 PS2 具有摇杆电位器的制造(X,Y)2 轴模拟输出, (Z)1 数字输出路按钮。 单片机可制作遥控器等互动作品。 三、 编程 1.程序功能:摇杆X、Y轴分别接PCF8591的AIN0、AIN1引脚,沿着X、Y移动摇杆串口方向打印的数字呈线性变化,按下摇杆P2.0引脚的小灯点亮; 2、程序效果: 2、PS2 游戏双轴摇杆传感器模块采用原装优质金属 PS2 具有摇杆电位器的制造(X,Y)2 轴模拟输出, (Z)1 数字输出路按钮。 单片机可制作遥控器等互动作品。 三、 编程 1.程序功能:摇杆X、Y轴分别接PCF8591的AIN0、AIN1引脚,沿着X、Y移动摇杆串口方向打印的数字呈线性变化,按下摇杆P2.0引脚的小灯亮了; 2、程序效果: 3、代码 Main.c
#include <reg52.h> //包含头文件,一般不需要更改,头文件包含特殊功能寄存器的定义 #include "stdio.h" #include "delay.h" #include "IIC.h" #include "PCF8591.h" typedef unsigned char uChar8; typedef unsigned int uInt16; void InitUART (void) { TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz TL1 = TH1; TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 // timer 0,16位计数 SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收 ES = 1; //打开串口中断 TR1 = 1; // TR1: timer 1 打开 TI=1; } void main (void) { char i=0; int x=0,y=0; InitUART(); while (1) { x = RD_OneByte2Pcf8591(0x92,0x40); y = RD_OneByte2Pcf8591(0x92,0x41); printf("摇杆位置 X=%d,Y=%d\n\r",x,y); Delay2000ms(); } }
PCF8591.c
#include "PCF8591.h" void WR_OneByte2Pcf8591(unsigned char address,unsigned char cmd,unsigned char dat) { _nop_(); iic_start(); _nop_(); iic_sendbyte(address); _nop_(); iic_sendbyte(cmd); _nop_(); iic_sendbyte(dat); } int RD_OneByte2Pcf8591(unsigned char address,unsigned char cmd) { int num = 0; iic_start(); //address=0x41 iic_sendbyte(address); iic_sendbyte(cmd); iic_start(); //address=0x41 iic_sendbyte(address|0x01); num = iic_rcvbyte_nack(); return (num); }
代码下载地址: 链接:https://pan.baidu.com/s/1aNVDaUgucrI3oTHRR80EDw 提取码:00ug