课程设计用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_9)==0){
return 1;
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_10)==0){
return 2;
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_11)==0){
return 3;
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_12)==0){
return 4;
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8)==0){
return 5;
}
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);
}
void my_led1_c(u8 c){
u8 s[3]={1,1,1};
s[c-1]=0;
GPIO_WriteBit(GPIOC, GPIO_Pin_0,s[0]);
GPIO_WriteBit(GPIOC, GPIO_Pin_1,s[1]);
GPIO_WriteBit(GPIOC, GPIO_Pin_2,s[2]);
}
void my_led2_c(u8 c){
u8 s[3]={1,1,1};
s[c-1]=0;
GPIO_WriteBit(GPIOC, GPIO_Pin_3,s[0]);
GPIO_WriteBit(GPIOC, GPIO_Pin_4,s[1]);
GPIO_WriteBit(GPIOC, GPIO_Pin_5,s[2]);
}
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)
{
if(delay_num<60) {delay_num++; }
else{
delay_num=0;
if(all_time<40-1) all_time++;
else all_time=0;
if(v1>0) v1--;
if(v2>0) v2--;
}
if(all_time==0){
v1=22;
v2=25;
my_led1_c(1);
my_led2_c(2);
}
else if(all_time==22){
v1=3;
my_led1_c(3);
my_led2_c(2);
}
else if(all_time==25){
v1=15;
v2=12;
my_led1_c(2);
my_led2_c(1);
}
else if(all_time==37){
v2=3;
my_led1_c(2);
my_led2_c(3);
}
nixietube_show(v1,v2);
//
//
// if(all_time<40) all_time++;
// else all_time=0;
}
}
void GPIO_Config( )
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
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);
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);
}