打印
[STM32F1]

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

[复制链接]
1674|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 (191.4 KB )

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就很方便

使用特权

评论回复
5
gygp| | 2017-5-17 22:58 | 只看该作者
扫描速度不够快还是太快了。

使用特权

评论回复
6
gygp| | 2017-5-17 23:00 | 只看该作者
现在可以使用串行芯片控制数码管

使用特权

评论回复
7
lss1985|  楼主 | 2017-5-18 09:09 | 只看该作者
戈卫东 发表于 2017-5-17 22:34
TXD=ch&0x80;  /* 这样写TXD只能得到0 */
/*--------- 要这样*/
if (ch&0x80) TXD = 1;

不会啊,比如第二个数据0xa4,与一下就剩高位1,变成0x80然后发送,然后低位左移一位再发送

使用特权

评论回复
8
戈卫东| | 2017-5-18 19:48 | 只看该作者
lss1985 发表于 2017-5-18 09:09
不会啊,比如第二个数据0xa4,与一下就剩高位1,变成0x80然后发送,然后低位左移一位再发送 ...

先找本C语言书看看?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

92

帖子

2

粉丝