完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、查看X9313手册
这就是个滑动变阻器的电动版。 每滑动一次就改变一次电压,往电压高或者低的方向滑动,最多只能滑动 1 - 31 次。 每滑动一次,Vw管脚的电压就增加或减少 0.106V。 手册说CS片选管脚为高电平,就啥也干不了。 当CS为低电平,UD为高电平,INC从高电平变为低电平一次,就向高电平方向滑动一次。 当CS为低电平,UD为低电平,INC从高电平变为低电平一次,就向低电平方向滑动一次。 当CS由低电平变为高电平,INC管脚为高电平,x9313保存当前滑动位置(此滑动位置就是下次滑动时候的初始位置)。 当CS由低电平变为高电平,INC管脚为低电平,x9313不保存当前滑动位置,返回到初始滑动位置。 2、查看电路连接 3、驱动代码 bzq.h #ifndef _BZQ_H #define _BZQ_H //#include "添加你自己的各种头文件.h" /***********************变阻器GPIO定义******************************************/ #define BZQ_CS_1M PBout(7) #define BZQ_UP_1M PBout(6) #define BZQ_INC_1M PBout(5) void Bzq_Up_I(u8 arg); void Bzq_Down_I(u8 arg); void Bzq_SetVal(u8 channel, u8 arg); #endif bzq.c #include "bzq.h" /**************************************************** 函数名:GPIO_X9313WPI_Config() 形参: 返回值: 函数功能:滑动变阻器的IO口初始化 PB5 -- INC_1 PB6 -- UP_1 PB7 -- CS_1 ****************************************************/ void GPIO_X9313WPI_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStruct); } /******************************* * 函 数 名: void Bzq_Up(u8 arg) * 功能说明: 变阻器设置向上滑动 * 形 参: arg 滑动次数 * 返 回 值: 无 *******************************/ void Bzq_Up(u8 arg) { u8 i=0; BZQ_CS_1M = 0;//片选有效 BZQ_INC_1M = 0; MYDelay_ms(5);//自己随便写个延时函数延时5ms BZQ_UP_1M = 1;//向高端滑动 MYDelay_ms(5);//自己随便写个延时函数延时5ms for(i = 0; i { BZQ_INC_1M = 1; MYDelay_ms(5);//自己随便写个延时函数延时5ms BZQ_INC_1M = 0; MYDelay_ms(5);//自己随便写个延时函数延时5ms } BZQ_INC_1M = 1;//保存 MYDelay_ms(5);//自己随便写个延时函数延时5ms BZQ_CS_1M = 1;//片选无效 MYDelay_ms(10); } /******************************* * 函 数 名: void Bzq_Down(void) * 功能说明: 变阻器设置向下滑动 * 形 参: arg 滑动个数 * 返 回 值: 无 *******************************/ void Bzq_Down(u8 arg) { u8 i =0; BZQ_CS_1M = 0;//片选有效 BZQ_INC_1M = 0; MYDelay_us(5); BZQ_UP_1M = 0;//向低端滑动 MYDelay_us(5); for(i = 0; i { BZQ_INC_1M = 1; MYDelay_us(5); BZQ_INC_1M = 0; MYDelay_us(5); } BZQ_INC_1M = 1;//保存 MYDelay_ms(5); BZQ_CS_1M = 1;//片选无效 MYDelay_ms(10); } /******************************* * 函 数 名: void Bzq_SetVal( u8 arg) * 功能说明: 变阻器设置滑动次数 * 形 参: arg 滑动个数 * 返 回 值: 无 *******************************/ u8 tempNow = 0;//全局变量 保存按键第一次调节的数 如果第一次没调节就初始值为0 u8 tempLast = 0;//全局变量 保存按键第二次调节的数 u8 cir=0;//调节次数 由两个按键的数值之差决定 void Bzq_SetVal(u8 arg) { if(tempNow { cir = tempLast - tempNow; Bzq_Up(cir);//滑动变阻器向电压增大的方向滑动 } else { cir = tempNow - tempLast; Bzq_Down(cir);//滑动变阻器向电压减小的方向滑动 } } main.c int main(void) { u8 i = j =0; GPIO_X9313WPI_Config(); for(i=1; i<31; i++) { Bzq_Down(i);//滑动31次 - 0V 滑动30次-0.1V 大概这样 } for(j=1; j<30; j++) { Bzq_Up(j);//滑动一次 增大一次电压 } } STM32F1连接X9313的测试代码试了一下, 发现贴片封装的9313调节出来测试的Vw管脚的电平按照理论值变化, 插片封装的9313就不能调节,好像插片封装的9313需要5v供电,也可能是忘了供电了。。。 反正只能在1-31次直接滑动,超过这个次数 滑动变阻器不会改变。 |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1180浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 00:33 , Processed in 1.390248 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号