IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 草稿4324324342432 -> 正文阅读

[嵌入式]草稿4324324342432

#include "main.h"
#include "RCC\bsp_rcc.h"
#include "KEY_LED\bsp_key_led.h"
#include "LCD\bsp_lcd.h"
#include "UART\bsp_uart.h"
#include "I2C\bsp_i2c.h"
#include "ADC\bsp_adc.h"
#include "TIM\bsp_tim.h"
#include "RTC\bsp_rtc.h"

//***è???±?á?éù?÷??
//*???ù±?á?
__IO uint32_t uwTick_Key_Set_Point = 0;//????Key_Procμ??′DD?ù?è
__IO uint32_t uwTick_Led_Set_Point = 0;//????Led_Procμ??′DD?ù?è
__IO uint32_t uwTick_Lcd_Set_Point = 0;//????Lcd_Procμ??′DD?ù?è
__IO uint32_t uwTick_Usart_Set_Point = 0;//????Usart_Procμ??′DD?ù?è

//*°′?üé¨?èרó?±?á?
uint8_t ucKey_Val, unKey_Down, ucKey_Up, ucKey_Old;

//*LEDרó?±?á?
uint8_t ucLed;

//*LCD??ê?רó?±?á?
uint8_t Lcd_Disp_String[21];//×??à??ê?20??×?·?

//*′??úרó?±?á?
uint16_t counter = 0;
uint8_t str[40];
uint32_t rx_buffer;

//*EEPROMμ??à1?±?á?
uint8_t EEPROM_String_1[5] = {0x11,0x22,0x33,0x44,0x55};
uint8_t EEPROM_String_2[5] = {0};

//*4017?à1?±?á?
uint8_t RES_4017;

//*pwm?à1?±?á?
uint16_t PWM_T_Count;
uint16_t PWM_D_Count;
float PWM_Duty;


//*rtc?à1?±?á?
RTC_TimeTypeDef H_M_S_Time;
RTC_DateTypeDef Y_M_D_Date;


//***×óoˉêyéù?÷??
void Key_Proc(void);
void Led_Proc(void);
void Lcd_Proc(void);
void Usart_Proc(void);


//***?μí3?÷oˉêy
int main(void)
{

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

	/*bsp×ê?′μ?3?ê??ˉ*/
	KEY_LED_Init();
	
	LCD_Init();
	LCD_Clear(White);
  LCD_SetBackColor(White);
  LCD_SetTextColor(Blue);	
	
	UART1_Init();
	I2CInit();
  ADC1_Init();
  ADC2_Init();
	
	BASIC_TIM6_Init();
	PWM_INPUT_TIM2_Init();
	SQU_OUTPUT_TIM15_Init();
	PWM_OUTPUT_TIM3_Init();
	PWM_OUTPUT_TIM17_Init();
	



	/*íaéèê1ó??ù±?????*/	
	//*EEPROM2aê?
	iic_24c02_write(EEPROM_String_1, 0, 5);
	HAL_Delay(1);	
	iic_24c02_read(EEPROM_String_2, 0, 5);	
	
  //*MCP40172aê?
	write_resistor(0x77);
	RES_4017 = read_resistor();	
	
	//*′??ú?óê??D??′ò?a
	HAL_UART_Receive_IT(&huart1, (uint8_t *)(&rx_buffer), 4);
	
	//*′ò?a?ù±??¨ê±?÷
	HAL_TIM_Base_Start_IT(&htim6);//??100ms′¥·¢ò?′??D??
		
	//*ê?è?2???PWM???ˉ
	HAL_TIM_Base_Start(&htim2);  /* ???ˉ?¨ê±?÷ */
  HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);		  /* ???ˉ?¨ê±?÷í¨μàê?è?2???2¢?a???D?? */
  HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);		
		
	//*ê?3?·?2¨PA2òy??	
  HAL_TIM_OC_Start_IT(&htim15,TIM_CHANNEL_1);
	
	//*???ˉ?¨ê±?÷3oí?¨ê±?÷17í¨μàê?3?
  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);	//PA6
  HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);		//PA7
		
	RTC_Init();
		
  while (1)
  {
		Key_Proc();
		Led_Proc();
		Lcd_Proc();
		Usart_Proc();
		
		
		
  }

}


//***°′?üé¨?è×óoˉêy
void Key_Proc(void)
{
	if((uwTick -  uwTick_Key_Set_Point)<50)	return;//???ùoˉêy
		uwTick_Key_Set_Point = uwTick;

	ucKey_Val = Key_Scan();
	unKey_Down = ucKey_Val & (ucKey_Old ^ ucKey_Val); 
	ucKey_Up = ~ucKey_Val & (ucKey_Old ^ ucKey_Val);	
	ucKey_Old = ucKey_Val;
	
	if(unKey_Down == 4)
	{
		ucLed = 0x88;
	}
	if(unKey_Down == 3)
	{
		ucLed = 0x00;
	}	

}


//***LEDé¨?è×óoˉêy
void Led_Proc(void)
{
	if((uwTick -  uwTick_Led_Set_Point)<200)	return;//???ùoˉêy
		uwTick_Led_Set_Point = uwTick;

	LED_Disp(ucLed);
}


void Lcd_Proc(void)
{
	if((uwTick -  uwTick_Lcd_Set_Point)<100)	return;//???ùoˉêy
		uwTick_Lcd_Set_Point = uwTick;

	//*EEPROM2aê?
	sprintf((char *)Lcd_Disp_String, "EE:%x%x%x%x%x R:%x",EEPROM_String_2[0],EEPROM_String_2[1],EEPROM_String_2[2],EEPROM_String_2[3],EEPROM_String_2[4], RES_4017);
	LCD_DisplayStringLine(Line0, Lcd_Disp_String);

	//*ADC2aê?
	sprintf((char *)Lcd_Disp_String, "R38_Vol:%6.3fV",((((float)getADC1())/4096)*3.3));
	LCD_DisplayStringLine(Line1, Lcd_Disp_String);	
	
	sprintf((char *)Lcd_Disp_String, "R37_Vol:%6.3fV",((((float)getADC2())/4096)*3.3));
	LCD_DisplayStringLine(Line2, Lcd_Disp_String);	
	
	//*PWMê?è?2???2aê?£?2aá?????±èoí?μ?ê
	sprintf((char *)Lcd_Disp_String, "R40P:%05dHz,%4.1f%%",(unsigned int)(1000000/PWM_T_Count),PWM_Duty*100);
	LCD_DisplayStringLine(Line3, Lcd_Disp_String);		
	
	//*RTC?úèY??ê?
	HAL_RTC_GetTime(&hrtc, &H_M_S_Time, RTC_FORMAT_BIN);//?áè?è??úoíê±??±?D?í?ê±ê1ó?
	HAL_RTC_GetDate(&hrtc, &Y_M_D_Date, RTC_FORMAT_BIN);
	sprintf((char *)Lcd_Disp_String, "Time:%02d-%02d-%02d",(unsigned int)H_M_S_Time.Hours,(unsigned int)H_M_S_Time.Minutes,(unsigned int)H_M_S_Time.Seconds);
	LCD_DisplayStringLine(Line4, Lcd_Disp_String);		

}

void Usart_Proc(void)
{
//	if((uwTick -  uwTick_Usart_Set_Point)<1000)	return;//???ùoˉêy
//	uwTick_Usart_Set_Point = uwTick;
//	
//	sprintf(str, "%04d:Hello,world.\r\n", counter);
//	HAL_UART_Transmit(&huart1,(unsigned char *)str, strlen(str), 50);
//	
//	if(++counter == 10000)
//		counter = 0;
}


//′??ú?óê??D????μ÷oˉêy
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//	counter++;
//	sprintf(str, "%04d:Hello,world.\r\n", counter);
//	HAL_UART_Transmit(&huart1,(unsigned char *)str, strlen(str), 50);	
//	
//	HAL_UART_Receive_IT(&huart1, (uint8_t *)(&rx_buffer), 4);

}



//?ù±??¨ê±?÷6?üD???μ÷oˉêy
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM6)
  {
		if(++counter == 10)
		{
			counter = 0;
			sprintf(str, "Hello,world.\r\n");
			HAL_UART_Transmit(&huart1,(unsigned char *)str, strlen(str), 50);	
		}
	}
}


//ê?è?2???PWM?D????μ÷
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	  if(htim->Instance==TIM2)
  {
				if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
			{
				PWM_T_Count =  HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1)+1;
				PWM_Duty = (float)PWM_D_Count/PWM_T_Count;
			}
				else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
			{
				PWM_D_Count =  HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2)+1;
			}			
	}	
}




//·?2¨ê?3???μ÷oˉêy
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance==TIM15)
  {
				if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
			{			
			  __HAL_TIM_SET_COMPARE(htim,TIM_CHANNEL_1,(__HAL_TIM_GetCounter(htim)+500));//1Khz
			}
	}
}







/******************************************************************************
/******************************************************************************
/******************************************************************************
/******************************************************************************
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
}


//???ó×??oμ?′ú??£?Dèòaê??ˉD′


//24C02μ??à1?′ú??
void iic_24c02_write(uint8_t *pucBuf, uint8_t ucAddr, uint8_t ucNum)
{
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(ucAddr);	
	I2CWaitAck();
	
	while(ucNum--)
	{
		I2CSendByte(*pucBuf++);
		I2CWaitAck();	
	}
	I2CStop();
	delay1(500);	
}


void iic_24c02_read(uint8_t *pucBuf, uint8_t ucAddr, uint8_t ucNum)
{
	I2CStart();
	I2CSendByte(0xa0);
	I2CWaitAck();
	
	I2CSendByte(ucAddr);	
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0xa1);
	I2CWaitAck();
	
	while(ucNum--)
	{
		*pucBuf++ = I2CReceiveByte();
		if(ucNum)
			I2CSendAck();	
		else
			I2CSendNotAck();
	}
	I2CStop();	
}

//MCP4017μ??à1?′ú??
void write_resistor(uint8_t value)
{
	I2CStart();
	I2CSendByte(0x5E);
	I2CWaitAck();
	
	I2CSendByte(value);
	I2CWaitAck();	
	I2CStop();	
}

uint8_t read_resistor(void)
{
	uint8_t value;
	I2CStart();
	I2CSendByte(0x5F);
	I2CWaitAck();
	
	value = I2CReceiveByte();
	I2CSendNotAck();	
	I2CStop();	
	
	return value;
}



  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:35:53  更:2022-05-11 16:36:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 13:02:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码