找回密码
 立即注册
搜索
热搜: 中医 针灸 咳嗽
查看: 136|回复: 0

74HC595

[复制链接]

3711

主题

1

回帖

1万

积分

管理员

积分
11937
发表于 2023-3-1 07:58:53 | 显示全部楼层 |阅读模式
  1. /*
  2. STC89C52芯片,74HC595芯片驱动代码
  3. 74HC595芯片是8位移位寄存器,可用于串行到并行的转换,适用于LED点阵、数码管等驱动。
  4. 电压宽度:2V至6V
  5. 工作温度范围:-40℃至85℃
  6. 注意事项:最大电流不能超过70mA
  7. */

  8. #include <reg52.h>

  9. // 定义74HC595芯片的引脚
  10. sbit HC595_SDI   = P1 ^ 0; // 串行数据输入
  11. sbit HC595_RCLK  = P1 ^ 1; // 移位存储时钟
  12. sbit HC595_SRCLK = P1 ^ 2; // 串行数据时钟

  13. // 向74HC595芯片发送一个字节的数据
  14. void HC595_SendByte(unsigned char dat)
  15. {
  16.     unsigned char i;
  17.     for (i = 0; i < 8; i++) {
  18.         // 先将HC595_SRCLK拉低
  19.         HC595_SRCLK = 0;
  20.         // 将dat的最高位送入HC595_SDI
  21.         HC595_SDI = dat & 0x80;
  22.         // 将HC595_SRCLK拉高,上升沿时数据移位
  23.         HC595_SRCLK = 1;
  24.         // dat左移1位,准备处理下一位数据
  25.         dat <<= 1;
  26.     }
  27.     // 将HC595_RCLK拉高,数据存储到输出寄存器中
  28.     HC595_RCLK = 1;
  29.     // 将HC595_RCLK拉低
  30.     HC595_RCLK = 0;
  31. }

  32. // 74HC595芯片初始化
  33. void HC595_Init(void)
  34. {
  35.     // 将所有引脚拉低
  36.     HC595_SDI   = 0;
  37.     HC595_SRCLK = 0;
  38.     HC595_RCLK  = 0;
  39. }

  40. // 将8位数据依次发送到74HC595芯片,完成一次数据更新
  41. void HC595_Update(unsigned char dat)
  42. {
  43.     // 先拉低HC595_RCLK,保证数据不会立即输出
  44.     HC595_RCLK = 0;
  45.     // 发送数据到74HC595芯片
  46.     HC595_SendByte(dat);
  47.     // 最后将HC595_RCLK拉高,输出数据
  48.     HC595_RCLK = 1;
  49. }

  50. // 测试函数,循环显示数字0-9
  51. void test(void)
  52. {
  53.     unsigned char i;
  54.     for (i = 0; i < 10; i++) {
  55.         HC595_Update(~(1 << i));
  56.         delay(500);
  57.     }
  58. }

  59. // 主函数
  60. void main()
  61. {
  62.     HC595_Init(); // 初始化
  63.     while (1) {
  64.         test(); // 测试函数
  65.     }
  66. }
复制代码


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

本版积分规则

Archiver|手机版|小黑屋|私人站点 ( 冀ICP备2023028127号-2 )

GMT+8, 2025-7-3 15:10 , Processed in 0.081522 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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