STM32篮球计分器原理图和代码详解

在嵌入式课程设计做了一个基于STM32篮球计分器

小伙伴们可以借鉴一下

原理图

 程序代码

#include "stm32f10x.h"

void GPIO_Config(void);


//ÑÓʱº¯Êý
void delay(u32 d){
	u32 i=0;
	u32 n=0;
  for(i=0;i<d;i++)
     for(n=0;n<800;n++);

}

//°´¼üɨÃè
u8 key_scan(){
  if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0)==0){
	  return 1;
  }
  if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1)==0){
	  return 2;
  }
  if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2)==0){
	  return 3;
  }	
  if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3)==0){
	  return 4;
  }	
  return 0;
}




//ÊýÂë¹ÜÏÔʾ,È«ÁÁ
void nixietube_show_all(){
     //λѡÊä³öµÍµçƽ
	 GPIO_ResetBits(GPIOA, GPIO_Pin_9);
	 GPIO_ResetBits(GPIOA, GPIO_Pin_8);
	 //¶ÎÊä³ö¸ßµçƽ
	 GPIO_SetBits(GPIOA, GPIO_Pin_0);
	 GPIO_SetBits(GPIOA, GPIO_Pin_1);
	 GPIO_SetBits(GPIOA, GPIO_Pin_2);
	 GPIO_SetBits(GPIOA, GPIO_Pin_3);
	 GPIO_SetBits(GPIOA, GPIO_Pin_4);
	 GPIO_SetBits(GPIOA, GPIO_Pin_5);
	 GPIO_SetBits(GPIOA, GPIO_Pin_6);
	 GPIO_SetBits(GPIOA, GPIO_Pin_7);
}
//ÊýÂë¹ÜÊý×Ö±àºÅ
u8 xtube[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//ÏÔʾһλ
void tube_show_one(u8 ti){

	 //Åж϶ÎÊÇ·ñÐèÒªÏÔʾ£¬ÏÔʾÊä³ö¸ßµçƽ£¬²»ÏÔʾÊä³öµÍµçƽ
	 //a
     if((ti&0x01)==0x01) GPIO_SetBits(GPIOA, GPIO_Pin_0);
	 else GPIO_ResetBits(GPIOA, GPIO_Pin_0);
	 //b
     if((ti&0x02)==0x02) GPIO_SetBits(GPIOA, GPIO_Pin_1);
	 else GPIO_ResetBits(GPIOA, GPIO_Pin_1);
	 //c
     if((ti&0x04)==0x04) GPIO_SetBits(GPIOA, GPIO_Pin_2);
	 else GPIO_ResetBits(GPIOA, GPIO_Pin_2);
	 //d
	 if((ti&0x08)==0x08) GPIO_SetBits(GPIOA, GPIO_Pin_3);
	 else GPIO_ResetBits(GPIOA, GPIO_Pin_3);
	 //e
     if((ti&0x10)==0x10) GPIO_SetBits(GPIOA, GPIO_Pin_4);
	 else GPIO_ResetBits(GPIOA, GPIO_Pin_4);
	 //f
     if((ti&0x20)==0x20) GPIO_SetBits(GPIOA, GPIO_Pin_5);
	 else GPIO_ResetBits(GPIOA, GPIO_Pin_5);
	  //g
     if((ti&0x40)==0x40) GPIO_SetBits(GPIOA, GPIO_Pin_6);
	 else GPIO_ResetBits(GPIOA, GPIO_Pin_6);
	 //dp
     if((ti&0x80)==0x80) GPIO_SetBits(GPIOA, GPIO_Pin_7);
	 else GPIO_ResetBits(GPIOA, GPIO_Pin_7);
	 
}


//ÊýÂë¹ÜÏÔʾÊý×Ö
void nixietube_show(u8 num1,u8 num2){

	 //ÌáÈ¡Êý×Öλ
   u8 s1=num1/10;//ʮλ
	 u8 g1=num1%10;//¸öλ
   u8 s2=num2/10;//ʮλ
	 u8 g2=num2%10;//¸öλ
	 //¹Ø±Õλ
	 GPIO_SetBits(GPIOA, GPIO_Pin_9);
	 GPIO_SetBits(GPIOA, GPIO_Pin_8);
	 GPIO_SetBits(GPIOA, GPIO_Pin_10);
	 GPIO_SetBits(GPIOA, GPIO_Pin_11);	
	 //ÉèÖöÎ
     tube_show_one(xtube[s1]);
	 //¿ªÆôλ
	 GPIO_ResetBits(GPIOA, GPIO_Pin_8);
	 GPIO_SetBits(GPIOA, GPIO_Pin_9);
	 GPIO_SetBits(GPIOA, GPIO_Pin_10);
	 GPIO_SetBits(GPIOA, GPIO_Pin_11);	
	 //µÈ´ýÒ»»á¶ù
	 delay(10);
	 //¹Ø±Õλ
	 GPIO_SetBits(GPIOA, GPIO_Pin_9);
	 GPIO_SetBits(GPIOA, GPIO_Pin_8);
	 GPIO_SetBits(GPIOA, GPIO_Pin_10);
	 GPIO_SetBits(GPIOA, GPIO_Pin_11);	
	 //ÉèÖöÎ
	 tube_show_one(xtube[g1]);
	 //¿ªÆôµÚ¶þλ
	 GPIO_ResetBits(GPIOA, GPIO_Pin_9);
	 GPIO_SetBits(GPIOA, GPIO_Pin_8);
	 GPIO_SetBits(GPIOA, GPIO_Pin_10);
	 GPIO_SetBits(GPIOA, GPIO_Pin_11);	
	 //µÈ´ýÒ»»á¶ù
	 delay(10);
	 
	 
	 //¹Ø±Õλ
	 GPIO_SetBits(GPIOA, GPIO_Pin_9);
	 GPIO_SetBits(GPIOA, GPIO_Pin_8);
	 GPIO_SetBits(GPIOA, GPIO_Pin_10);
	 GPIO_SetBits(GPIOA, GPIO_Pin_11);	
	 //ÉèÖöÎ
	 tube_show_one(xtube[s2]);
	 //¿ªÆôµÚ¶þλ
	 GPIO_SetBits(GPIOA, GPIO_Pin_9);
	 GPIO_SetBits(GPIOA, GPIO_Pin_8);
	 GPIO_ResetBits(GPIOA, GPIO_Pin_10);
	 GPIO_SetBits(GPIOA, GPIO_Pin_11);	
	 //µÈ´ýÒ»»á¶ù
	 delay(10);

	 //¹Ø±Õλ
	 GPIO_SetBits(GPIOA, GPIO_Pin_9);
	 GPIO_SetBits(GPIOA, GPIO_Pin_8);
	 GPIO_SetBits(GPIOA, GPIO_Pin_10);
	 GPIO_SetBits(GPIOA, GPIO_Pin_11);	
	 //ÉèÖöÎ
	 tube_show_one(xtube[g2]);
	 //¿ªÆôµÚ¶þλ
	 GPIO_SetBits(GPIOA, GPIO_Pin_9);
	 GPIO_SetBits(GPIOA, GPIO_Pin_8);
	 GPIO_SetBits(GPIOA, GPIO_Pin_10);
	 GPIO_ResetBits(GPIOA, GPIO_Pin_11);	
	 //µÈ´ýÒ»»á¶ù
	 delay(10);

}



u8 people_num=0;
u32 delay_num=0;

u8 v1=0;//Äϱ±
u8 v2=0;//¶«Î÷
u8 all_time=0;
//-----------Ö÷º¯Êý
u8 keyv=0;
u8 keyv_last=0;
int main(void)
{	
    //³õʼ»¯
	u8 flag=0;
	GPIO_Config();
	GPIO_WriteBit(GPIOC, GPIO_Pin_0,1);
	while(1)
	{
	
		//°´¼ü¼ì²â
		keyv=key_scan();	
		
		if(keyv!=keyv_last){
			
			//A¼Ó
			if(keyv==1){
			   v1++;
			}
			//B¼Ó
			else if(keyv==2){
			   v2++;
			}
			//Çл»
			else if(keyv==3){
			   u8 a=v2;
				 v2=v1;
				 v1=a;
			}
			//ÇåÁã
			else if(keyv==4){
			   v1=0;
				 v2=0;
			}
		  keyv_last=keyv;
		}
			
		//ÊýÂë¹ÜË¢ÐÂÏÔʾ
		 nixietube_show(v1,v2);
		
	
   } 
}
void GPIO_Config( )
{
	GPIO_InitTypeDef GPIO_InitStructure;
	//¿ªÆôʱÖÓ
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

	//ÊýÂë¹ÜIO
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|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_Out_PP;
	GPIO_Init(GPIOA,&GPIO_InitStructure);


//	//IOÊä³ö£¬·äÃùÆ÷
//	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
//	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
//	GPIO_Init(GPIOC,&GPIO_InitStructure);
	
	//IOÊäÈë
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
	
}

 注释乱码了,粘回keil就好了

作者:岁月神偷\’

物联沃分享整理
物联沃-IOTWORD物联网 » STM32篮球计分器原理图和代码详解

发表评论