单片机/MCU论坛
直播中

zeng10119

8年用户 149经验值
擅长:接口/总线/驱动 控制/MCU
私信 关注
[问答]

各位大大,怎么用较少的IO口控制8个LED?像74HC595这些要怎么用?

度了一些资料,发现74HC595只用3个IO口就可以控制流水灯,我想改为通过按键来使灯一个个亮,如图,按一次“+”,亮一个,按一次“-"灭一个。这个芯片可以实现的吗?方法是怎么样的,可以大概说一下吗,跟普通IO口控制区别大吗?下面是网上找的流水灯程序。
  1. /*======================
  2.   测试74HC595
  3.   =======================*/

  4. #include
  5. #include

  6. #define uchar unsigned char
  7. #define uint unsigned int

  8. ***it st_cp= P0^2;
  9. ***it sh_cp= P0^0;
  10. ***it ds = P0^1;
  11. uchar led = 0xfe;

  12. void message_get(uchar led);
  13. void message_send();
  14. void delay(uchar time_delay);

  15. void main()
  16. {
  17.     while(1)
  18.     {
  19.         message_get(led);
  20.         message_send();
  21.         delay(5000);
  22.         led = _crol_(led, 1);
  23.     }   
  24. }
  25. //将数据放到移位寄存器中
  26. void message_get(uchar led)
  27. {
  28.     uchar i = 0;
  29.     for(; i < 8; i ++)
  30.     {
  31.         sh_cp = 0;
  32.         ds = led & 0x80;
  33.         led <<= 1;
  34.         delay(5);
  35.         sh_cp = 1;//上升沿   
  36.     }   
  37. }
  38. //将数据从移位寄存器中放到存储寄存器中
  39. void message_send()
  40. {
  41.     st_cp=0;
  42.     delay(5);
  43.     st_cp = 1;//数据从移位寄存器放到数据寄存器中   
  44. }
  45. void delay(uchar time_delay)
  46. {
  47.     uchar x,y;
  48.     for(x = time_delay; x > 0; x--)
  49.         for(y = time_delay; y > 0; y--)
  50.         {}
  51. }


  • 微信截图_20170329113016.png

回帖(3)

武力戡乱

2017-3-29 11:34:18

最佳答案

串级输出
举报

lee_st

2017-3-29 14:18:00
顶一下帖子哦,不作答
举报

人中狼

2017-3-29 14:43:21
可以实现,跟普通端口操作方式的一样,只是不把数据打向并口,而改为打向595而已
举报

更多回帖

发帖
×
20
完善资料,
赚取积分