极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15502|回复: 6

求助 hef4017 的使用

[复制链接]
发表于 2014-10-15 08:17:42 | 显示全部楼层 |阅读模式
http://www.geek-workshop.com/for ... &highlight=4017

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

使用道具 举报

发表于 2014-10-15 09:17:33 | 显示全部楼层
把接线图和代码发出来看看
回复 支持 反对

使用道具 举报

发表于 2014-10-15 09:46:07 | 显示全部楼层
代码中的四个转义字符你去了吗,就是/。
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[10] = {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[i+10] = 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/for ... &highlight=4017

求帮助,不胜感激!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-10-15 14:29:17 | 显示全部楼层
程序不是复制过来的吗?打错了,重新复制原程序试试,成功了告诉我一声.我的也调不通,不知那里错了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-15 15:43:50 | 显示全部楼层
我是复制的原程序,不知道那里出问题了
回复 支持 反对

使用道具 举报

发表于 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[10] = {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[i+10] = 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);
}
红色的地方应是数组,你对比原程序看看,是不是。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 12:15 , Processed in 0.035314 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表