导航:首页 > 编程语言 > 可编程数字电位器芯片

可编程数字电位器芯片

发布时间:2024-05-26 19:32:30

单片机控制数字电位器的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单片机如何控制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);
}

③ 什么是可编程芯片

在接口芯片中,各硬件单元不是固定接死的,可由用户在使用中选择,即通过计算机指令来选择不同的通道和不同的电路功能,称为编程控制,接口电路的组态(即电路工作状态)可由计算机指令来控制的接口芯片称为可编程序接口芯片。

④ X9241可编程数字电位器读出的值是什么值,是阻值吗

是阻值!
第一字段的前4位为设备类型标识,对于X9241,其固定值为0101,后4位是设备地址(A3,A2,A1,A0),这4位的0,1取值取决于芯片上的A3-手带键A0引脚是接GND还是接VCC。
第二字段描述了操作类型和操作对象。其中前4位是指令代码I3~I0,后4位是操作对象P1、P0和R1、R0。其中P1,P0是4个电位器的选择编码,R1,R0是每个电位器的4个寄存器的选择编码。X9241的指令集如表1所列。表中的1/0表示数据为1或0,N/A为无效位。
第三字段是8bits的数据段,它的前两位CM、DW是控制位,其中CM是级联模式控制位,当行耐CM为0时,为正常模式,当CM为1时,该电位器与序号比它高一级的电位器级联。比如,若WCR2的CM为1,表示电位器2就与电位器3级联。DW是电位器滑动端使能控制位。当DW为0时,为正常模式,当DW为1时,该电位器的滑动端失效,即滑动端处于绝缘悬浮状态。CM和DW配合使用可以实现电位器的级联,并可保证级联电位器在滑动时只有一个有效滑动端。

X9241的三字节指毕巧令序列传输,X9241还有一种递增/递减的控制方式,由于不常用,在此不再陈述。一个完整的X9241读/写时序包括以下几个部分:
1)起始位。以SCL为高电平,SDA出现下跳沿为起始标志;
2)传送X9241的从属设备地址字段;
3)接收X9241返回的ACK(应答)信号,它是在SCL为高电平期间,SDA线上为低电平的状态;
4)向X9241传送指令字段;
5)接收X9241返回的ACK信号;
6)如果是‘写’方式,则向X9241发送8bit数据。并接收ACK信号;如果是‘读’方式,则准备接收X9241将要返回的8bit数据,并在接收完成后,向X9241发送ACK信号;
7)停止位。以SCL为高电平,SDA出现上跳沿为I2C传输的停止标志。

阅读全文

与可编程数字电位器芯片相关的资料

热点内容
esxi启动虚拟机命令 浏览:969
军工级单片机 浏览:113
服务器安全保护是什么意思 浏览:789
删除运行命令 浏览:720
龙之召唤服务器如何 浏览:119
linux目录跳转 浏览:368
程序员和老板称兄道弟 浏览:759
直播网络连接源码 浏览:736
用安卓手机怎么登录苹果手机id 浏览:710
论文查重工具源码 浏览:401
android银联demo 浏览:86
智能算法发展 浏览:351
房车露营地用什么app 浏览:70
spark编程指南python 浏览:553
phparray源码 浏览:1002
安卓手机反应有点慢怎么办 浏览:705
c语言怎么访问服务器并获取数据 浏览:114
怎么下载三维app 浏览:77
把pdf中的图片导出到excel 浏览:505
php操作redis实例 浏览:143