这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 漓东e学堂 » 【11.15更新】34号 0~99按键计数

共1条 1/1 1 跳转至

【11.15更新】34号 0~99按键计数

菜鸟
2015-11-15 23:05:22     打赏
#include "stm32f10x.h"	

GPIO_InitTypeDef GPIO_InitStructure; // 声明一个结构体

void RCC_Configuration(void); 
void GPIO_INIT(void) ;
void Function(void) ;

int main(void)   
{    
    RCC_Configuration();   
    GPIO_INIT();
    Function();   
}    
      
void RCC_Configuration(void)	//复位所有的RCC外围设备寄存器
{   
		ErrorStatus HSEStartUpStatus;	//	设置错误标志量
	RCC_DeInit(); 						//*将外设寄存器RCC重设为初始值 
	RCC_HSEConfig(RCC_HSE_ON);//*打开外部高速时钟晶振HSE:
  HSEStartUpStatus = RCC_WaitForHSEStartUp();  //*等待外部高速时钟晶振工作: 
  if(HSEStartUpStatus==SUCCESS)
	{
		RCC_HCLKConfig(RCC_SYSCLK_Div1);//*AHB使用系统时钟,负责外部存储器的时钟 
		RCC_PCLK1Config(RCC_HCLK_Div2);//*APB1 负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM
		RCC_PCLK2Config(RCC_HCLK_Div1);//*APB2负责AD,I/O,高级TIM,串口1 
		RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//*设置PLL输入时钟源72M
		RCC_PLLCmd(ENABLE);//*打开PLL:          
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//*等待PLL工作:
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//*设置系统时钟
		while(RCC_GetSYSCLKSource() != 0x08);//* 判断PLL是否是系统时钟:    
	}
	
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//改变管脚的映射SWJ使能,禁用JTAG,选择用于事件输出的GPIO端口
	
	/*蜂鸣器*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE); //# 使能被重新映射到GPIOD时钟和使能复用时钟功能
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; 		//#管脚号  关闭蜂鸣器
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 		//#输出速度 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//#推挽输出  
  GPIO_Init(GPIOD, &GPIO_InitStructure);  	 //#初始化 
	GPIO_ResetBits(GPIOD,GPIO_Pin_2);
} 

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(void)   
{     
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB, ENABLE);	
	
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 	//输出速度   
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;	
		GPIO_Init(GPIOC, &GPIO_InitStructure);	//初始化   
	 
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_1|GPIO_Pin_15|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;//数码管
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
		GPIO_Init(GPIOB, &GPIO_InitStructure);	
}   
  

void Number(int a)  //数码管显示数字
{
    switch(a)  
			{  
        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;  
			}  
}  
  
   
void Function(void) 
{     
		int i=0,j=0;          //i被按下的次数,n延时变量  

		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(50); //关闭数码管    

		while(1)  
		{                 
				GPIO_SetBits(GPIOB,GPIO_Pin_1);         //打开个位数码管  
				Number(i);                                //用switch函数显示00  
				delay_ms(t);                            
				GPIO_ResetBits(GPIOB,GPIO_Pin_1);        //关闭个位       
				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);  

				GPIO_SetBits(GPIOB,GPIO_Pin_15);           //打开十位  
				Number(j);    
				delay_ms(t);  
				GPIO_ResetBits(GPIOB,GPIO_Pin_15);      //关掉十位数码管     
				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);  

				if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))   //判断按键是s1否被按下  
				{     
					delay_ms(50);            //延时消抖  
					if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))  //再次判断按键是s1否被按下    
					{   
						i++;                     //按键被按下,个位+1  
						if(i==10)     
						{  
							j++;               
							i=0;                 
						}
						if(j==10)
						{
							 j=0;
                                                 i=0;
						}
					}
				}   

虽然是借助大神的,还是勉强完成了!


共1条 1/1 1 跳转至

回复

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