野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11892|回复: 3

如何解决数码管动态显示闪烁的问题,单个数码管2.3寸

[复制链接]
发表于 2016-4-1 17:29:48 | 显示全部楼层 |阅读模式
如题,把延时调的更小,还是有闪烁,为什么外面的数码管显示没有明显的闪烁。是用定时器来进行延时更好吗?
回复

使用道具 举报

发表于 2016-4-1 18:43:23 | 显示全部楼层
没有的事,可能你函数有问题。最好发一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-1 19:29:17 | 显示全部楼层
猫和四叶草 发表于 2016-4-1 18:43
没有的事,可能你函数有问题。最好发一下

/**
  ******************************************************************************
  * @file    main.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   óÃ3.5.0°æ±¾¿a½¨μÄ1¤3ìÄ£°å
  ******************************************************************************
  * @attention
  *
  * êμÑéƽì¨:ò°»e iSO STM32 ¿a·¢°å
  * ÂÛì3    :http://www.firebbs.cn
  * ìÔ±|    :http://firestm32.taobao.com
  *
  ******************************************************************************
  */
  
#include "stm32f10x.h"
#include "bsp_dht11.h"
#include "bsp_SysTick.h"
#include "bsp_smg.h"
#include "bsp_usart1.h"
#include "bsp_TiMbase.h"


//¶¨òå諾ֱäá¿  DHT11_Data
DHT11_Data_TypeDef DHT11_Data;
volatile u32 time = 0; // ms ¼Æê±±äá¿
volatile u32 time1 = 0; // ms ¼Æê±±äá¿
int H1,H2,h1,h2;
int T1,T2,t1,t2;
u16 table[]={0X3F,0X6,0X5B,0X4F,0X66,0X6D,0X7D,0X7,0X7F,0X6F};
u16 table1[]={0XBF,0X86,0XDB,0XCF,0XE6,0XED,0XFD,0X87,0XFF,0XEF};
void tempdisplay(void);
void shidudisplay(void);
void SMG_GPIO_Config(void);
void DHT11_GPIO_Config(void);
void SysTick_Init(void);
void TIM2_Configuration(void);
void TIM6_Configuration(void);

//Ñóê±oˉêy
void delay(u16 time)
{
        u16 i=0;
//        while(time--)
//        {
                i=3500;
                while(i--);
        //}
}

void Delay_us(__IO u32 nTime);

int main(void)
{
        //¶¨ê±Æ÷ÅäÖÃ
   TIM2_Configuration();
        //¶¨ê±Æ÷ÅäÖÃ
        TIM6_Configuration();
       
        /* êμÕ½¶¨ê±Æ÷μÄÖD¶ÏóÅÏ輶 */
        TIM2_MNVIC_Configuration();
        /* êμÕ½¶¨ê±Æ÷μÄÖD¶ÏóÅÏ輶 */
        TIM6_NVIC_Configuration();
       
        /* TIM2 ÖØD¿aê±Ö󣬿aê¼¼Æê± */
        TIM_Cmd(TIM2, ENABLE);       
        /* TIM6 ÖØD¿aê±Ö󣬿aê¼¼Æê± */
        TIM_Cmd(TIM6, DISABLE);
       
        //ÅäÖÃSysTick Îa10usÖD¶Ïò»′Î
  SysTick_Init();
       
        //ÅäÖÃUSART
        USART1_Config();

        //3õê¼»ˉDTT11μÄòy½Å
        DHT11_GPIO_Config();
       
        //3õê¼»ˉSMGμÄòy½Å
        SMG_GPIO_Config();

while(1)
        {
                 if ( time >=10000)
       {
                           time=0;
       }
           else if ((time <5000))
                         {       

         tempdisplay();       
       }
     else if(time<10000&&time>=5000)
            {
        shidudisplay();
                        }
   }
}

//êa&#182;è&#207;&#212;ê&#190;′|àíoˉêy
void shidudisplay()
{
         if(Read_DHT11(&DHT11_Data)==SUCCESS)
        {
           //êa&#182;èêy&#190;Y′|àí
                       H1=(DHT11_Data.humi_int/10)%10;   //è&#161;êa&#182;è&#213;&#251;êy2&#191;·&#214;μ&#196;ê&#174;&#206;&#187;
                       H2=(DHT11_Data.humi_int%10);      //è&#161;êa&#182;è&#213;&#251;êy2&#191;·&#214;μ&#196;&#184;&#246;&#206;&#187;
                       h1=(DHT11_Data.humi_deci/10)%10;  //è&#161;êa&#182;èD&#161;êy2&#191;·&#214;μ&#196;ê&#174;·&#214;&#206;&#187;
                       h2=(DHT11_Data.humi_deci%10);     //è&#161;êa&#182;èD&#161;êy2&#191;·&#214;μ&#196;°ù·&#214;&#206;&#187;
              }
         else
              {
                       GPIO_Write(GPIOB,0);
                       GPIO_Write(GPIOC,0XFFFF);
              }
                /*****************************************************
                *********           êa&#182;èêy&#190;Y′|àí          ***********
                *****************************************************/
//   if(time1>=100)
//         {
//                time1=0;
//   }
//         else if((time1<50))
//         {
                //&#191;aêy&#194;&#235;1üμ&#196;×óμúò&#187;&#206;&#187;£&#172;í¨1y&#206;&#187;éè&#214;&#195;£&#172;&#184;&#223;μ&#231;&#198;&#189;&#191;a&#198;&#244;
                GPIO_SetBits(GPIOB,GPIO_Pin_12);
                GPIO_Write(GPIOC,table[H1]);
                delay(0X1);
               
                GPIO_ResetBits(GPIOB,GPIO_Pin_12);
//         }
//                else if(time1>=33&&time1<64)
//                {
                //&#191;aêy&#194;&#235;1üμ&#196;×óμú&#182;t&#206;&#187;£&#172;í¨1y&#206;&#187;éè&#214;&#195;£&#172;&#184;&#223;μ&#231;&#198;&#189;&#191;a&#198;&#244;
                GPIO_SetBits(GPIOB,GPIO_Pin_13);
                GPIO_Write(GPIOC,table1[H2]);
                delay(0X1);
               
                GPIO_ResetBits(GPIOB,GPIO_Pin_13);
//                }
//                else
//                {       
                //&#191;aêy&#194;&#235;1üμ&#196;×óμúèy&#206;&#187;£&#172;í¨1y&#206;&#187;éè&#214;&#195;£&#172;&#184;&#223;μ&#231;&#198;&#189;&#191;a&#198;&#244;£¨D&#161;êy2&#191;·&#214;£&#169;
                GPIO_SetBits(GPIOB,GPIO_Pin_14);
                GPIO_Write(GPIOC,table[h1]);
          delay(0X1);
                GPIO_ResetBits(GPIOB,GPIO_Pin_14);
//                }
               
                //êa&#182;èμ&#196;μ¥&#206;&#187;
                 GPIO_SetBits(GPIOB,GPIO_Pin_15);
                 
                 GPIO_SetBits(GPIOC,GPIO_Pin_12);
                 
                 GPIO_SetBits(GPIOC,GPIO_Pin_10);
                 GPIO_SetBits(GPIOE,GPIO_Pin_10);
   }


//&#206;&#194;&#182;è&#207;&#212;ê&#190;′|àíoˉêy
void tempdisplay()
{
       
                /*μ÷ó&#195;Read_DHT11&#182;áè&#161;&#206;&#194;êa&#182;è£&#172;è&#244;3é1|&#212;òê&#228;3&#246;&#184;&#195;D&#197;&#207;¢*/
                if( Read_DHT11(&DHT11_Data)==SUCCESS)
        {
   
                //&#206;&#194;&#182;èêy&#190;Y′|àí
                T1=(DHT11_Data.temp_int/10)%10;   //è&#161;&#206;&#194;&#182;è&#213;&#251;êy2&#191;·&#214;μ&#196;ê&#174;&#206;&#187;
                T2=(DHT11_Data.temp_int%10);      //è&#161;&#206;&#194;&#182;è&#213;&#251;êy2&#191;·&#214;μ&#196;&#184;&#246;&#206;&#187;  
           t1=(DHT11_Data.temp_deci/10)%10;  //è&#161;&#206;&#194;&#182;è&#213;&#251;êy2&#191;·&#214;μ&#196;ê&#174;·&#214;&#206;&#187;
                t2=(DHT11_Data.temp_deci%10);     //è&#161;&#206;&#194;&#182;è&#213;&#251;êy2&#191;·&#214;μ&#196;°ù·&#214;&#206;&#187;
        }
        else
        {
                GPIO_Write(GPIOB,0);
                GPIO_Write(GPIOC,0XFFFF);
        }
                /*****************************************************
                 *********          &#206;&#194;&#182;èêy&#190;Y′|àí           ***********
                 ****************************************************/
                //&#191;aêy&#194;&#235;1üμ&#196;×óμúò&#187;&#206;&#187;£&#172;í¨1y&#206;&#187;éè&#214;&#195;£&#172;&#184;&#223;μ&#231;&#198;&#189;&#191;a&#198;&#244;
                GPIO_SetBits(GPIOB,GPIO_Pin_12);
                GPIO_Write(GPIOC,table[T1]);
                delay(0X1);
          
                GPIO_ResetBits(GPIOB,GPIO_Pin_12);
               
                //&#191;aêy&#194;&#235;1üμ&#196;×óμú&#182;t&#206;&#187;£&#172;í¨1y&#206;&#187;éè&#214;&#195;£&#172;&#184;&#223;μ&#231;&#198;&#189;&#191;a&#198;&#244;
                GPIO_SetBits(GPIOB,GPIO_Pin_13);
                GPIO_Write(GPIOC,table1[T2]);
                delay(0X1);
          
                GPIO_ResetBits(GPIOB,GPIO_Pin_13);
               
                //&#191;aêy&#194;&#235;1üμ&#196;×óμúèy&#206;&#187;£&#172;í¨1y&#206;&#187;éè&#214;&#195;£&#172;&#184;&#223;μ&#231;&#198;&#189;&#191;a&#198;&#244;£¨D&#161;êy2&#191;·&#214;£&#169;
                GPIO_SetBits(GPIOB,GPIO_Pin_14);
                GPIO_Write(GPIOC,table[t1]);
                delay(0X1);
               
                GPIO_ResetBits(GPIOB,GPIO_Pin_14);
               

         GPIO_SetBits(GPIOB,GPIO_Pin_15);
         GPIO_ResetBits(GPIOE,GPIO_Pin_10);
   GPIO_SetBits(GPIOC,GPIO_Pin_12);
         GPIO_SetBits(GPIOC,GPIO_Pin_11);
         GPIO_SetBits(GPIOC,GPIO_Pin_10);
         GPIO_SetBits(GPIOC,GPIO_Pin_9);
         GPIO_SetBits(GPIOC,GPIO_Pin_8);
}



/*********************************************END OF FILE**********************/
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-1 19:32:11 | 显示全部楼层
猫和四叶草 发表于 2016-4-1 18:43
没有的事,可能你函数有问题。最好发一下

             //数码管第一位显示
                GPIO_SetBits(GPIOB,GPIO_Pin_12);
                GPIO_Write(GPIOC,table[T1]);
                delay(0X1);
          
                GPIO_ResetBits(GPIOB,GPIO_Pin_12);
               
                //数码管第二位显示
                GPIO_SetBits(GPIOB,GPIO_Pin_13);
                GPIO_Write(GPIOC,table1[T2]);
                delay(0X1);
          
                GPIO_ResetBits(GPIOB,GPIO_Pin_13);
               
                //数码管第三位显示
                GPIO_SetBits(GPIOB,GPIO_Pin_14);
                GPIO_Write(GPIOC,table[t1]);
                delay(0X1);
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 15:30 , Processed in 0.044917 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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