|
最近發現一塊數字電位器,便寫了一個通過按鍵控制電位器阻值的的程序,可增,可減,增減的阻值可根據送入得脈沖數去確定(以100歐姆為例),當然也可以確定送入的脈沖數,這里舉5k電阻值為例,其他阻值也可同理得到。(由于精度問題,此電位器也是存在誤差的)
實物圖如下:
數字電位器模塊.jpg (133.87 KB, 下載次數: 88)
下載附件
2020-11-18 22:53 上傳
具體單片機程序如下
#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)
2020-11-18 22:57 上傳
點擊文件名下載附件
驗證和原理 下載積分: 黑幣 -5
數字電位器.zip
(20.9 KB, 下載次數: 100)
2020-11-18 22:35 上傳
點擊文件名下載附件
工程文件 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|