
使用这个芯片还是上个帖子有位前辈说74HC595芯片对IO口的扩展能力优于三八译码器。(它有个级联接口,可以直接接下一个74HC595芯片),其实想想生活中的广告位显示器就能用到它。刚好发现自己的板子上有两块74HC595芯片。通过看它的数据手册我发现这个芯片的特点可以用下图描述:(字写得不好
)。大家可以想想入栈和出栈的原理,其实一样的。(如有不对,恳请指正)。例如:单片机P1^1口输出0x01至该芯片,当SRCLK上升沿到来时,该数据被从高到低位依次移入移位寄存器当中,此时数据为:0x80;SRCLK下降沿到来时,禁止置入数据,然后当RCLK的上升沿到来时,移位寄存器当中的数据从高位到地位依次移到数据寄存器当中,QA->QH,此时数据为原来的数据:0x01。下面分享两个代码,一个是对这个芯片的基础理解。另一个是驱动两个8*8点阵显示♥。关于♥的位码生成大家可以了解一下字符取模软件。
单片机源程序如下:
代码:
- #include "reg51.h"
- #include "intrins.h" // 包含_nop_()函数原型
- typedef unsigned char u8;
- typedef unsigned int u16;
- sbit SRCLK = P1^0;
- sbit RCLK = P1^1;
- sbit SER = P1^2;
- void HC595SendByte(u8 dat);
- void delay(u16 i)
- {
- while(i--);
- }
- void Hc595SendByte(u8 dat)
- {
- u8 i;
- SRCLK = 0;
- _nop_();
- SRCLK = 1;
- for(i = 0; i < 8; i++) //用循环依次读入8位数据。
- {
- SER = dat >> 7; //把dat的最高位直接移到最低位。dat不变。
- dat <<= 1;
-
- SRCLK = 0;
- _nop_();
- _nop_();
- SRCLK = 1;
- }
- RCLK = 0;
- _nop_();
- _nop_();
- RCLK = 1;
- }
- void main(void)
- {
- u8 led = 0xfe;
- u8 i;
- while(1)
- {
- for(i = 0; i < 7; i++)
- {
- HC595SendByte(led);
- P0 = _crol_(led,1);
- delay(50000);
- }
- for(i = 0; i < 7; i++)
- {
- HC595SendByte(led);
- P0 = _cror_(led,1);
- delay(50000);
- }
- }
- }
所有资料51hei提供下载:
LED点阵.rar
(18.25 KB)
(下载次数: 20, 2020-4-2 17:17 上传)
下载积分: 黑币 -5
_HC595.zip
(18.91 KB)
(下载次数: 16, 2020-4-2 17:17 上传)
下载积分: 黑币 -5