找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2637|回复: 5
收起左侧

单片机+两个74hc595级联,两个芯片输出差一个时序,想同步怎样改程序呢?

[复制链接]
ID:479908 发表于 2020-4-8 11:13 | 显示全部楼层 |阅读模式
2.png 51hei图片20200408105541.jpg
自己捣鼓两个74hc595级联,两个芯片输出差一个时序,想同步怎样改程序呢?请大佬指点下谢谢。

单片机代码:
  1. #include<reg51.h>
  2. sbit dsc=P2^0; //串行数据输入
  3. sbit shc=P2^1; // 输入时钟
  4. sbit  stc=P2^2; //寄存时钟(输出)
  5. unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   
  6. unsigned writeled(unsigned char date)
  7. {
  8. unsigned char i;
  9. for(i=0;i<8;i++)
  10. {   
  11.   dsc=date&(0x80>>i);     
  12.   shc=1;
  13.   shc=0;
  14.   }
  15.      stc=1;
  16.      stc=0;
  17. }   
  18. unsigned delay()
  19. {
  20. unsigned int t;
  21. for(t=0;t<30000;t++);
  22. }      
  23. void main()
  24. {
  25. unsigned int i;
  26.      stc=0;
  27.     shc=0;
  28.    while(1)
  29.    {
  30.      for(i=0;i<8;i++)
  31.      { writeled(table[i]);
  32.      delay();
  33.      }
  34.    }
  35. }
复制代码
回复

使用道具 举报

ID:155507 发表于 2020-4-8 20:04 | 显示全部楼层
改了程序

  1. #include<reg51.h>
  2. sbit dsc=P2^0; //串行数据输入
  3. sbit shc=P2^1; // 输入时钟
  4. sbit  stc=P2^2; //寄存时钟(输出)
  5. unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   
  6. unsigned writeled(unsigned char date)
  7. {
  8. unsigned char i;
  9. for(i=0;i<8;i++)
  10. {   
  11.   dsc=date&(0x80>>i);     
  12.   shc=1;
  13.   shc=0;
  14.   }
  15.      stc=1;
  16.      stc=0;
  17. }   
  18. unsigned delay()
  19. {
  20. unsigned int t;
  21. for(t=0;t<30000;t++);
  22. }      
  23. void main()
  24. {
  25. unsigned int i;
  26.      stc=0;
  27.     shc=0;
  28.    while(1)
  29.    {
  30.      for(i=0;i<8;i++)
  31.      {
  32. writeled(~table[i]);  //两个74hc595级联
  33. writeled(~table[i]);
  34.      delay();
  35.      }
  36.    }
  37. }
复制代码
回复

使用道具 举报

ID:546698 发表于 2020-4-8 20:42 | 显示全部楼层

乐于助人               
回复

使用道具 举报

ID:213173 发表于 2020-4-8 21:31 | 显示全部楼层
    stc锁存时钟要等两个字节发送完毕才能送出,给你一个示例参考。

  1. #include <reg51.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit HC595_DIO   = P1^0;
  5. sbit HC595_SCLK  = P1^1;
  6. sbit HC595_RCLK  = P1^2;

  7. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共阴数码管段码0~f
  8.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  9. uchar code dis_buf[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴数码管位码

  10. /******************1ms延时子程序(12MHz)*******************/
  11. void delayms(uint k)
  12. {
  13.         uint i,j;
  14.         for(i=k;i>0;i--)
  15.                 for(j=125;j>0;j--);
  16. }
  17. /**************** 向HC595发送一个字节函数 ******************/
  18. void Send_595(uchar dat)
  19. {               
  20.         uchar i;
  21.         for(i=0;i<8;i++)
  22.         {
  23.                 HC595_DIO=(dat&0x80)>>7;//由高位到低位赋值数据输出端
  24.                 HC595_SCLK = 1;        //移位时钟
  25.                 HC595_SCLK = 0;
  26.                 dat <<= 1;                        //dat左移一位
  27.         }
  28. }
  29. /**************** 数码管显示函数 ******************/
  30. void DisplayScan()
  31. {       
  32.         static uchar i=0;
  33.         Send_595(dis_buf[i]);//向HC595发送位码(共阴数码管)
  34.         Send_595(table[i]);        //向HC595发送段码(共阴数码管)
  35. //        Send_595(~dis_buf[i]);//向HC595发送位码(共阳数码管)
  36. //        Send_595(~table[i]);        //向HC595发送段码(共阳数码管)
  37.         HC595_RCLK = 1;                //锁存输出数据
  38.         HC595_RCLK = 0;
  39.         i++;
  40.         i%=8;
  41. }

  42. void main()
  43. {
  44.         HC595_SCLK  = 0;        //初始化移位时钟端
  45.         HC595_RCLK  = 0;        //初始化锁存输出端
  46.         while(1)
  47.         {
  48.                 DisplayScan();        //数码管显示函数
  49.                 delayms(1);                //延时1ms
  50.         }
  51. }
复制代码
回复

使用道具 举报

ID:479908 发表于 2020-4-9 12:12 | 显示全部楼层
多谢两位大佬指点,前进路上有动力啦
回复

使用道具 举报

ID:795427 发表于 2021-9-3 21:52 | 显示全部楼层
供上wulin单片机大神的仿真图
51.gif
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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