蓝桥杯嵌入式入门指南-RTC【8】


loop()

c 复制代码
	//RTC 时间和日期都需要读取,不然会RTC读不出来
	RTC_TimeTypeDef time; //定义时间
	RTC_DateTypeDef date; //定义日期
	HAL_RTC_GetTime(&hrtc,&time,RTC_FORMAT_BIN);//读取RTC时间
	HAL_RTC_GetDate(&hrtc,&date,RTC_FORMAT_BIN);//读取RTC日期
	sprintf(text,"time:%d:%d:%d      ",time.Hours,time.Minutes,time.Seconds);
	LCD_DisplayStringLine(Line7,(uint8_t *)text);
	sprintf(text,"date:%d:%d:%d      ",date.Year,date.Month,date.Date);
	LCD_DisplayStringLine(Line8,(uint8_t *)text);

全部代码

c 复制代码
#include "all.h"

uint8_t led_sta=0x20;//LED初始化参数
extern struct Bkeys bkey[];//按键存储
char  text[30]; //存放显示文本
char uart_tx[50];//uart发送缓冲区
char uart_rx[50];//uart接受缓冲区

void LED_Disp(uint8_t dsLED)//LED控制
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);//所有LED熄灭
	HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);//左移8位。控制C8~C15引脚,值为1的点亮
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//开锁存器
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//关锁存器
}
void LED_Chg(uint8_t num,uint8_t sta)//单独控制一个LED
{
	uint8_t pos = 0x01<<(num-1);
	led_sta =(led_sta&(~pos))|(pos*sta);
	LED_Disp(led_sta);
}

float adc_read(ADC_HandleTypeDef *hadc)
{
	uint16_t adc_val;
	float adc_f;
	HAL_ADC_Start (hadc);
	adc_val = HAL_ADC_GetValue(hadc);
	adc_f = adc_val*3.3f/4096.0f;
	return adc_f;
}


void setup()
{
	HAL_TIM_Base_Start_IT(&htim6);//开启TIM
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);//产生PWM
	HAL_TIM_IC_Start(&htim15,TIM_CHANNEL_1);//打开pwm捕获
	HAL_TIM_IC_Start(&htim15,TIM_CHANNEL_2);//打开pwm捕获
	
	HAL_ADCEx_Calibration_Start(&hadc2 ,ADC_SINGLE_ENDED);//ADC自动校准
	
	HAL_UARTEx_ReceiveToIdle_IT(&huart1 ,(uint8_t *)uart_rx,50);//用一次关一次,需要重新打开
	
	//LED初始状态
	LED_Disp(0x00);
	//LCD初始化
	LCD_Init();
  LCD_Clear(Black );
  LCD_SetBackColor(Black);
  LCD_SetTextColor(White);
}

void loop()
{
	//PWM捕获
	float frq1 = 0;
	float duty1 = 0;
	
	frq1 = 1000000.0f/(HAL_TIM_ReadCapturedValue(&htim15,TIM_CHANNEL_1)+1);//获取频率
	duty1 = ((HAL_TIM_ReadCapturedValue(&htim15,TIM_CHANNEL_2)+1)*100.f/(HAL_TIM_ReadCapturedValue(&htim15,TIM_CHANNEL_1)+1));//获取占空比
	
	sprintf(text,"     FQR:%.2f Hz     ",frq1);
	LCD_DisplayStringLine(Line2,(uint8_t *)text);
	sprintf(text,"     DUTY:%.2f %%     ",duty1);
	LCD_DisplayStringLine(Line3,(uint8_t *)text);
	
	//ADC
	float adc_data_PB15;
	adc_data_PB15 = adc_read(&hadc2);
	sprintf(text,"  PB15:%.4f V    ",adc_data_PB15);
	LCD_DisplayStringLine(Line4,(uint8_t *)text);
	
//	//UART发送
//	sprintf(uart_tx ,"  PB15:%.4f V  \r\n  ",adc_data_PB15);
//	HAL_UART_Transmit(&huart1,(uint8_t *)uart_tx,strlen(uart_tx),500);//串口名字 数据 长度 发送间隔
	
	//RTC
	RTC_TimeTypeDef time; //定义时间
	RTC_DateTypeDef date; //定义日期
	HAL_RTC_GetTime(&hrtc,&time,RTC_FORMAT_BIN);//读取RTC时间
	HAL_RTC_GetDate(&hrtc,&date,RTC_FORMAT_BIN);//读取RTC日期
	sprintf(text,"time:%d:%d:%d      ",time.Hours,time.Minutes,time.Seconds);
	LCD_DisplayStringLine(Line7,(uint8_t *)text);
	sprintf(text,"date:%d:%d:%d      ",date.Year,date.Month,date.Date);
	LCD_DisplayStringLine(Line8,(uint8_t *)text);
	
		if(bkey[1].short_flag==1)
	{
		LED_Chg(1,1);
		sprintf(text,"        down!        ");
		LCD_DisplayStringLine(Line1,(uint8_t *)text);
		bkey[1].short_flag = 0;
	}
		if(bkey[1].long_flag==1)
	{
		LED_Chg(2,1);
		sprintf(text,"      long_down!      ");
		LCD_DisplayStringLine(Line1,(uint8_t *)text);
	}

}


	//UART接受
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)//串口接收到数据后就会产生一个回调
{
	char recieve[5];//定义接收数据大小
	char key[5]="hello";
	sscanf(uart_rx,"%s",recieve);//扫描接收数据
	if(strcmp(recieve,key) == 0)//对比数据是否为hello
	{
		sprintf(text,"  World!    ");
		LCD_DisplayStringLine(Line6,(uint8_t *)text);

	}
	HAL_UARTEx_ReceiveToIdle_IT(&huart1 ,(uint8_t *)uart_rx ,50);//用一次关一次,需要重新打开
}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//按键服务
{
	if(htim->Instance == TIM6)
	key_serv();

}
相关推荐
嗨信奥1 小时前
2023年第十四届蓝桥杯Scratch国赛真题—推箱子
青少年编程·蓝桥杯
憧憬一下1 小时前
Linux内核早期打印机制与RS485通信技术
arm开发·嵌入式硬件·嵌入式·linux驱动开发
Chandler2411 小时前
蓝桥杯经验分享
经验分享·算法·蓝桥杯
随心............12 小时前
python蓝桥杯刷题3
python·蓝桥杯
濊繵14 小时前
备赛蓝桥杯--算法题目(2)
算法·职场和发展·蓝桥杯
混迹网络的权某1 天前
蓝桥杯真题——砍竹子(C语言)
c语言·算法·蓝桥杯
杨德杰1 天前
开源ISP介绍(1)——开源ISP的Vivado框架搭建
图像处理·fpga开发·嵌入式·isp·vitis
小码农<^_^>1 天前
蓝桥杯准备训练(lesson1,c++方向)
c++·蓝桥杯
爱穿西装的C先生2 天前
C++学习日记---第16天
开发语言·c++·学习·程序人生·蓝桥杯
汉克老师2 天前
[2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(1))
c++·蓝桥杯