蓝桥杯嵌入式入门指南-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();

}
相关推荐
_OP_CHEN8 小时前
【算法基础篇】(二十七)从记忆化搜索到动态规划:保姆级入门指南,带你吃透 DP 核心思想!
算法·蓝桥杯·动态规划·记忆化搜索·算法竞赛·acm/icpc
爬上树顶1 天前
软件项目中的人与事
程序人生·职场和发展·蓝桥杯
魂梦翩跹如雨1 天前
P8752 [蓝桥杯 2021 省 B2] 特殊年份——Java解答
java·蓝桥杯
大聪明-PLUS1 天前
C++编程中存在的问题
linux·嵌入式·arm·smarc
_OP_CHEN1 天前
【算法基础篇】(二十六)数据结构封神!Trie 树从入门到爆杀算法题:拼音输入法、单词统计都靠它
数据结构·c++·算法·蓝桥杯·trie树·算法竞赛·acm/icpc
是苏浙2 天前
蓝桥杯备战day3
蓝桥杯
集大周杰伦2 天前
RV1126开发板烧录与SSH登录实践
linux·ssh·嵌入式·rv1126·瑞芯微开发工具·ssh 远程登录
佩奇大王2 天前
蓝桥杯 P8772
职场和发展·蓝桥杯
MounRiver_Studio2 天前
RISC-V IDE MRS2使用笔记(四):编译后静态堆栈调用分析
ide·mcu·嵌入式·risc-v
云泽8082 天前
蓝桥杯枚举算法精讲:从普通枚举到二进制枚举
算法·职场和发展·蓝桥杯