使用计数器进行0-6循环计数时,需要将74LS163输出端计数到( )时进行清零
时间: 2023-06-19 14:10:35 浏览: 199
74LS163是一个4位二进制同步计数器,可以进行0-15的计数。如果需要进行0-6的循环计数,其最高有效位QD(Pin 12)和次高有效位QC(Pin 11)需要接入AND门(或 NAND 门)的输入端,同时将AND门的输出端接入74LS163的清零端CLR(Pin 1),当AND门的输入端为0110时,即QD=0,QC=1时,CLR端会被拉低,将计数器清零,实现0-6的循环计数。
相关问题
74ls193加计数清零法实现六进制计数器
74LS193是一款可重载二进制/十进制计数器,不支持六进制计数。但是,我们可以通过加计数清零法来实现六进制计数器。
加计数清零法的基本思路是:在计数器的每个计数阶段,将计数器的输出与一个固定的数字进行比较,如果相等,则将计数器清零。这里我们可以采用类似于二进制计数器的方法,只不过将计数器的最高位去掉,这样就可以实现六进制计数器。
具体实现步骤如下:
1. 将四个74LS193级联起来,形成一个16位计数器。
2. 在计数器的最高位接一个与门,将第四级74LS193的QD输出和第三级74LS193的QA输出作为与门的两个输入,输出接到第一级74LS193的CLR端。
3. 将计数器的最高位输出接到一个六进制数码管上,用于显示计数器的值。
4. 每次计数器计数到六进制数码的最大值(即5),就会触发与门的输出,将计数器清零,同时将六进制数码的值清零,重新开始计数。
需要注意的是,加计数清零法实现的六进制计数器只能计数到5,而不能计数到6,因为在六进制中,6的二进制表示为110,而74LS193只能计数到二进制的111,因此无法表示6这个数。
74LS139 0-9按键计数器
74LS139是一款二选一多路复用器,一般用于选通二个输入信号之一并输入到输出端,也可用于实现简单的逻辑运算。
要实现0-9按键计数器,需要将9个按键分别连接到74LS139的输入端口(A0~A7),将74LS139的输出端口(Y0~Y3)连接到4个JK触发器(如74LS76),将JK触发器的输出端口连接到数码管显示模块。
当按下任意一个按键,相应的输入端口会被拉低,74LS139会选通对应的输出端口,从而使相应的JK触发器触发并计数。当计数器达到9时,重新计数。
代码实现:
由于74LS139的输入端口具有反向特性,需要将按钮按下时的输入信号反向处理(例如通过反向拍扫或使用反向器)。
int btn [] = {5, 6, 7, 8, 9, 10, 11, 12, 13}; // 9个按键引脚
int out [] = {2, 3, 4, A0}; // 74LS139的Y0~Y3引脚
int jk [] = {A1, A2, A3, A4}; // JK触发器的J、K引脚
int num [4] = {0, 0, 0 , 0}; // 计数器
void setup () {
for (int i = 0; i < 9; i ++) {
pinMode (btn [i], INPUT);
}
for (int i = 0; i < 4; i ++) {
pinMode (out [i], OUTPUT);
digitalWrite (out [i], HIGH);
pinMode (jk [i], OUTPUT);
}
}
void loop () {
for (int i = 0; i < 9; i ++) {
if (digitalRead (btn [i]) == LOW) { // 如果发现按键按下
digitalWrite (out [i / 2], ~i & 1); // 设置74LS139的A0和A1引脚
digitalWrite (out [i / 2 + 2], i & 1); // 设置74LS139的A2和A3引脚
digitalWrite (jk [i / 2], LOW); // 清零JK触发器的J、K
digitalWrite (jk [i / 2], HIGH); // 设置JK触发器的J、K
num [i / 2] ++; // 计数器加1
if (num [i / 2] > 9) { // 超过9回到0
num [i / 2] = 0;
}
}
}
for (int i = 0; i < 4; i ++) {
digitalWrite (out [i], HIGH); // 禁用74LS139的输入
digitalWrite (jk [i], HIGH); // 禁用JK触发器的J、K
}
display (); // 显示计数器的值
}
void display () {
byte seg [] = { // 数码管显示的段选信号
B11000000, B11111001, B10100100, B10110000,
B10011001, B10010010, B10000010, B11111000,
B10000000, B10010000
};
for (int i = 0; i < 4; i ++) {
digitalWrite (jk [i], LOW); // 清零JK触发器的J、K
digitalWrite (jk [i], HIGH); // 设置JK触发器的J、K
digitalWrite (out [i], HIGH); // 禁用74LS139的输入
digitalWrite (out [i], LOW); // 选择对应的数码管
digitalWrite (A5, LOW); // 共阳极数码管选择
digitalWrite (A6, HIGH);
digitalWrite (A7, HIGH); // 高电平清零计数器
for (int j = 0; j < 10; j ++) { // 通过循环切换段选信号
digitalWrite (A0, ~j & 1);
digitalWrite (A1, j & 1);
PORTD = seg [num [i]]; // 设置端口D的输出
delay (50); // 延迟以供数码管刷新
}
digitalWrite (A0, LOW); // 禁止74LS139输出
digitalWrite (A1, LOW);
digitalWrite (out [i], HIGH); // 禁用数码管
}
}
以上代码仅供参考,实际应用中可能需要根据具体的硬件配置进行修改。