蓝桥杯2015第六届嵌入式详解

目录

整体代码

key和led

LCD

IIC

UART(串口),

ADC

RTC


本次教程以G431新板子为例,我们基于HAL库进行编写程序,这样能大大提高效率

题目:电压测量监控设备(2015年省赛真题)

大家可以去官网寻找题目的具体要求,保证可观性,我只截取部分截图

首先我们分为五部分进行讲解,led和key,lcd,iic,uart(串口),ADC,RTC

话不多说,先附上主函数(main.c)整体代码

整体代码

#include "main.h"
#include "lcd\lcd.h"
#include "adc\bsp_adc.h"
#include "uart\bsp_uart.h"
#include "iic\bsp_iic.h"
#include "rtc\bsp_rtc.h"
#include "led_key\bsp_led_key.h"
#include "stdio.h"
#include "string.h"


__IO uint32_t uwTick_led_key,uwTick_lcd,uwTick_led,uwTick_uart;
uint8_t key_down,key_up,key_old;
float  elctrct_V;

uint8_t led_open=1;

/*变量定义区*/
uint8_t meauc[30];//字符显示存放区

uint8_t lenth,led_land,ucled_vuale=0,lcd_land=0,key_Stat=0;//标志位

uint8_t k_vule[1]={1},time[3];//读取和写入EEPROM暂时缓冲区

uint8_t hour,mulits,musec;//时-分-秒


uint8_t hour_work=0,mulits_work=0,musec_work=0;//原始判断值

RTC_TimeTypeDef get_time;
RTC_DateTypeDef get_data;



//串口相关
uint8_t   rxbuffer;//缓存
uint8_t cout=0;//计数
char buffer_uart[16]; //存数据的地方

/*子函数声明区*/
void lcd_project(void);
void led_key_project(void);
void SystemClock_Config(void);
uint16_t Get_adc_vuele(void);
void uart_project(void);





int main(void)
{

    HAL_Init();
    SystemClock_Config();
    ADC2_Init();
    I2CInit();
	led_key_Init();
	RTC_Init();
	UART_Init();
	led_play(0x00);
	LCD_Init();
	
	HAL_UART_Init(&huart1);//可不加
	HAL_RTC_Init(&hrtc);//可不加
	HAL_ADC_Init(&hadc2);//可不加
	
    Read_EEprom(k_vule,0 , 1);
	HAL_Delay(10);
	
	/***保证EEPROM里面的值合理
	(当把代码烧进一个陌生的板子(EEPROM区域的值不确定为多少),我们将EEPROM里面值初始化)***/
	if(k_vule[0] >9&&k_vule[0] <1) 	{
	k_vule[0]=1;
	write_EEprom(k_vule,0 , 1);
	HAL_Delay(10);
	Read_EEprom(k_vule,0 , 1);
	}
//设置lcd屏幕
	LCD_SetBackColor(Black);
	LCD_SetTextColor(White);
  LCD_Clear(Black); 
//开始进行中断接收
	UART_Start_Receive_IT(&huart1, (uint8_t*)&rxbuffer,1);

	
	while (1)
  {
     led_key_project();
     lcd_project();
		 uart_project();
  }

}




//获取ADC的值
uint16_t Get_adc_vuele(){
uint16_t   vual;
HAL_ADC_Start(&hadc2);
vual=	HAL_ADC_GetValue(&hadc2);
return vual;
}


void led_work(){

	if(uwTick-uwTick_led<200)return;
	uwTick_led =uwTick;

	ucled_vuale ^=0x01;
	
led_play(ucled_vuale);
	
}

void led_key_project(){

	
	if(uwTick-uwTick_led_key<50)return;
	uwTick_led_key =uwTick;
	
	
     uint8_t vuele;

     vuele = key_play();
     key_down=vuele&(vuele^key_old);
     key_up=~vuele&(vuele^key_old);
	   key_old =vuele;
	
	 switch (key_down){
	
		case 1:
			
			led_open^=0x01;
		
		break;
		
		case 2:
		lcd_land^=0x01;
		LCD_Clear(Black); 
		hour_work  =t
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值