我用stm32f407去调TN1637 ,发现单片机是有数据发送到芯片的,但是芯片管脚的SG1-SG8没有反应 一直都是处于低电平的状态,这是什么原因照成的啊,程序如下:
void TM1637_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//ê1ÄüGPIOBê±Öó
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ÆÕí¨êä3öÄ£ê½
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//íÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
GPIO_Init(GPIOB, &GPIO_InitStructure);//3õê¼»ˉ
TM1637_CLK=1;
TM1637_DIO=1;
}
void TM1637_DIO_IN(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//ê1ÄüGPIOBê±Öó
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//ÆÕí¨êä3öÄ£ê½
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_Init(GPIOB, &GPIO_InitStructure);//3õê¼»ˉ
}
void TM1637_DIO_OUT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//ê1ÄüGPIOBê±Öó
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//ÆÕí¨êä3öÄ£ê½
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//íÆíìêä3ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//éÏà-
GPIO_Init(GPIOB, &GPIO_InitStructure);//3õê¼»ˉ
}
void TM1637_Start(void)
{
TM1637_DIO_OUT();
TM1637_CLK = 1;
TM1637_DIO = 1;
delay_us(2);
TM1637_DIO = 0;
delay_us(2);
TM1637_CLK = 0;
delay_us(2);
}
void TM1637_Ack(void)
{
TM1637_DIO = 0;
TM1637_CLK = 0;
TM1637_DIO_IN();
delay_us(5);
while(TM1637_READ_DIO);
TM1637_CLK = 1;
delay_us(5);
TM1637_CLK = 0;
}
void TM1637_Stop(void)
{
TM1637_DIO_OUT();
TM1637_CLK = 0;
delay_us(2);
TM1637_DIO = 0;
delay_us(2);
TM1637_CLK = 1;
delay_us(2);
TM1637_DIO = 1;
}
void TM1637_WriteByte(unsigned char oneByte)
{
unsigned char i;
TM1637_DIO_OUT();
TM1637_CLK = 0;
for(i=0;i<8;i++)
{
if(oneByte&0x01)
{
TM1637_DIO = 1;
}
else
{
TM1637_DIO = 0;
}
oneByte=oneByte>>1;
delay_us(3);
TM1637_CLK = 1;
delay_us(3);
TM1637_CLK = 0;
delay_us(3);
}
/*delay_us(3);
TM1637_CLK = 1;
delay_us(3);
TM1637_CLK = 0;
delay_us(3);*/
TM1637_Ack();
}
unsigned char TM1637_ScanKey(void)
{
unsigned char reKey,i;
TM1637_Start();
TM1637_WriteByte(0x40);
TM1637_Ack();
TM1637_DIO = 1;
TM1637_DIO_IN();
for(i=0;i<8;i++)
{
TM1637_CLK = 0;
reKey=reKey>>1;
delay_us(30);
TM1637_CLK = 1;
if(TM1637_READ_DIO)
{
reKey=reKey|0x80;
}
else
{
reKey=reKey|0x00;
}
delay_us(30);
}
TM1637_Ack();
TM1637_Stop();
return(reKey);
}
void TM1637_DisplayChar(unsigned char *q)
{
unsigned char i;
TM1637_Start();
TM1637_WriteByte(0x44);//0x441춨Ä£ê½óDàûóú¿ØÖÆÏÔê¾Î»£¬0x40Ôò2éóÃÏÔê¾μØÖ·×Ô¼óÄ£ê½Õaàï2»ê1óÃ
TM1637_Ack();
TM1637_Stop();
TM1637_Start();
TM1637_WriteByte(0xC0);//0X00μØÖ·¿aê¼ÏÔê¾
TM1637_Ack();
TM1637_WriteByte(0x00);
/*for(i=0;i<6;i++)
{
TM1637_WriteByte(*q);
q++;
}*/
TM1637_Ack();
TM1637_Stop();
TM1637_Start();
TM1637_WriteByte(0x8A);
TM1637_Ack();
TM1637_Stop();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>