标题: 单片机通过按键控制数字电位器X9C103实现阻值的增长源程序 [打印本页]

作者: xzsxzsxzs    时间: 2020-11-18 22:36
标题: 单片机通过按键控制数字电位器X9C103实现阻值的增长源程序
最近发现一块数字电位器,便写了一个通过按键控制电位器阻值的的程序,可增,可减,增减的阻值可根据送入得脉冲数去确定(以100欧姆为例),当然也可以确定送入的脉冲数,这里举5k电阻值为例,其他阻值也可同理得到。(由于精度问题,此电位器也是存在误差的)

实物图如下:

具体单片机程序如下
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit SW_1 = P3^0;//电位器阻值增加
sbit SW_2 = P3^1;//电位器阻值减小

sbit SW_3 = P3^2;//电位器阻值位5k

sbit INC = P2^0;//数字电位器接口
sbit U_D = P2^1;//数字电位器接口
sbit CS = P2^2;//数字电位器接口


void ButtonService2();//电位器阻值减少函数
void ButtonService1();//电位器阻值增加函数
void         ButtonService3();

void delayms(uint xms)//延时函数
{
        uint i,j;
        for(i=0;i<xms;i++)
                for(j=0;j<120;j++);
}

void init()
{//数字电位器初始化
        int m;
        
        CS = 0;
        U_D = 0;
        _nop_();
        for(m=100;m>0;m--)//电位器强制向下滑动100级到最底端
        {
                INC = 0;
                _nop_();
                _nop_();
                INC = 1;
        }
        CS = 1;}

        
                        void ButtonService1()                                //电位器值增加
                {   
                                unsigned char n = 0;
                                CS = 0;
                                U_D = 1;
                                _nop_();
                                for(n=1;n>0;n--)
                                {
                                        INC = 0;
                                        _nop_();
                                        _nop_();
                                        INC =1;
                                }
                                CS = 1;
                }
                                                               
                                       
               
        void ButtonService2()
                                       //电位器值减小
                {
                                unsigned char n = 0;
        
                                CS = 0;
                                U_D = 0;
                                _nop_();
                                for(n=1;n>0;n--)
                                {
                                        INC = 0;
                                        _nop_();
                                        _nop_();
                                        INC = 1;
                                }
                                CS = 1;
                }

                void ButtonService3()                                //5k电阻值
                {   
                                unsigned char n = 0;
                                CS = 0;
                                U_D = 1;
                                _nop_();
                                for(n=50;n>0;n--)
                                {
                                        INC = 0;
                                        _nop_();
                                        _nop_();
                                        INC =1;
                                }
                                CS = 1;
                }
                                               
void main()
{        
        
        
        init();         
        while(1)
        {
        if(SW_1==0)//这里每按下一次增加100Ω
        {delayms(10);
                if(SW_1==0)
        ButtonService1();
        while(!SW_1);}
               
                          
           if(SW_2==0)//每按下一次减少100Ω
                {delayms(10);
                        if(SW_2==0)
                        ButtonService2();
                  while(!SW_2);}  

    if(SW_3==0)
                {delayms(10);
                        if(SW_3==0)
                        {init();
                                ButtonService3();}
                  while(!SW_3);}  
               
                }}  

全部资料51hei下载地址:
X9C103数字电位器数据手册(中文).7z (174.49 KB, 下载次数: 102)
数字电位器.zip (20.9 KB, 下载次数: 100)

5k电阻值.jpg (183.33 KB, 下载次数: 187)

5k电阻值.jpg

按下按键由100欧增为200欧.jpg (191.48 KB, 下载次数: 185)

按下按键由100欧增为200欧.jpg

按下按键由200欧减为100欧.jpg (181.26 KB, 下载次数: 177)

按下按键由200欧减为100欧.jpg

电位器初始化后,但存在误差.jpg (197.57 KB, 下载次数: 184)

电位器初始化后,但存在误差.jpg

作者: jovew    时间: 2020-11-19 08:05
好东东 有原理图吗? 可以分享下吗?
作者: xzsxzsxzs    时间: 2020-11-20 12:07
jovew 发表于 2020-11-19 08:05
好东东 有原理图吗? 可以分享下吗?

直接用导线连上就可以了
作者: XXXXTTM    时间: 2021-4-5 13:10
这个单片机用的51单片机么
作者: XXXXTTM    时间: 2021-4-5 16:07
我想问一下INC引脚不是下降沿触发么
作者: 虾兵0蟹将    时间: 2021-4-10 01:14
我找了好久,终于找到了
作者: 96317    时间: 2021-5-13 17:47
VH,VL,VW不用连接把?我买了一个怎么买也测不对,是上电后测阻值吗?
作者: 96317    时间: 2021-5-16 22:44
96317 发表于 2021-5-13 17:47
VH,VL,VW不用连接把?我买了一个怎么买也测不对,是上电后测阻值吗?

买了一个芯片一个模块都是坏的,最后再买一个模块可以了。某一个宝J货真的多
作者: WOW:    时间: 2021-5-18 10:06
楼主你好,我最近也看到了这个电位器,但是我手上的是树莓派,不知道能不能直接接上这个电位器,没咋学过这些东西,还希望楼主回复一下
作者: xzsxzsxzs    时间: 2021-5-24 01:14
WOW: 发表于 2021-5-18 10:06
楼主你好,我最近也看到了这个电位器,但是我手上的是树莓派,不知道能不能直接接上这个电位器,没咋学过这 ...

树莓派我不是很了解,不过我觉得应该可以,可以尝试去接一下
作者: 823693122    时间: 2021-11-30 21:49
如果可以用在EQ图示均衡器上,改掉原来直滑式电位器就好了,请问楼主可以吗 ?

作者: jjwangxu2008    时间: 2021-12-10 10:19
正常使用, 需要每次上电电位器强制向下滑动100级到最底端?
作者: qzyhlf    时间: 2021-12-10 16:45
好资料,51黑有你更精彩!!!
作者: 潘小苗    时间: 2023-8-2 18:01
是可以用stm32F401直接使用这个代码吗?还有那个按键是应该怎么连(小白一个,谢谢了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1