wdb_9955 发表于 2014-10-15 08:17:42

求助 hef4017 的使用

http://www.geek-workshop.com/forum.php?mod=viewthread&tid=102&highlight=4017

我按照上面的内容 自己制作了一个,芯片用的是hef4017bt ,为什么只要开1#开关就会全部变成1,关闭1#开关就全部变成0,检查了下焊接,没有短路什么的,求教如何处理。另外求教开关阵列的制作方法,因为我需要用16个按钮,但是arduino的接口不够.谢谢大家!

openmmoo 发表于 2014-10-15 09:17:33

把接线图和代码发出来看看

openmmoo 发表于 2014-10-15 09:46:07

代码中的四个转义字符你去了吗,就是/。

wdb_9955 发表于 2014-10-15 10:40:52

代码:
const int rst = 4; //板子的RST脚接Arduino的D4口(自定义)
const int clk = 3; //板子的CLK脚接Arduino的D3口(自定义)
const int data1 = 2; //板子的DATA脚接Arduino的D2口(自定义)
//const int data2 = 5; //如果有第二块板子的话,两块板子共用RST和CLK引脚。DATA接Arduino的D5口,第三块板子可以类推接D6口(自定义)
void setup()
{
Serial.begin(9600);
pinMode(rst, OUTPUT);
pinMode(clk, OUTPUT);
pinMode(data1, INPUT);
//pinMode(data2,INPUT); //如果有第二块板子的话要定义IO
}
void loop()
{
int KeyStatus = {0}; //按照总开关数定义。可能要改为20,30等
digitalWrite(rst, HIGH);
delayMicroseconds(10); //所有delayMicroseconds(10);均是给4017一个反应时间。
digitalWrite(rst, LOW);
delayMicroseconds(10);
for(int i = 0; i < 10; i++)
{
KeyStatus = digitalRead(data1);
//KeyStatus = digitalRead(data2); //读取第二个板子的状态,地址放在i+10
digitalWrite(clk, HIGH);
delayMicroseconds(10);
digitalWrite(clk, LOW);
delayMicroseconds(10);
}

for(int i = 0; i < 10; i++) //循环打印KeyStatus数组,i<10可能要改为i<20,30等
{
Serial.print(KeyStatus);
Serial.print("\t");
}
Serial.println();
delay(100);
}

我是参照下面的帖子做的
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=102&highlight=4017

求帮助,不胜感激!

openmmoo 发表于 2014-10-15 14:29:17

程序不是复制过来的吗?打错了,重新复制原程序试试,成功了告诉我一声.我的也调不通,不知那里错了

wdb_9955 发表于 2014-10-15 15:43:50

我是复制的原程序,不知道那里出问题了

openmmoo 发表于 2014-10-15 18:09:43

代码:
const int rst = 4; //板子的RST脚接Arduino的D4口(自定义)
const int clk = 3; //板子的CLK脚接Arduino的D3口(自定义)
const int data1 = 2; //板子的DATA脚接Arduino的D2口(自定义)
//const int data2 = 5; //如果有第二块板子的话,两块板子共用RST和CLK引脚。DATA接Arduino的D5口,第三块板子可以类推接D6口(自定义)
void setup()
{
Serial.begin(9600);
pinMode(rst, OUTPUT);
pinMode(clk, OUTPUT);
pinMode(data1, INPUT);
//pinMode(data2,INPUT); //如果有第二块板子的话要定义IO
}
void loop()
{
int KeyStatus = {0}; //按照总开关数定义。可能要改为20,30等
digitalWrite(rst, HIGH);
delayMicroseconds(10); //所有delayMicroseconds(10);均是给4017一个反应时间。
digitalWrite(rst, LOW);
delayMicroseconds(10);
for(int i = 0; i < 10; i++)
{
KeyStatus = digitalRead(data1);
//KeyStatus = digitalRead(data2); //读取第二个板子的状态,地址放在i+10
digitalWrite(clk, HIGH);
delayMicroseconds(10);
digitalWrite(clk, LOW);
delayMicroseconds(10);
}

for(int i = 0; i < 10; i++) //循环打印KeyStatus数组,i<10可能要改为i<20,30等
{
Serial.print(KeyStatus);
Serial.print("\t");
}
Serial.println();
delay(100);
}
红色的地方应是数组,你对比原程序看看,是不是。
页: [1]
查看完整版本: 求助 hef4017 的使用