新人求问~74hc595的串行数据怎么输出的

2020-01-25 15:24发布

如题,操作数码管时总是乱码,或者是不闪,但是关掉了重新开数据就又不一样了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
365mcu
1楼-- · 2020-01-27 07:56
我用过三片级联的,驱动程序你看看还有帮助
  1. #include "stm32f10x.h"

  2. INT8U HC595DataBuf[3] = {0};
  3. /*
  4.   //23    22    21    20    19    18    17    16
  5.           R1    G1    R2    G2    R3    G3    R4
  6.   //15    14    13    12    11    10    9     8
  7.           G4    R5    G5    R6    G6
  8.   //7     6     5     4     3     2     1     0
  9.                            ALED4 ALED3 ALED2 ALED1
  10. */

  11. /*初始化硬件*/
  12. void HC595InitIO (void)
  13. {
  14.   Pin pindo[] = {PIO_74HC595};
  15.   PIO_74HC595RCCConf();
  16.   PIO_Configure(pindo,PIO_LISTSIZE(pindo));
  17.   HC595_LEDOnOff(&HC595DataBuf[0]);//初始状态设置
  18. }
  19. /*串行数据输入IO*/
  20. void DATA_IO(INT8U Value)
  21. {
  22.   if(Value == 0)
  23.   {
  24.     GPIOE->BRR = GPIO_Pin_6;
  25.   }
  26.   else
  27.   {
  28.     GPIOE->BSRR = GPIO_Pin_6;
  29.   }  
  30. }

  31. /*串行数据移位引脚控制*/
  32. void SHIFT_IO(INT8U Value)
  33. {
  34.   if(Value == 0)
  35.   {
  36.     GPIOE->BRR = GPIO_Pin_4;
  37.   }
  38.   else
  39.   {
  40.     GPIOE->BSRR = GPIO_Pin_4;
  41.   }  
  42. }

  43. /*串行数据存储引脚控制*/
  44. void DISP_IO(INT8U Value)
  45. {
  46.   if(Value == 0)
  47.   {
  48.     GPIOE->BRR = GPIO_Pin_5;
  49.   }
  50.   else
  51.   {
  52.     GPIOE->BSRR = GPIO_Pin_5;
  53.   }  
  54. }

  55. /*8位数据输入函数*/
  56. void HC595_DataIn(INT8U Data)
  57. {
  58.   for(INT8U i = 0; i < 8; i++)
  59.   {
  60.     SHIFT_IO(0);
  61.     DATA_IO(Data&0x01);
  62.     Data >>= 1;
  63.     __NOP();
  64.     SHIFT_IO(1);  
  65.   }
  66. }

  67. /*8位数据移位输入完成后输出*/
  68. void HC595_StatuOut(void)
  69. {
  70.   DISP_IO(0);
  71.   __NOP();
  72.   __NOP();//72M下延时14ns
  73.   DISP_IO(1);
  74. }

  75. /*控制不同LED灯开关*/
  76. void HC595_LEDOnOff(INT8U *pBuf)
  77. {
  78.   HC595_DataIn(pBuf[0]);
  79.   HC595_DataIn(pBuf[1]);
  80.   HC595_DataIn(pBuf[2]);
  81.   HC595_StatuOut();
  82. }
复制代码

需要显示哪一个就相应位置1,最后统一输出一次就好了。
huangyiting1990
2楼-- · 2020-01-27 10:18
墨逸、 发表于 2013-12-23 16:32
试了,可是时钟波形不是正常的高低信号

这是关键,连时钟信号都不标准 ,那就先查电路,时钟线,数据线可以适当的拉高试试。
墨逸、
3楼-- · 2020-01-27 10:38
365mcu 发表于 2013-12-23 17:14
我用过三片级联的,驱动程序你看看还有帮助

32的...看不懂
墨逸、
4楼-- · 2020-01-27 13:36
 精彩回答 2  元偷偷看……

一周热门 更多>