野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11830|回复: 3

您好,请教个74HC595数码管显示问题

[复制链接]
发表于 2015-8-7 11:03:00 | 显示全部楼层 |阅读模式
本帖最后由 i小贤 于 2015-8-10 16:54 编辑

程序如上
  现在有个问题就是显示不了十位。假如我要显示15,那么它就显示55;我要显示36,那么他就显示66.反正就是两位数码管都是显示个位的数。。用的是野火的ISO-MINI V2的板子实验!
请问这是怎么回事???麻烦各位帮我看下,万分感谢!

/*****************************************************************************
*êyÂë1üÏÔê¾3ìDò
*2015.07.29
*zxw
*****************************************************************************/


#include "smg_xianshi.h"

#define SCK(a)        if (a)        \
                                        GPIO_SetBits(GPIOA,GPIO_Pin_5);\
                                        else                \
                                        GPIO_ResetBits(GPIOA,GPIO_Pin_5)
#define SCK2(a)        if (a)        \
                                        GPIO_SetBits(GPIOA,GPIO_Pin_9);\
                                        else                \
                                        GPIO_ResetBits(GPIOA,GPIO_Pin_9)
#define DS(a)        if (a)        \
                                        GPIO_SetBits(GPIOA,GPIO_Pin_7);\
                                        else                \
                                        GPIO_ResetBits(GPIOA,GPIO_Pin_7)
#define DS2(a)        if (a)        \
                                        GPIO_SetBits(GPIOA,GPIO_Pin_10);\
                                        else                \
                                        GPIO_ResetBits(GPIOA,GPIO_Pin_10)
#define RCK(a)        if (a)        \
                                        GPIO_SetBits(GPIOA,GPIO_Pin_6);\
                                        else                \
                                        GPIO_ResetBits(GPIOA,GPIO_Pin_6)
#define RCK2(a)        if (a)        \
                                        GPIO_SetBits(GPIOA,GPIO_Pin_11);\
                                        else                \
                                        GPIO_ResetBits(GPIOA,GPIO_Pin_11)
#define AA(a)        if (a)        \
                                        GPIO_SetBits(GPIOA,GPIO_Pin_0);\
                                        else                \
                                        GPIO_ResetBits(GPIOA,GPIO_Pin_0)
#define BB(a)        if (a)        \
                                        GPIO_SetBits(GPIOA,GPIO_Pin_1);\
                                        else                \
                                        GPIO_ResetBits(GPIOA,GPIO_Pin_1)
#define CC(a)        if (a)        \
                                        GPIO_SetBits(GPIOA,GPIO_Pin_3);\
                                        else                \
                                        GPIO_ResetBits(GPIOA,GPIO_Pin_3)

unsigned char  seg[]={
                        0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
                        0x77,0x7c,0x39,0x5e,0x79,0x71,0x73,0x78,0x5c,0x54,
                        0x40,0x81,0x88,0x3e,0x70,0x00
                                                } ;

unsigned  char  Disp_buffer[]={0,1,2,3};
unsigned  char  Disp_buffer2[]={0,1,2,3};


/*******************************************************************************
* Function Name  :  void WR_595(unsigned char segdata)
* Description    : 595′®DDêäèë
* Input          : ??
* Output         : None
* Return         : None
*******************************************************************************/
void GPIO_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);


  /*!< Configure SPI_FLASH_SPI pins: SCK */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI pins: MISO */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI pins: MOSI */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI_CS_PIN pin: SPI_FLASH Card CS pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_3 |GPIO_Pin_4 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;//3&#245;ê&#188;&#187;ˉ595ê&#228;è&#235;&#203;&#248;′&#230;&#198;÷òy&#189;&#197;£¨PA4£&#169;oíêy&#194;&#235;1ü&#206;&#187;&#191;&#216;&#214;&#198;òy&#189;&#197;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
        
//        GPIO_SetBits(GPIOA,GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11);//é&#207;à-
        //GPIO_SetBits(GPIOA,GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//é&#207;à-

}

void WR_595(unsigned char segdata) //写一个数码管字节到595
{
  unsigned char i,temp;
  temp=segdata;
  for(i=0;i<8;i++)           //循环写入
  {               
  SCK(0);
  if(temp&0x80)                  //取字节的高位
   DS(1);
   else
   DS(0);
  temp=temp<<1;
  SCK(1);         //时钟拉高,写入
  }
}

void WR2_595(unsigned char segdata) //写一个数码管字节到595
{
  unsigned char i,temp;
  temp=segdata;
  for(i=0;i<8;i++)         
  {               
  SCK2(0);
  if(temp&0x80)               
   DS2(1);
   else
   DS2(0);
  temp=temp<<1;
  SCK2(1);
  }
}
/*****************************************************************
*wmh_138();wml_138();数码管位选择
* 74HC138
* wm:数码管位数
*****************************************************************/
void wmh_138(unsigned char wm)
{
        if(wm==0)
        {
                AA(0);
                BB(0);
                CC(0);
        }
        if(wm==1)
        {
                AA(1);
                BB(0);
                CC(0);
        }
}

void wml_138(unsigned char wm)
{
                if(wm==2)
        {
                AA(0);
                BB(1);
                CC(0);
        }
        if(wm==3)
        {
                AA(1);
                BB(1);
                CC(0);
        }
}

/*******************************************************************************
* Function Name  : void OUT_595(void)
* Description    : 595数据移入锁存器
*******************************************************************************/
void OUT_595(void)          //595数据移入锁存器
{  unsigned i;

        RCK(0);              //拉低
       for(i=0;i<10;i++);
        RCK(1);
        RCK(0);
}

void OUT2_595(void)          //595数据移入锁存器
{  unsigned i;

        RCK2(0);                 //拉低
        for(i=0;i<10;i++);
        RCK2(1);
        RCK2(0);
}


void LED_Brush(int LED_DATA)    //把要显示的数据拆分放到数组里
{                       
  Disp_buffer[0]=LED_DATA/10;   //取十位
  Disp_buffer[1]=LED_DATA%10;  //取个位
}

void LED_Brush2(int LED_DATA2)   //把要显示的数据拆分放到数组里
{                     
  Disp_buffer2[0]=LED_DATA2/10;  //取十位
  Disp_buffer2[1]=LED_DATA2%10;  //取个位
}

void delay1(int j)  //简单的延时
{
        char jj=255;
        while(j--)
        {
                for(;jj>0;jj--);
        }
}

void shu_ma_guan_ll(int ll)  //数码管显示一个数
{
                char i;        
                LED_Brush(ll);  //把要显示的数拆分放到数组
                for(i=0;i<2;i++)  //循环写入两个字节
                {
                        wmh_138(i);  //数码管位选择
                        WR_595(seg[Disp_buffer])
;  //串行写入一个字节到595
                        OUT_595();  //数据输入到锁存器
                        delay1(500);                        
                }
}

void shu_ma_guan_yl(int yl)  //数码管显示一个数
{
                char i;        
                LED_Brush2(yl);  //把要显示的数拆分放到数组
                for(i=0;i<2;i++)  //循环写入两个字节
                {
                        wml_138(i+2);  //数码管位选择
                        WR2_595(seg[Disp_buffer2]
);  //串行写入一个字节到595
                        OUT2_595();  //数据输入到锁存器
                        delay1(500);                        
                }        
}


程序如上
  现在有个问题就是显示不了十位。假如我要显示15,那么它就显示55;我要显示36,那么他就显示66.反正就是两位数码管都是显示个位的数。。用的是野火的ISO-MINI V2的板子实验!
请问这是怎么回事???麻烦各位帮我看下,万分感谢!

回复

使用道具 举报

发表于 2015-8-8 09:10:56 | 显示全部楼层
这样的话应该是你十位和个位都显示同一个数了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-10 16:55:13 | 显示全部楼层
flyleaf 发表于 2015-8-8 09:10
这样的话应该是你十位和个位都显示同一个数了

我用硬件SPI显示没问题,用模拟就不行了,这是为什么?程序有错吗?
回复 支持 反对

使用道具 举报

发表于 2016-12-6 21:24:08 | 显示全部楼层
同上,我也想求一份数码管显示的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-13 17:04 , Processed in 0.029719 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表