高级会员 
  
	- 积分
 - 504
 
        - 金钱
 - 504 
 
       - 注册时间
 - 2017-7-24
 
      - 在线时间
 - 117 小时
 
 
 
 | 
 
5金钱 
个人努力写了一个数码管显示的模块,大概思路是这样的,传入参数a,让a对10求余,显示一个数,再a=a/10,再对a求余得到第二位,依次类推。直至四位都显示。但是最近遇到一个问题就是显示负数的时候无法解决。负号不能正常的按照既定思路的显示出来,我个人的思路是假如a求完了,在前面固定显示负号,后来我发现逻辑上不行,因为我的每一位都是循环数据读取的。有没有什么方法可以让第二位固定显示负号呢?附上显示模块的代码: 
 
void DisPlayNum(int n)   
{   
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);                                 
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);                                //使能 
    if (n < 9999)   
    {         int i;   
        int s;   
                                int fu;                         
        s = n;                 
        i=0;   
        for (i=0;i<4;i++)   
        {   
            GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|                                                         
                                                                                                                                        GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|                                                         
                                                                                                                                        GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15 );   
        if(s<0) 
                                {         
                                         s=s-2*s; 
                                         fu=1; 
                                } 
                                switch (i)                                                                                                                                                                   
                                {   
                                                case 0:   
                                                                                        GPIO_SetBits(GPIOB,GPIO_Pin_7);   
                                                                                        break;   
                                                case 1:   
                                                                                        GPIO_SetBits(GPIOB,GPIO_Pin_6);   
                                                                                        break;   
                                                case 2:   
                                                                                        if(i==1&&fu==1) 
                                                                                        {                         
                                                                                                                GPIO_SetBits(GPIOB,GPIO_Pin_5); 
                                                                                                                GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|                                 
                                                                                                                                                                                                GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_15 );  
                                                                                        } 
                                                                                        else GPIO_SetBits(GPIOB,GPIO_Pin_5);  
                                                                                        break;   
                                                case 3:   
                                                                                        GPIO_SetBits(GPIOB,GPIO_Pin_4); 
                                                                                        break;   
        }  
                         
            switch (s % 10)                        
            {   
                case 0:   
                    GPIO_SetBits(GPIOB,GPIO_Pin_14|GPIO_Pin_15);                                                                                                                                                                                           // 0 
                    break;   
                case 1:   
                    GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); // 1  
                    break;   
                case 2:   
                    GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_13|GPIO_Pin_15);                                                                                                                                          // 2 
                    break;   
                case 3:   
                    GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_15);                                                                                                                                          // 3 
                    break;   
                case 4:   
                    GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15);                                                                                                  // 4 
                    break;   
                case 5:   
                    GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_15);                                                                                                                                  // 5 
                    break;   
                case 6:   
                    GPIO_SetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_15);                                                                                                                                                                                                  // 6 
                    break;   
                case 7:   
                    GPIO_SetBits(GPIOB,GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);                                          // 7 
                    break;   
                case 8:   
                    GPIO_SetBits(GPIOB,GPIO_Pin_15);                                                                                                                                                                                                                                          // 8 
                    break;   
                case 9:   
                    GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_15);                                                                                                                                                                                          // 9 
                    break;   
            }      
            s = s / 10;   
           if(s==0) 
           break;                 
                                                delay_ms(5);   
        }       
    }   
} 
 
 |   
 
 
最佳答案
查看完整内容[请看2#楼] 
[mw_shl_code=c,true]//Temp 要显示的数据
//pShow_Num,每一位数的编码数组
//功能:计算每一位数的编码,然后用指针传出去,然后用定时器中断定时刷新,实际的刷新LED数码管的函数是在定时器中断里
void LED_Show(int32_t Temp,u8 *pShow_Num,u8 status)
{
	if(status)
	{
		if(Temp >= -999 && Temp  -100 && Temp =0 && Temp  99 && Temp 
 
 
 
 
 
 
 |