你说的"数字电位器"是不是无极限电位器?带开关的5只脚,不带开关的三只脚,中间是公共脚?若是我可以给你一个完整程度。
数字电位器用的是X9C103
#includereg51.h
#includestdio.h
#includeintrins.h
#define uchar unsigned char
#define uint unsigned int
//设定四个按键
sbit X9C102=P2^0;
sbit X9C202=P2^1;
sbit X9C302=P2^2;
sbit X9C402=P2^3;
sbit X9C103_CS=P1^0;
sbit X9C103_INC=P1^1;
sbit X9C103_UD=P1^2;
void delay_nus(uint i)
{
while(i--);
}
void delay_nms(uchar i)
{
for(i;i0;i++)
{
delay_nus(1000);
}
}
void set_x9c103(uchar num,uchar ud,uchar save)
{
X9C103_CS=0;
delay_nus(1);
if(ud==1)
{
X9C103_UD=1;
}
else
{
X9C103_UD=0;
}
delay_nus(4);
for(num;num0;num--)
{
X9C103_INC=1;
delay_nus(2);
X9C103_INC=0;
delay_nus(2);
}
delay_nus(2);
if(save==1)
{
X9C103_INC=1;
delay_nus(2);
X9C103_CS=1;
delay_nms(22);
}
X9C103_CS=1;
delay_nus(10);
}
void clear_down()
{
set_x9c103(100,0,1);
}
void main_init()
{
X9C103_CS=0;
clear_down();
}
void main()
{
main_init();
set_x9c103(70,1,1);
while(1)//扫描按键,对应不同倍数的输出
{
if (X9C102==0){
clear_down();
set_x9c103(10,1,1);}
if (X9C202==0){
clear_down();
set_x9c103(30,1,1);}
if (X9C302==0){
clear_down();
set_x9c103(60,1,1);}
if (X9C402==0){
clear_down();
set_x9c103(90,1,1);}
}
}
//参考一下
#define RINC PD0 //INC
#define RUD PD1 //U/D
//复位数字电位器******************************************************
void RSTDCP(void)//使用X9C104
{
uchar i;
PORTD|=_BV(RINC); _delay_us(1); //INC拉高
PORTD=~_BV(RUD); _delay_us(1); //置减方向
for(i=0;i100;i++)
{
PORTD=~_BV(RINC);_delay_us(1);//INC拉低
PORTD|=_BV(RINC);_delay_us(1);//INC拉高
}
PORTD|=_BV(RUD);_delay_us(1);//置增方向
}
int main(void)
{
DDRD|=0x03; //定义PD0-1为输出
RSTDCP();//初始化数字电位器
while(1)
{
if( )//此处写上需要数字电位器上调一档的条件
{
PORTD=~_BV(RINC);_delay_us(1);//INC拉低
PORTD|=_BV(RINC);_delay_us(1);//INC拉高
}
}
}
单片机控制x9c103的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:单片机控制x9c103