基于stm32f103c8t6浊度计

本文档介绍了一款基于STM32F103C8T6的浊度计设计,硬件包括IR333光源、红外接收管、放大电路和LCD1602显示模块。软件部分详细阐述了通过STM32CubeMX配置的ADC通道函数、LCD1602的初始化、写命令和读数据函数等,实现了数据的采集和显示。
摘要由CSDN通过智能技术生成
                                                                           基于stm32f103c8t6浊度计

前言

本次设计的基于stm32f103c8t6浊度计主要由硬件部分加软件部分组成
硬件部分主要是IR333光源发射部分+红外接收管光源接受部分+放大电路+stm32f103c8t6主控芯片+lcd1602显示模块组成
软件部分主要是通过stm32cubemx配置管脚之后添加adc通道函数、lcd1602写命令函数、lcd1602读数据函数等生成的

一、硬件部分

发射接收及放大电路硬件部分:
在这里插入图片描述
LCD102显示硬件部分:
在这里插入图片描述
其中最主要的是信号放大电路,由于红外接收管接受的光信号过小,所以在他输入ad转换器之前必须进行信号的放大放大芯片可以选用LM324,部分仿真图如下图所示:
在这里插入图片描述

二、软件部分(主要函数块及总代码)

1.主函数部分

int main(void)
{
/* USER CODE BEGIN 1 */

/* USER CODE END 1 /
/
MCU Configuration--------------------------------------------------------*/

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

/* USER CODE BEGIN Init */

/* USER CODE END Init */

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

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals /
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
/
USER CODE BEGIN 2 */

HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1,ADC_ConvertedValue,1);


HAL_Delay(400);  //延时400ms,等液晶稳定

Lcd_Init(); // 液晶初始化函数*,设置液晶的工作模式*
unsigned char IN[]={0x20,0x20,0x20,0x20,0x44,0x69,0x67,0x69,
0x74,0x61,0x6c,0x3a};

unsigned char UN[]={0x20,0x20,0x20,0x20,0x41,0x6e,0x61,0x6c,
0x6f,0x67,0x3a,0x20};
//uint8_t num[10] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //0-9
/* USER CODE END 2 */

/* Infinite loop /
/
USER CODE BEGIN WHILE */
unsigned char i;
unsigned int tmp;
for(i=0;i<12;i++)
{
Lcd_Write_Command(0x80+i,1) ; //定位
Lcd_Write_Data((IN[0+i])); //写显示数据
HAL_Delay(1); //延时10ms
}
for(i=0;i<11;i++)
{
Lcd_Write_Command(0xc0+i,1) ; //定位
Lcd_Write_Data(UN[0+i]); //写显示数据
HAL_Delay(1); //延时10ms
}

while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */  
 Lcd_Write_Command(0x80+12,1);//Lcd_Write_Command(0x92,1);
Lcd_Write_Data(ADC_ConvertedValue[0]/1000+0x30);
  Lcd_Write_Command(0x80+13,1);
Lcd_Write_Data((ADC_ConvertedValue[0]%1000)/100+0x30);
  Lcd_Write_Command(0x80+14,1);
Lcd_Write_Data((ADC_ConvertedValue[0]%100)/10+0x30);
  Lcd_Write_Command(0x80+15,1);
Lcd_Write_Data(ADC_ConvertedValue[0]%10+0x30);

tmp=(unsigned int)(ADC_ConvertedValue[0]3.31000/4095);
Lcd_Write_Command(0xc0+11,1);
Lcd_Write_Data(tmp/1000+0x30);
Lcd_Write_Command(0xc0+13,1);
Lcd_Write_Data((tmp%1000)/100+0x30);
Lcd_Write_Command(0xc0+12,1);
Lcd_Write_Data(0x2e);
Lcd_Write_Command(0xc0+14,1);
Lcd_Write_Data((tmp%100)/10+0x30);
Lcd_Write_Command(0xc0+15,1);
Lcd_Write_Data(tmp%10+0x30);
}
/* USER CODE END 3 */
}

2.1602显示字符代码

unsigned char IN[]={0x20,0x20,0x20,0x20,0x44,0x69,0x67,0x69,
0x74,0x61,0x6c,0x3a};

unsigned char UN[]={0x20,0x20,0x20,0x20,0x41,0x6e,0x61,0x6c,
0x6f,0x67,0x3a,0x20};
//uint8_t num[10] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //0-9
/* USER CODE END 2 */

/* Infinite loop /
/
USER CODE BEGIN WHILE */
unsigned char i;
unsigned int tmp;
for(i=0;i<12;i++)
{
Lcd_Write_Command(0x80+i,1) ; //定位
Lcd_Write_Data((IN[0+i])); //写显示数据
HAL_Delay(1); //延时10ms
}
for(i=0;i<11;i++)
{
Lcd_Write_Command(0xc0+i,1) ; //定位
Lcd_Write_Data(UN[0+i]); //写显示数据
HAL_Delay(1); //延时10ms
}

3.1602初始化函数

void Lcd_Init( void ) //初始化
{
Lcd_Write_Command( 0x38,1); //显示模式设置
Lcd_Write_Command( 0x01,1); //显示清屏
Lcd_Write_Command( 0x06,1); //显示光标移动设置
Lcd_Write_Command( 0x0C,1); //显示开、光标不显示
}

4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值