2020-01-25 15:24发布
墨逸、 发表于 2013-12-23 16:32 试了,可是时钟波形不是正常的高低信号
365mcu 发表于 2013-12-23 17:14 我用过三片级联的,驱动程序你看看还有帮助
最多设置5个标签!
- #include "stm32f10x.h"
- INT8U HC595DataBuf[3] = {0};
- /*
- //23 22 21 20 19 18 17 16
- R1 G1 R2 G2 R3 G3 R4
- //15 14 13 12 11 10 9 8
- G4 R5 G5 R6 G6
- //7 6 5 4 3 2 1 0
- ALED4 ALED3 ALED2 ALED1
- */
- /*初始化硬件*/
- void HC595InitIO (void)
- {
- Pin pindo[] = {PIO_74HC595};
- PIO_74HC595RCCConf();
- PIO_Configure(pindo,PIO_LISTSIZE(pindo));
- HC595_LEDOnOff(&HC595DataBuf[0]);//初始状态设置
- }
- /*串行数据输入IO*/
- void DATA_IO(INT8U Value)
- {
- if(Value == 0)
- {
- GPIOE->BRR = GPIO_Pin_6;
- }
- else
- {
- GPIOE->BSRR = GPIO_Pin_6;
- }
- }
- /*串行数据移位引脚控制*/
- void SHIFT_IO(INT8U Value)
- {
- if(Value == 0)
- {
- GPIOE->BRR = GPIO_Pin_4;
- }
- else
- {
- GPIOE->BSRR = GPIO_Pin_4;
- }
- }
- /*串行数据存储引脚控制*/
- void DISP_IO(INT8U Value)
- {
- if(Value == 0)
- {
- GPIOE->BRR = GPIO_Pin_5;
- }
- else
- {
- GPIOE->BSRR = GPIO_Pin_5;
- }
- }
- /*8位数据输入函数*/
- void HC595_DataIn(INT8U Data)
- {
- for(INT8U i = 0; i < 8; i++)
- {
- SHIFT_IO(0);
- DATA_IO(Data&0x01);
- Data >>= 1;
- __NOP();
- SHIFT_IO(1);
- }
- }
- /*8位数据移位输入完成后输出*/
- void HC595_StatuOut(void)
- {
- DISP_IO(0);
- __NOP();
- __NOP();//72M下延时14ns
- DISP_IO(1);
- }
- /*控制不同LED灯开关*/
- void HC595_LEDOnOff(INT8U *pBuf)
- {
- HC595_DataIn(pBuf[0]);
- HC595_DataIn(pBuf[1]);
- HC595_DataIn(pBuf[2]);
- HC595_StatuOut();
- }
复制代码需要显示哪一个就相应位置1,最后统一输出一次就好了。
这是关键,连时钟信号都不标准 ,那就先查电路,时钟线,数据线可以适当的拉高试试。
32的...看不懂
一周热门 更多>