|
|
本帖最后由 openmmoo 于 2014-10-20 16:15 编辑
请各位瞧一瞧,错在那里了,接通干簧管,串口收到的都是1,不接通干簧管,串口收到的都是0,如下图.
我用的是cd4017,它的参数如下:
引出端功能符号
CO:进位脉冲输渊
CP:时钟输入端
CR:清除端
INH:禁止端
Q0-Q9 计数脉冲输出端
VDD:正电源
VSS:地
真值表
输入输出
CP INH CR Q0-Q9 CO
× × H Q0
↑ L L
H ↓ L
计数
计数脉冲
为Q0-Q4
时:CO=H
L × L
× H L
↓ × L
× ↑ L
保持
计数脉冲
为Q5-Q9
时:CO=L
cd4017各引脚的作用
1~7,9~11共十个引脚为其计数脉冲输出端、8引脚接地、12引脚为进位输出端(每输入10个计数脉冲,就可得到1个进位正脉冲,该进位输出信号可作为下一级的时钟信号)、13和14引脚皆为时钟输入端(若要用上升沿来计数,则信号由14端输入;若要用下降沿来计数,则信号由13端输入)、15引脚为清零端(当在此端上加高电平或正脉冲时其输出3端为高电平,其余计数脉冲输出端均为低电平),16引脚为电源正端。
我的连线图
我的代码:
const int rst = 5; //板子的RST脚接Arduino的D4口(自定义)
const int clk = 6; //板子的CLK脚接Arduino的D3口(自定义)
const int data1 = 7; //板子的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);
}
错在那里了{:soso_e127:} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|