这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 漓东e学堂 » [已解决]为什么显示的数字两个同时显示同一个数目,完全不管下面的分十位,各位分别

共5条 1/1 1 跳转至

[已解决]为什么显示的数字两个同时显示同一个数目,完全不管下面的分十位,各位分别显示

菜鸟
2014-11-08 10:16:27     打赏

【最终程序:http://forum.eepw.com.cn/thread/261214/3/#28

 

【已解决:各位十位分别用Num函数输出前都应该使数码管所有的灯关掉,不知为何不关掉的话十位也会不听控制跳出别的数字】

为什么显示的数字两个同时显示同一个数目,完全不管下面的分十位,个位分别显示呢??

 

【已解决:按键管脚没有改成GPIO_Mode_IN_FLOATING;难怪不听控制】

这个程序是希望先实现按键s1按下,数码管加1

没有按下按键,为何两数码管自己跳动

如“11、44、88、55”这样不规律地跳

找半天不明白什么回事,求不吝赐教

 

程序如下:

 

#include "stm32f10x.h"   
#include "stm32_eval.h"   
GPIO_InitTypeDef GPIO_InitStructure;    //定义GPIO结构体

 
/*延时函数 微秒*/  
void delay_us(u32 n)   
{   
    u8 j;   
    while(n--)   
    for(j=0;j<10;j++);   
}   
/*延时函数 毫秒*/  
void  delay_ms(u32 n)   
{   
   while(n--)   
    delay_us(1000);   
} 


void GPIO_INIT()   
{  
   	//使能GPIO时钟  PB 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //RCC_APB2Periph_GPIOB  开启GPIOB的时钟      ENABLE\DISABLE   打开or关闭 	
	  //结构体配置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_1|GPIO_Pin_15;//数码管使用PB^5-9  12-14   
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //速度:配置晶振
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //模式:Out_PP推挽输出,可做输出,输入   	
	 //GPIO   PB初始化 
    GPIO_Init(GPIOB, &GPIO_InitStructure);  	
	
	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //RCC_APB2Periph_GPIOB  开启GPIOB的时钟      ENABLE\DISABLE   打开or关闭 	
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;//按键使用PC8-11  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //速度:配置晶振
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //模式:Out_PP推挽输出,可做输出,输入   	
    GPIO_Init(GPIOC, &GPIO_InitStructure);	
} 

void Num(int z)
{
	  switch(z)//分别点亮对应数字的数码管
	{
		case 0 : GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);break;
		case 1 : GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_12);                                              break;
		case 2 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_13|GPIO_Pin_14);            break;
		case 3 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14);            break;
		case 4 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12);                        break;
		case 5 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_14);            break;
		case 6 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);break;
		case 7 : GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_12);                                   break;
		case 8 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);break;
		case 9 : GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_14); break;
  }
}

int main()  
{    
    int i=0,g=0,s=0;            //i被按下的次数,g个位的数,s十位的数
    GPIO_INIT(); 
     
    while(1)
	{		
		GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_15);//由于s1,s2两数码管分别接有三极管,须将B1,B15输出高电平,使三极管导通
		GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);   
		delay_ms(100);	                          //关闭全部所用管脚
		
		Num(g);  delay_ms(400);      //用switch函数分别点亮个位,十位	
		Num(s);  delay_ms(400);
		
		      if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))   //判断按键是否被按下 
        {   
            delay_ms(100);            //延时去抖
            if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))   //判断按键是否被按下 假如端口PC8为低电平
            {  
							i=i+1;                     //按键被按下,个位+1
							g=i%10;                  //取余,求出个位
							if(g==9)                 //如果个位到了9
							{
               g=0;                    //个位回到0
							 s=s+1;                    //十位加1
              }          
						}
				}		   
  }
}  		

 

 




关键词: 按键     数码管    

高工
2014-11-08 13:09:46     打赏
2楼
加断点调试

菜鸟
2014-11-08 18:08:38     打赏
3楼

恩,已解决原来是

按键模式应为GPIO_Mode_IN_FLOATING;

但是为什么显示的数字两个同时显示同一个数目,完全不管下面的分十位,各位分别显示啊??求解


院士
2014-11-09 18:24:39     打赏
4楼

菜鸟
2014-11-09 18:57:17     打赏
5楼
老师上课说的都没记清楚才搞出这么多状况,记得住就没那么麻烦了

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]