最近发现一块数字电位器,便写了一个通过按键控制电位器阻值的的程序,可增,可减,增减的阻值可根据送入得脉冲数去确定(以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, 下载次数: 97)
|