❶ 51单片机如何控制x9c104p数字电位器
#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
sbit inc=P0^0; //脉冲输出端
sbit ud=P0^1; //方向端
sbit cs=P0^2; //片选端
sbit led=P2^0; //指示灯
/*以下是函数声明*/
void x9c104s_inc(uchar number);
void x9c104s_dec(uchar number);
void x9c104s_set(uchar number);
/*设定初始值*/
void x9c104s_set(uchar number)
{
uchar i;
inc=1;
_nop_();
_nop_();
cs=0;
_nop_();
_nop_();
ud=0; //方向为减
_nop_();
_nop_();
for(i=0;i<100;i++) /*因为该芯片为100抽头 所以先清零*/
{
inc=1;
_nop_();
_nop_();
inc=0;
_nop_();
_nop_();
}
ud=1; //方向朝上
_nop_();
_nop_();
for(i=0;i<number;i++) //设定初始值
{
inc=1;
_nop_(); //下降沿有效
_nop_();
inc=0;
_nop_();
_nop_();
}
inc=1; //以下为保存设定值
_nop_();
_nop_();
cs=1;
_nop_();
_nop_();
ud=1;
_nop_();
_nop_();
inc=1;
}
/*函数为重新增加阻值*/
void x9c104s_inc(uchar number)
{
uchar i;
inc=1;
_nop_();
_nop_();
cs=0;
_nop_();
_nop_();
ud=1;
_nop_();
_nop_();
for(i=0;i<number;i++) //设定阻值
{
inc=1;
_nop_();
_nop_();
inc=0;
_nop_();
_nop_();
}
inc=1; //以下为保存设定值
_nop_();
_nop_();
cs=1;
_nop_();
_nop_();
ud=1;
_nop_();
_nop_();
inc=1;
}
/*函数为阻值减小*/
void x9c104s_dec(uchar number)
{
uchar i;
inc=1; //选中该芯片
_nop_();
_nop_();
cs=1;
_nop_();
_nop_();
ud=0; //方向为减小
_nop_();
_nop_();
for(i=0;i<number;i++)
{
inc=1;
_nop_();
_nop_();
inc=0;
_nop_();
_nop_();
}
inc=1; //保存设定值
_nop_();
_nop_();
cs=1;
_nop_();
_nop_();
ud=1;
_nop_();
_nop_();
inc=1;
}
void main()
{
led=0;
x9c104s_set(10);
x9c104s_inc(60); //三个函数都使用一下 防止警告
x9c104s_dec(10);
}
❷ 电位器在单片机上的用法
1,电位器一般有三个脚,这里用中间那个脚和其他任一脚,TEMP接到单片机的A/D口上,见图。
2,至于这个电压代表多大的温度值,与你实际所用的热敏电阻有关,用热敏电阻做温度是需要校准的,不校准是不知道多少电压代表多大温度值(有的热敏电阻厂家会给出温度和阻值的表,当然有这个就不需要校准了)。
3,1已回答,见图...
❸ 哪个型号的数字电位器能和单片机相连,怎么连
现在,单片机技术这么发达,好像很少使用数字电位器了。
数字电位器完全可以由单片机来实现,何必画蛇添足呢?
数字电位器一般是接 加、减的按键,里面是简易的D/A回路(一般是2^4 或2^5,个别的能达到2^6)。如果实在要用,把数字电位器的输出接单片机的ADC端口,让单片机AD采集即可。
难道你再用单片机的ADC采集D/A的输出?
为什么不直接把加、减的按键直接接在单片机上,软件实现高精度D/A,或者根本不用D/A,直接是内部数据的运算。相对更简单、实用、精度高(轻松达到2^8,稍加处理,完全可以实现2^16)。
❹ 51单片机连电位器一定要adc吗
一定。51单片机连电位器需要adc的,因为作AD用必须一个接电源一个接地,两个电阻中间即VREF接单片机引脚或接一个1K的电阻再接单片机引脚。
❺ 单片机控制数字电位器的c语言程序
数字电位器用的是X9C103
#include<reg51.h>
#include<stdio.h>
#include<intrins.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;i>0;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;num>0;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);}
}
}
❻ 如何用51单片机控制电路中电阻的大小 我想用51单片机实现数字电位器
用“数→模”转换芯片(例如DAC0832),将单片机输出的数值转换为电位。
具体电路及程序请参阅教科书或有关资料。