Arduino UNO 利用74HC164循环显示(0-F)

Arduino UNO 利用74HC164循环显示(0-F)


  • 74hc164工作原理即等同于移位寄存器74HC595
  • Proteus仿真
    在这里插入图片描述

74HC164简介

74hc164是一款数字芯片,内部是高速硅门CMOS电路,管脚与低功耗肖特基TTL(LSTTL)系列兼容。74hc164是8位的串入并出、边沿触发的移位寄存器,串入数据由DSA、DSB输入, 在每个时钟CP的上升沿数据向右移一位,数据由DSA和DSB相与而成,且在上升沿到来之前已满足了建立时间。低电平有效的复位信号将直接把寄存器清零而输出为低。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。
  • 作用
  1. 逻辑功能:74hc164是8位移位寄存器
  2. 移位寄存器是一种存储器,存在里边的数据可以从低位向高位移动或从高位向低位移动。

例如一个8位的移位寄存器,存在其中的数据为11001010,如果向左(高位)移动一次,就变成1001010X,原来的最高位的1移出,最低位的X可以是新移入的数据,也可以是0(不同型号的移位寄存器对此有不同的规定)。

  1. 附加功能(多片联级):74hc164能把输入的串行数据转为并行输出,应用可以驱动数码管,2片164或多片级联可以扩展输出端口驱动多个数码管静态显示,不过多片级联时需输出多字节数据
  • 引脚功能图
    在这里插入图片描述
    在这里插入图片描述
  • 内部逻辑功能图
    在这里插入图片描述

程序代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

//定义段码,这里是共阳段码,如果是共阴只需要在程序中把读到的值按位取反即可

const unsigned char duanCode[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管断码
int CLK = 2;
int DAT = 3;//A and B

void setup() {
// 循环设置,把对应的端口都设置成输出

pinMode(CLK, OUTPUT);
pinMode(DAT, OUTPUT);
Serial.begin(9600);

}

void SendByte(unsigned char dat)
{
static unsigned char i;

for(i=0;i<8;i++)
{
digitalWrite(CLK,0);
digitalWrite(DAT,bitRead(dat,7-i));//高位先输出。这里也可以用arduino自带的函数操作,主用于595,164类型的输出。
digitalWrite(CLK,1);
}

}
// 主循环
void loop() {
// 循环显示0-F数字
for(int i=0;i<16;i++){
SendByte(duanCode[i]);
delay(1000); //调节延时,2个数字之间的停留间隔
}
}

程序源码和仿真资源

1
2
3
链接:https://pan.baidu.com/s/1ZyGsx6nwZPL3uJZNzhuynQ 
提取码:z1kh


那么些年了,无处安放的过往。那么些年了,以为可以遗忘的,越来越深刻。 那么些年了,以为可以记住的,越来越淡薄。 以为自己不再青春年少,可年华还未老去。想起曾经的单纯和无知。想起曾经的欢笑和泪水,感动和无奈。 流转的年华,苍白的光和影,我们无处安放的青春。