找回密码
 立即注册

QQ登录

只需一步,快速开始

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

HC595驱动8位led的8051程序

[复制链接]
跳转到指定楼层
楼主
HC595驱动8位led的8051程序


下面是部分程序预览(完整版本请下载本帖附件): HC595驱动8位led的8051程序.zip (24.68 KB, 下载次数: 18)
  1. #include <AT89X51.H>

  2. unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  3. unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  4. unsigned char  disbuf[4]={0,0,0,0};


  5. //-----------------------------------------------------------------------------
  6. // 函数原形定义
  7. #define uchar unsigned char

  8. void main (void);                                        // 主函数
  9. void LED4_Display (void);                        // LED显示
  10. void LED_OUT(uchar X);                                // LED单字节串行移位函数

  11. unsigned char code LED_0F[];                // LED字模表

  12. sbit DIO = P1^0;                                //串行数据输入
  13. sbit RCLK  = P1^1;                                //时钟脉冲信号——上升沿有效
  14. sbit SCLK = P1^2;                                //打入信号————上升沿有效

  15. //-----------------------------------------------------------------------------
  16. // 全局变量
  17. uchar LED[8];        //用于LED的8位显示缓存


  18. //*****************************************************************************
  19. // 主程序
  20. //
  21. void main (void)
  22. {

  23.         LED[0]=1;
  24.         LED[1]=2;
  25.         LED[2]=3;
  26.         LED[3]=4;

  27.         while(1)
  28.         {
  29.                 LED4_Display ();
  30.         }
  31. }

  32. void LED4_Display (void)
  33. {
  34.         unsigned char code *led_table;          // 查表指针
  35.         uchar i;
  36.         //显示第1位
  37.         led_table = LED_0F + LED[0];
  38.         i = *led_table;

  39.         LED_OUT(i);                       
  40.         LED_OUT(0x01);               

  41.         RCLK = 0;
  42.         RCLK = 1;
  43.         //显示第2位
  44.         led_table = LED_0F + LED[1];
  45.         i = *led_table;

  46.         LED_OUT(i);               
  47.         LED_OUT(0x02);               

  48.         RCLK = 0;
  49.         RCLK = 1;
  50.         //显示第3位
  51.         led_table = LED_0F + LED[2];
  52.         i = *led_table;

  53.         LED_OUT(i);                       
  54.         LED_OUT(0x04);       

  55.         RCLK = 0;
  56.         RCLK = 1;
  57.         //显示第4位
  58.         led_table = LED_0F + LED[3];
  59.         i = *led_table;

  60.         LED_OUT(i);                       
  61.         LED_OUT(0x08);               

  62.         RCLK = 0;
  63.         RCLK = 1;
  64. }

  65. void LED_OUT(uchar X)
  66. {
  67.         uchar i;
  68.         for(i=8;i>=1;i--)
  69.         {
  70.                 if (X&0x80) DIO=1; else DIO=0;
  71.                 X<<=1;
  72.                 SCLK = 0;
  73.                 SCLK = 1;
  74.         }
  75. }

  76. unsigned char code LED_0F[] =
  77. {// 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
  78.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
  79. };



复制代码


评分

参与人数 2黑币 +55 收起 理由
xjj904 + 5 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:107291 发表于 2016-7-3 16:13 | 只看该作者
大神,问一下,那个RCLK的不是一个脉冲吗?不用延时?不太懂
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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