找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3268|回复: 0
打印 上一主题 下一主题
收起左侧

单片机控制2个74hc595流水灯实现16LED流水灯程序

[复制链接]
跳转到指定楼层
楼主
单片机源程序如下:


  1. /*************  本程序功能说明  **************

  2. 用STC的MCU的IO方式控制两个74HC595驱动16个LED。

  3. 显示效果为: 流水灯.



  4. ******************************************/
  5. #include "reg51.h"
  6. #include    "intrins.h"

  7. typedef     unsigned char   u8;
  8. typedef     unsigned int    u16;
  9. typedef     unsigned long   u32;

  10. sfr AUXR = 0x8E;

  11. //sfr P2PU = 0xFE12;
  12. sfr P4   = 0xC0;
  13. sfr P5   = 0xC8;
  14. sfr P6   = 0xE8;
  15. sfr P7   = 0xF8;
  16. sfr P1M1 = 0x91;    //PxM1.n,PxM0.n     =00--->Standard,    01--->push-pull
  17. sfr P1M0 = 0x92;    //                  =10--->pure input,  11--->open drain
  18. sfr P0M1 = 0x93;
  19. sfr P0M0 = 0x94;
  20. sfr P2M1 = 0x95;
  21. sfr P2M0 = 0x96;
  22. sfr P3M1 = 0xB1;
  23. sfr P3M0 = 0xB2;
  24. sfr P4M1 = 0xB3;
  25. sfr P4M0 = 0xB4;
  26. sfr P5M1 = 0xC9;
  27. sfr P5M0 = 0xCA;
  28. sfr P6M1 = 0xCB;
  29. sfr P6M0 = 0xCC;
  30. sfr P7M1 = 0xE1;
  31. sfr P7M0 = 0xE2;

  32. sbit P00 = P0^0;
  33. sbit P01 = P0^1;
  34. sbit P02 = P0^2;
  35. sbit P03 = P0^3;
  36. sbit P04 = P0^4;
  37. sbit P05 = P0^5;
  38. sbit P06 = P0^6;
  39. sbit P07 = P0^7;
  40. sbit P10 = P1^0;
  41. sbit P11 = P1^1;
  42. sbit P12 = P1^2;
  43. sbit P13 = P1^3;
  44. sbit P14 = P1^4;
  45. sbit P15 = P1^5;
  46. sbit P16 = P1^6;
  47. sbit P17 = P1^7;
  48. sbit P20 = P2^0;
  49. sbit P21 = P2^1;
  50. sbit P22 = P2^2;
  51. sbit P23 = P2^3;
  52. sbit P24 = P2^4;
  53. sbit P25 = P2^5;
  54. sbit P26 = P2^6;
  55. sbit P27 = P2^7;
  56. sbit P30 = P3^0;
  57. sbit P31 = P3^1;
  58. sbit P32 = P3^2;
  59. sbit P33 = P3^3;
  60. sbit P34 = P3^4;
  61. sbit P35 = P3^5;
  62. sbit P36 = P3^6;
  63. sbit P37 = P3^7;
  64. sbit P40 = P4^0;
  65. sbit P41 = P4^1;
  66. sbit P42 = P4^2;
  67. sbit P43 = P4^3;
  68. sbit P44 = P4^4;
  69. sbit P45 = P4^5;
  70. sbit P46 = P4^6;
  71. sbit P47 = P4^7;
  72. sbit P50 = P5^0;
  73. sbit P51 = P5^1;
  74. sbit P52 = P5^2;
  75. sbit P53 = P5^3;
  76. sbit P54 = P5^4;
  77. sbit P55 = P5^5;
  78. sbit P56 = P5^6;
  79. sbit P57 = P5^7;



  80. sbit    P_HC595_SER   = P2^0;   //pin 14    SER     data input
  81. sbit    P_HC595_RCLK  = P2^1;   //pin 12    RCLk    store (latch) clock
  82. sbit    P_HC595_SRCLK = P2^2;   //pin 11    SRCLK   Shift data clock

  83. void Send_595(u8 dat);
  84. void Delay500ms();                //@11.0592MHz


  85. u8  h,k;
  86. u16 s=0xffff;
  87. /********************** 主函数 ************************/
  88. void main(void)
  89. {
  90.    
  91.    
  92.     P0M1 = 0;   P0M0 = 0;   //设置为准双向口
  93.     P1M1 = 0;   P1M0 = 0;   //设置为准双向口
  94.     P2M1 = 0;   P2M0 = 1;   //设置为强推挽口
  95.     P3M1 = 0;   P3M0 = 0;   //设置为准双向口
  96.     P4M1 = 0;   P4M0 = 0;   //设置为准双向口
  97.     P5M1 = 0;   P5M0 = 0;   //设置为准双向口
  98.     P6M1 = 0;   P6M0 = 0;   //设置为准双向口
  99.     P7M1 = 0;   P7M0 = 0;   //设置为准双向口

  100.     while(1)
  101.     {
  102.                         
  103.                         
  104.                         h=(s>>8)&0XFF;
  105.                         k=s&0xff;
  106.                         Send_595(k);
  107.                         Send_595(h);
  108.                         P_HC595_RCLK = 1;
  109.                         _nop_();
  110.                         P_HC595_RCLK = 0;         
  111.                  Delay500ms();                //@11.0592MHz               
  112.                         s>>=1;
  113.                
  114.                         if(s==0)
  115.                         {
  116.                         h=(s>>8)&0xff;
  117.                         k=s&0xff;
  118.                         Send_595(k);
  119.                         Send_595(h);
  120.                         P_HC595_RCLK = 1;
  121.                         _nop_();
  122.                         P_HC595_RCLK = 0;         
  123.                   Delay500ms();                //@11.0592MHz                        
  124.       s=0xffff;
  125.       }
  126.     }
  127. }

  128. void Send_595(u8 dat)
  129. {      
  130.     u8  i;
  131.     for(i=0; i<8; i++)
  132.     {
  133.                         
  134.         dat >>= 1;
  135.         P_HC595_SER   = CY;
  136.         P_HC595_SRCLK = 1;
  137.         P_HC595_SRCLK = 0;
  138.     }
  139.                         
  140. }


  141. void Delay500ms()                //@11.0592MHz
  142. {
  143.         unsigned char i, j, k;

  144.         _nop_();
  145.         _nop_();
  146.         i = 22;
  147.         j = 3;
  148.         k = 227;
  149.         do
  150.         {
  151.                 do
  152.                 {
  153.                         while (--k);
  154.                 } while (--j);
  155.         } while (--i);
  156. }
复制代码

hex文件51hei提供下载:
用STC的MCU的IO方式控制两个74HC595驱动16个LED (2).rar (30.77 KB, 下载次数: 38)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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