[STM32F1] 使用74HC164驱动两个数码管不显示

[复制链接]
2035|7
 楼主| lss1985 发表于 2017-5-17 18:42 | 显示全部楼层 |阅读模式
本帖最后由 lss1985 于 2017-5-17 18:44 编辑

程序如下
uint8_tdisp[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void GPIO_Init(void)
{         
  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_11|GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode =GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed =GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}

#define SEL  PAout(11)    PA11片选功能
#define TXD  PAout(9)   PA9数据发送端
#define XCK  PAout(12)  PA12模拟时钟

void Sendbyte(uint8_t byte)发送程序
{
    uint8_t i,ch ;
ch=disp[byte];
    for(i=0;i<8;i++)   
    {
        XCK=0;
        TXD=ch&0x80;
        XCK=1;
        ch<<=1;
    }
}

int main(void)
{

      delay_init(168);        
      GPIO_Init();
          delay_ms(1000);   
SEL=0;
      Sendbyte(3);

}
大家看看有啥问题?数码管只能显示8,就是全亮
原理图在下面,SEL是选位的,按键请无视

QQ截图20170517183923.jpg
 楼主| lss1985 发表于 2017-5-17 20:31 | 显示全部楼层
再请教个问题,stm32 nucleo里面好像没有PAout这个关键词,那如果想把如0x80这样的数据通过IO口输出去,应该怎么操作呢?GPIO->ODR好像不能直接用,还涉及到A.B.C.D不同的组
戈卫东 发表于 2017-5-17 22:34 | 显示全部楼层
TXD=ch&0x80;  /* 这样写TXD只能得到0 */
/*--------- 要这样*/
if (ch&0x80) TXD = 1;
else            TXD = 0;
戈卫东 发表于 2017-5-17 22:36 | 显示全部楼层
lss1985 发表于 2017-5-17 20:31
再请教个问题,stm32 nucleo里面好像没有PAout这个关键词,那如果想把如0x80这样的数据通过IO口输出去,应 ...

单一管脚控制,用ODR不方便,用BSRR就很方便
gygp 发表于 2017-5-17 22:58 | 显示全部楼层
扫描速度不够快还是太快了。
gygp 发表于 2017-5-17 23:00 | 显示全部楼层
现在可以使用串行芯片控制数码管
 楼主| lss1985 发表于 2017-5-18 09:09 | 显示全部楼层
戈卫东 发表于 2017-5-17 22:34
TXD=ch&0x80;  /* 这样写TXD只能得到0 */
/*--------- 要这样*/
if (ch&0x80) TXD = 1;

不会啊,比如第二个数据0xa4,与一下就剩高位1,变成0x80然后发送,然后低位左移一位再发送
戈卫东 发表于 2017-5-18 19:48 | 显示全部楼层
lss1985 发表于 2017-5-18 09:09
不会啊,比如第二个数据0xa4,与一下就剩高位1,变成0x80然后发送,然后低位左移一位再发送 ...

先找本C语言书看看?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

92

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部