嵌入式蓝桥杯2011年“国信长天杯”第三届嵌入式设计与开发的模拟试题“模拟停车场计费系统”设计任务书

嵌入式蓝桥杯2011年“国信长天杯”第三届嵌入式设计与开发的模拟试题“模拟停车场计费系统”设计任务书

首先我们看试题要求
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
首先我们看到试题要求并不是很多
需要用到的模块有 按键 LED LCD 串口 定时器
但是要实现的功能就很多
在这里插入图片描述

功能比较多 我们一个一个来实现 边实现边思考
不能一口吃个大胖子
首先我们初始化 LED KEY 串口
分割线
——————————————————————————————-
今天下午出通知 要下个月才省赛 了
顿时有不想搞的冲动
然而这个赛题已经完成了90% 然后被一些BUG严重的影响了心情
主要是断断续续改
写程序真的要一气呵成 完成一个小功能就沾沾自喜是不行的
这个BUG想放弃改了 先把代码放着了
这个题目还是让我学到很多东西的

主函数代码

#include "stm32f10x.h"
#include "lcd.h"
#include "led.h"
#include "tim.h"
#include "key.h"
#include "myuart.h"
#include "led.h"
#include "rtc.h"
#include "beep.h"
_Bool LED_Parking = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  LED
_Bool Parking_1 = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ
_Bool Parking_2 = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ
_Bool Parking_3 = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ
_Bool Parking_4 = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ
_Bool Parking_5 = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ
_Bool Parking_6 = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ
_Bool Parking_7 = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ
_Bool Parking_8 = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ
_Bool Parking_9 = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ
_Bool Parking_10 = 1 ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ

u8 display_nTime =  0; //ÏÔʾÿ¸ö³µÅŵÄʱ¼ä 0 - 10
u32 Parking_time_1 =0;  //³µÎ»×ܼÆʱÆ÷1
u32 Parking_time_2 =0;  //³µÎ»×ܼÆʱÆ÷2
u32 Parking_time_3 =0;  //³µÎ»×ܼÆʱÆ÷3
u32 Parking_time_4 =0;  //³µÎ»×ܼÆʱÆ÷4
u32 Parking_time_5 =0;  //³µÎ»×ܼÆʱÆ÷5
u32 Parking_time_6 =0;  //³µÎ»×ܼÆʱÆ÷6
u32 Parking_time_7 =0;  //³µÎ»×ܼÆʱÆ÷7
u32 Parking_time_8 =0;  //³µÎ»×ܼÆʱÆ÷8
u32 Parking_time_9 =0;  //³µÎ»×ܼÆʱÆ÷9
u32 Parking_time_10 =0;  //³µÎ»×ܼÆʱÆ÷10
extern	u8 key_status ;//0ÊÇûÓа´Ï 1ÊÇ°´ÏÂÁË
extern u8 key_release ;//1°´ÏÂÖ®ºóËÉ¿ª ¿ÉÒÔ´¥·¢×´Ì¬ 0 ±íʾ²»ÄÜ´¥·¢×´Ì¬ 
u8 THH_P =0 ,TMM_P=0,TSS_P=0; //³µÎ»¼ÆʱÆ÷µÄ·ÖÃëʱ
__IO uint32_t TimeDisplay = 0;
_Bool key_usart=1;
//Main Body
u8 Rates =1; //Êշѱ¶ÂÊ
u8 rates[20]={
    
    0}; 
unsigned char IDcode =0;  //³µÎ»±àÂë
u8 IDCode_nTIME[20]={
    
    0};
void DISPLAY_Parking_time(void);
int main(void)
{
    
    

	STM3210B_LCD_Init();
	LCD_Clear(Blue);
	LCD_SetBackColor(White);
  USART2_Init();
	KEY_Init();
	SysTick_Config(SystemCoreClock/1000);
  TIM2_Init();
	LED_Init();

  BEEP_Init();
	BEEP_Control(1);
	Delay_Ms(100);
	BEEP_Control(0);
	LCD_Clear(White);
	LCD_DisplayStringLine(Line3 ,"  IDCode    nTime   ");

	LCD_SetTextColor(Black);
	RTC_Configuration();
	Time_Adjust(23,55,55);
	LED_Control(0x00);

  while(1)
	{
    
    
  KEY_Read();
  LCD_DisplayStringLine(Line4 ,IDCode_nTIME);
		DISPLAY_Parking_time();
    /* If 1s has been elapsed */
    if (TimeDisplay == 1)
    {
    
    
      /* Display current time */
      TimeDisplay = 0;
    Time_Display(RTC_GetCounter());
	}
	}
}

void KEY_Read(void)
{
    
    
	u8 t;
	t=KEY_Scan();
	if(key_status)
	{
    
    

	    if(t=='1')
			{
    
    
					LCD_DisplayStringLine(Line3 ,"  IDCode    nTime   ");
         key_usart=1;
					 switch(IDcode)
					 {
    
    
						 case 1 :
							 if(Parking_1)
							 {
    
    
								 Parking_1=0;
								 display_nTime=1;
							 }
						 break;
							 case 2 :
							 if(Parking_2)
							 {
    
    
								 Parking_2=0;
								 display_nTime=1;
							 }
						 break;
							 case 3 :
							 if(Parking_3)
							 {
    
    
								 Parking_3=0;
								 display_nTime=1;
							 }
						 break;
							 case 4 :
							 if(Parking_4)
							 {
    
    
								 Parking_4=0;
								 display_nTime=1;
							 }
						 break;
							 case 5 :
							 if(Parking_5)
							 {
    
    
								 Parking_5=0;
								 display_nTime=1;
							 }
						 break;
							 case 6 :
							 if(Parking_6)
							 {
    
    
								 Parking_6=0;
								 display_nTime=1;
							 }
						 break;
							 case 7 :
							 if(Parking_7)
							 {
    
    
								 Parking_7=0;
								 display_nTime=1;
							 }
						 break;
							 case 8 :
							 if(Parking_8)
							 {
    
    
								 Parking_8=0;
								 display_nTime=1;
							 }
						 break;
							 case 9 :
							 if(Parking_9)
							 {
    
    
								 Parking_9=0;
								 display_nTime=1;
							 }
						 break;
							 case 10 :
							 if(Parking_10)
							 {
    
    
								 Parking_10=0;
								 display_nTime=1;
							 }
						 break;
							 
					 
				 }
			key_status=0;
			}
			if(t=='2')
			{
    
    
				  if(Parking_1||Parking_2||Parking_3||Parking_4||Parking_5||Parking_6||Parking_7||Parking_8||Parking_9||Parking_10)			//µ«·²ÓпÕλ
                 BEEP_Control(0);
					else  BEEP_Control(1);
					LCD_DisplayStringLine(Line3 ,"  IDCode    fee   ");
				 switch(IDcode)
					 {
    
    
					 case 1:
						 Parking_1=1;
					 break;
					 case 2:
						 Parking_2=1;
					 break;case 3:
						 Parking_3=1;
					 break;case 4:
						 Parking_4=1;
					 break;case 5:
						 Parking_5=1;
					 break;case 6:
						 Parking_6=1;
					 break;case 7:
						 Parking_7=1;
					 break;case 8:
						 Parking_8=1;
					 break;case 9:
						 Parking_9=1;
					 break;case 10:
						 Parking_10=1;
					 }
					 
					 
			}
		
	}
}
void DISPLAY_Parking_time(void)
{
    
    
	if(Parking_1||Parking_2||Parking_3||Parking_4||Parking_5||Parking_6||Parking_7||Parking_8||Parking_9||Parking_10) //µ«·²ÓпÕλ
	LED_Control(0x01);
	else 	LED_Control(0x02);
  sprintf(rates,"         Rates = %d   ",Rates);
	LCD_DisplayStringLine(Line9 ,rates);
		if(IDcode>10)IDcode=10;
		if(Rates>10)Rates=10;
  switch(IDcode)
	{
    
    
		case 1:
			THH_P=Parking_time_1/3600;
			TMM_P = (Parking_time_1 % 3600) / 60;
			TSS_P = (Parking_time_1 % 3600) % 60;
		if(Parking_1)
			sprintf(IDCode_nTIME,"     %d        %d     ",IDcode,Rates*(THH_P+1));
		else 
			sprintf(IDCode_nTIME,"     %d    %0.2d-%0.2d-%0.2d  ",IDcode,THH_P,TMM_P,TSS_P);
		break;
		 
				case 2:
			THH_P=Parking_time_2/3600;
			TMM_P = (Parking_time_2 % 3600) / 60;
			TSS_P = (Parking_time_2 % 3600) % 60;
		if(Parking_2)
			sprintf(IDCode_nTIME,"     %d        %d     ",IDcode,Rates*(THH_P+1));
		else 
			sprintf(IDCode_nTIME,"     %d    %0.2d-%0.2d-%0.2d  ",IDcode,THH_P,TMM_P,TSS_P);
		break;
		 
				case 3:
			THH_P=Parking_time_3/3600;
			TMM_P = (Parking_time_3 % 3600) / 60;
			TSS_P = (Parking_time_3 % 3600) % 60;
		if(Parking_3)
			sprintf(IDCode_nTIME,"     %d        %d     ",IDcode,Rates*(THH_P+1));
		else 
			sprintf(IDCode_nTIME,"     %d    %0.2d-%0.2d-%0.2d  ",IDcode,THH_P,TMM_P,TSS_P);
		break;
		 
				case 4:
			THH_P=Parking_time_4/3600;
			TMM_P = (Parking_time_4 % 3600) / 60;
			TSS_P = (Parking_time_4 % 3600) % 60;
		if(Parking_4)
			sprintf(IDCode_nTIME,"     %d        %d     ",IDcode,Rates*(THH_P+1));
		else 
			sprintf(IDCode_nTIME,"     %d    %0.2d-%0.2d-%0.2d  ",IDcode,THH_P,TMM_P,TSS_P);
		break;
		 
				case 5:
			THH_P=Parking_time_5/3600;
			TMM_P = (Parking_time_5 % 3600) / 60;
			TSS_P = (Parking_time_5 % 3600) % 60;
		if(Parking_5)
			sprintf(IDCode_nTIME,"     %d        %d     ",IDcode,Rates*(THH_P+1));
		else 
			sprintf(IDCode_nTIME,"     %d    %0.2d-%0.2d-%0.2d  ",IDcode,THH_P,TMM_P,TSS_P);
		break;
		 
				case 6:
			THH_P=Parking_time_6/3600;
			TMM_P = (Parking_time_6 % 3600) / 60;
			TSS_P = (Parking_time_6 % 3600) % 60;
		if(Parking_6)
			sprintf(IDCode_nTIME,"     %d        %d     ",IDcode,Rates*(THH_P+1));
		else 
			sprintf(IDCode_nTIME,"     %d    %0.2d-%0.2d-%0.2d  ",IDcode,THH_P,TMM_P,TSS_P);
		break;
		 
				case 7:
			THH_P=Parking_time_7/3600;
			TMM_P = (Parking_time_7 % 3600) / 60;
			TSS_P = (Parking_time_7 % 3600) % 60;
		if(Parking_7)
			sprintf(IDCode_nTIME,"     %d        %d     ",IDcode,Rates*(THH_P+1));
		else 
			sprintf(IDCode_nTIME,"     %d    %0.2d-%0.2d-%0.2d  ",IDcode,THH_P,TMM_P,TSS_P);
		break;
		 
				case 8:
			THH_P=Parking_time_8/3600;
			TMM_P = (Parking_time_8 % 3600) / 60;
			TSS_P = (Parking_time_8 % 3600) % 60;
		if(Parking_8)
			sprintf(IDCode_nTIME,"     %d        %d     ",IDcode,Rates*(THH_P+1));
		else 
			sprintf(IDCode_nTIME,"     %d    %0.2d-%0.2d-%0.2d  ",IDcode,THH_P,TMM_P,TSS_P);
		break;
		 
				case 9:
			THH_P=Parking_time_9/3600;
			TMM_P = (Parking_time_9 % 3600) / 60;
			TSS_P = (Parking_time_9 % 3600) % 60;
		if(Parking_9)
			sprintf(IDCode_nTIME,"     %d        %d     ",IDcode,Rates*(THH_P+1));
		else 
			sprintf(IDCode_nTIME,"     %d    %0.2d-%0.2d-%0.2d  ",IDcode,THH_P,TMM_P,TSS_P);
		break;
		 
				case 10:
			THH_P=Parking_time_10/3600;
			TMM_P = (Parking_time_10 % 3600) / 60;
			TSS_P = (Parking_time_10 % 3600) % 60;
		if(Parking_10)
			sprintf(IDCode_nTIME,"     %d        %d     ",IDcode,Rates*(THH_P+1));
		else 
			sprintf(IDCode_nTIME,"     %d    %0.2d-%0.2d-%0.2d  ",IDcode,THH_P,TMM_P,TSS_P);
		break;
		 
		
		 
		
	}
}

//
void RTC_IRQHandler(void)
{
    
    
  if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
  {
    
    
    /* Clear the RTC Second interrupt */
    RTC_ClearITPendingBit(RTC_IT_SEC);
    /* Enable time update */
    TimeDisplay = 1;
    /* Wait until last write operation on RTC registers has finished */
    RTC_WaitForLastTask();
		
		//Í£³µ³¡¼ÆËãʱ¼ä
		    if(Parking_1)Parking_time_1=0;
		else Parking_time_1++;
				if(Parking_2)Parking_time_2=0;
		else Parking_time_2++;
				if(Parking_3)Parking_time_3=0;
		else Parking_time_3++;
				if(Parking_4)Parking_time_4=0;
		else Parking_time_4++;
				if(Parking_5)Parking_time_5=0;
		else Parking_time_5++;
				if(Parking_6)Parking_time_6=0;
		else Parking_time_6++;
				if(Parking_7)Parking_time_7=0;
		else Parking_time_7++;
				if(Parking_8)Parking_time_8=0;
		else Parking_time_8++;
				if(Parking_9)Parking_time_9=0;
		else Parking_time_9++;
				if(Parking_10)Parking_time_10=0;
		else Parking_time_10++;
  }
}


按键代码

#include "key.h"
#include "tim.h"
#include "led.h"
#include "beep.h"
extern _Bool Parking_one  ; //³µÎ»±êÖ¾ ÓгµÎ»¾ÍÊÇÊÇ 1 û³µÎ»¾ÍÊÇ 0  ʵ¼Ê³µÎ»±êÖ¾ 1¾ÍÊÇÓÐ 0¾ÍÊÇûÓÐ
extern unsigned char IDcode ;
extern u8 IDCode_nTIME[20];
extern u8 THH_P ,TMM_P,TSS_P;
extern _Bool key_usart;  //0Êǵȴý´®¿Ú 1ÊÇ´®¿Ú·¢ËÍÍêÁË
void KEY_Init(void)
{
    
    
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_8;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);

	
}
	u8 key_status = 1;//0ÊÇûÓа´Ï 1ÊÇ°´ÏÂÁË
u8 key_release = 1;//1°´ÏÂÖ®ºóËÉ¿ª ¿ÉÒÔ´¥·¢×´Ì¬ 0 ±íʾ²»ÄÜ´¥·¢×´Ì¬ 
u8 KEY_Scan(void)
{
    
    

	if((KEY_0&&KEY_1)!=1)
	{
    
    
		
			Delay_Ms(20);
	if((KEY_0&&KEY_1)!=1)
			{
    
    
				if(KEY_0==0)

					return '1';
				else if(KEY_1==0)
			
					return '2';
				
			}
		
	}
	else 
	{
    
    
		key_status = 1;
	}

}




串口处理代码

#include "myuart.h"
extern u8 Rates; //Êշѱ¶Â
extern _Bool key_usart;  //0Êǵȴý´®¿Ú 1ÊÇ´®¿Ú·¢ËÍÍêÁË
void USART2_Init(void)
{
    
    
 GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
  /* Enable GPIO clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE);
  

  /* Configure USART Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


  /* Configure USART Rx as input floating */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	
  USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  /* USART configuration */
  USART_Init(USART2,&USART_InitStructure);
    
  /* Enable USART */
  USART_Cmd(USART2, ENABLE);

 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
  /* Enable the USARTz Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

int fputc(int ch, FILE *f)
{
    
    
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART */
  USART_SendData(USART2, (uint8_t) ch);

  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
  {
    
    }

  return ch;
}
extern unsigned char IDcode ;
u8 usart2_char[10]={
    
    0};
u8 usart2_counter=0;
u8 one = 0 , two = 0,three =0,four=0;
u8 fxone = 0 , fxtwo = 0,fxthree =0,fxfour=0;
void USART2_IRQHandler(void)
{
    
    
	
  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
  {
    
    
					/* Read one byte from the receive data register */
				USART_ClearITPendingBit(USART2, USART_IT_RXNE);
//				usart2_char[usart2_counter++]=USART_ReceiveData(USART2);

				if(four)
				{
    
    
					four=USART_ReceiveData(USART2);
					one =0 ; two =0; 

					if(four == '\r')
					{
    
    
						four=0;
						
					}
					else 
					{
    
    
						IDcode =IDcode*10+(four - '0');
						printf("I get ID%d \r",four-'0');
						four = 0;
					}
				}
				
				if(two)
				{
    
    
					three=USART_ReceiveData(USART2);
					IDcode=(three - '0');
					four=1;
				}
				if(USART_ReceiveData(USART2)=='I')one=1;
				if(USART_ReceiveData(USART2)=='D'&&one)
				{
    
    
				  key_usart=1;
					two=1;
				}

				
				
				
				
					if(fxfour)
				{
    
    
					fxfour=USART_ReceiveData(USART2);
					fxone =0 ; fxtwo =0; 
					if(fxfour == '\r')fxfour=0;
					else 
					{
    
    
						Rates =Rates*10+(fxfour - '0');	
						fxfour = 0;
					}
				}
				
				if(fxtwo)
				{
    
    
					fxthree=USART_ReceiveData(USART2);
					Rates=(fxthree - '0');
					fxfour=1;
				}
				if(USART_ReceiveData(USART2)=='F')fxone=1;
				if(USART_ReceiveData(USART2)=='x'&&fxone)fxtwo=1;

			}


}



时钟代码

#include "tim.h"
#include "led.h"
u32 TimingDelay = 0;
u16 TIM2_nTime=0;
void Delay_Ms(u32 nTime)
{
    
    
	TimingDelay = nTime;
	while(TimingDelay != 0);	
}
void TIM2_Init(void)
{
    
    
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

  /* TIM2 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  /* GPIOC clock enable */

  /* NVIC Configuration */


  /* Enable the TIM2 global Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

  /* GPIO Configuration */

  /* ---------------------------------------------------------------
    TIM2 Configuration: Output Compare Timing Mode:
    TIM2 counter clock at 6 MHz
    CC1 update rate = TIM2 counter clock / CCR1_Val = 146.48 Hz
    CC2 update rate = TIM2 counter clock / CCR2_Val = 219.7 Hz
    CC3 update rate = TIM2 counter clock / CCR3_Val = 439.4 Hz
    CC4 update rate = TIM2 counter clock / CCR4_Val = 878.9 Hz
  --------------------------------------------------------------- */

  /* Compute the prescaler value 
	1M = 1  000 000 000 us x 1000 1ms
  Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 1000-1;
  TIM_TimeBaseStructure.TIM_Prescaler = 71;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  /* Prescaler configuration */

  /* Output Compare Timing Mode configuration: Channel1 */

  /* Output Compare Timing Mode configuration: Channel2 */
  
  /* TIM IT enable */
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

  /* TIM2 enable counter */
  TIM_Cmd(TIM2, ENABLE);


}
void TIM2_IRQHandler(void)
{
    
    
  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  {
    
    
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
      TIM2_nTime++;
//		if(TIM2_nTime>500)TIM2_nTime=0;
//    if(TIM2_nTime>250)LED_Control(0x00);
//		else LED_Control(0xff);
  }
}


RTC代码

#include "rtc.h"
#include "stdio.h"
_Bool parking_one =0;
void NVIC_Configuration(void)
{
    
    
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Configure one bit for preemption priority */

  /* Enable the RTC Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void RTC_Configuration(void)
{
    
    
	NVIC_Configuration();
    /* Enable PWR and BKP clocks */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

  /* Allow access to BKP Domain */
  PWR_BackupAccessCmd(ENABLE);

  /* Reset Backup Domain */
  BKP_DeInit();

  /* Enable the LSI OSC */
  RCC_LSICmd(ENABLE);
  /* Wait till LSI is ready */
  while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
  {
    
    }
  /* Select the RTC Clock Source */
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

  /* Enable RTC Clock */
  RCC_RTCCLKCmd(ENABLE);

  /* Wait for RTC registers synchronization */
  RTC_WaitForSynchro();

  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();

  /* Enable the RTC Second */
  RTC_ITConfig(RTC_IT_SEC, ENABLE);

  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();

  /* Set RTC prescaler: set RTC period to 1sec */
  RTC_SetPrescaler(40000);

  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();

  /* To output second signal on Tamper pin, the tamper functionality
       must be disabled (by default this functionality is disabled) */
  BKP_TamperPinCmd(DISABLE);

  /* Enable the RTC Second Output on Tamper Pin */
  BKP_RTCOutputConfig(BKP_RTCOutputSource_Second);
}


/**
  * @brief  Returns the time entered by user, using Hyperterminal.
  * @param  None
  * @retval Current time RTC counter value
  */


/**
  * @brief  Adjusts time.
  * @param  None
  * @retval None
  */
void Time_Adjust(u8 Tmp_HH,u8 Tmp_MM,u8  Tmp_SS)
{
    
    
  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();
  /* Change the current time */
  RTC_SetCounter(Tmp_HH*3600 + Tmp_MM*60 + Tmp_SS);
  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();
}

/**
  * @brief  Displays the current time.
  * @param  TimeVar: RTC counter value.
  * @retval None
  */
  uint32_t THH = 0, TMM = 0, TSS = 0;
void Time_Display(uint32_t TimeVar)
{
    
    

  
  /* Reset RTC Counter when Time is 23:59:59 */
  if (RTC_GetCounter() == 0x0001517F)
  {
    
    
     RTC_SetCounter(0x0);
     /* Wait until last write operation on RTC registers has finished */
     RTC_WaitForLastTask();
  }
  
  /* Compute  hours */
  THH = TimeVar / 3600;
  /* Compute minutes */
  TMM = (TimeVar % 3600) / 60;
  /* Compute seconds */
  TSS = (TimeVar % 3600) % 60;

//	  printf("Time: %0.2d:%0.2d:%0.2d\r", THH, TMM, TSS);
}



蜂鸣器代码

#include "beep.h"

void BEEP_Init(void)
{
    
    
  GPIO_InitTypeDef GPIO_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

	GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOB,&GPIO_InitStruct);

}
void BEEP_Control(u8 BEEP)
{
    
    
	if(BEEP==1)
	GPIO_ResetBits(GPIOB,GPIO_Pin_4);
	else 
	GPIO_SetBits(GPIOB,GPIO_Pin_4);
}

猜你喜欢

转载自blog.csdn.net/m0_46179894/article/details/108204908