在嵌入式课程设计做了一个基于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就好了