一个简单的X9C103程序问题!

发布网友 发布时间:2022-04-20 19:48

我来回答

2个回答

热心网友 时间:2023-07-12 14:36

数字电位器用的是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);}
}
}

热心网友 时间:2023-07-12 14:37

用C51控制ds1867的写入程序
注:ds1867是一款256抽头的数字电位器有10k、50k、100k几款,程序采用串行输入

/*******数字电位器驱动子程序*******/
void ChangePos(bit sel,unsigned char
pos1,unsigned char pos0)
{ unsigned int i;
/******初始化3线串行口全部置0******/
/RST = 0;
DQ = 0;
CLK = 0;
/RST = 1; /*起始时刻/RST置高*/
DQ = sel; /*电位器输出选择位,DQ数据
需要在CLK高电平建立前已经保
持一定时间*/
_nop_();
/*微量延时*/
CLK = 1; /*时钟高电平脉冲时刻数据写
入*/
_nop_(); /*微量延时*/
CLK = 0; /*CLK置低*/
/***传输控制字1,先高位后低位***/
for(i=0;i<8;i++)
{ if(pos1&0x80) /*取pos1高位*/
DQ = 1; /*写入高电平*/
else DQ = 0; /*写入低电平*/
_nop_();
CLK 1;/*时钟高电平脉冲时刻数据写入*/
_nop_();
CLK = 0;
pos1 = pos1 << 1;/* pos1左移*/ }
/***传输控制字0, 先高位后低位***/
for(i = 0;i < 8;i++)
{ if(pos0 & 0x80) /*取pos0高位*/
DQ = 1; /*写入高电平*/
Else DQ = 0; /*写入低电平*/
_nop_();
CLK = 1; /*时钟高电平脉冲时刻数据写入*/
_nop_();
CLK = 0;
pos0 = pos0 << 1;/*pos0左移*/
}
/RST = 0; /*/RST置低完成一次数据的操作*/

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com