基于STM32单片机光照检测控制系统-proteus仿真-源程序

一、系统方案
本设计采用STM32单片机作为主控器,液晶1602显示,光照强度检测、按键设置光照阀值,手动自动切换。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
u8 i;
u16 adcx;
u16 adc;
unsigned char datas[4];
InitGPIO();
LcdInit();
Adc_Init();

LcdWriteCom(0xc0);  //设置数据指针起点

for(i=0;i<16;i++)
{
	LcdWriteData(Disp_Vol[i]);	
}		 
KEY_Init();
LED_Init();

2、液晶显示程序
/*******************************************************************************

  • 函 数 名 : LcdWriteCom
  • 函数功能 : 向LCD写入一个字节的命令
  • 输 入 : com
  • 输 出 : 无
    /
    void LcdWriteCom(uchar com) //写入命令
    {
    // LCD1602_E = 0; //使能
    GPIO_ResetBits(GPIOB,GPIO_Pin_3);
    // LCD1602_RS = 0; //选择发送命令
    GPIO_ResetBits(GPIOB,GPIO_Pin_1);
    // LCD1602_RW = 0; //选择写入
    GPIO_ResetBits(GPIOB,GPIO_Pin_2);
    // LCD1602_DATAPINS = com; //放入命令
    GPIO_Write(GPIOC,0X00FF&com);
    Lcd1602_Delay1ms(1); //等待数据稳定
    // LCD1602_E = 1; //写入时序
    GPIO_SetBits(GPIOB,GPIO_Pin_3);
    Lcd1602_Delay1ms(5); //保持时间
    // LCD1602_E = 0;
    GPIO_ResetBits(GPIOB,GPIO_Pin_3);
    }
    /
  • 函 数 名 : LcdWriteData
  • 函数功能 : 向LCD写入一个字节的数据
  • 输 入 : dat
  • 输 出 : 无
    *******************************************************************************/
    void LcdWriteData(uchar dat) //写入数据
    {
    // LCD1602_E = 0; //使能清零
    GPIO_ResetBits(GPIOB,GPIO_Pin_3);
    // LCD1602_RS = 1; //选择输入数据
    GPIO_SetBits(GPIOB,GPIO_Pin_1);
    // LCD1602_RW = 0; //选择写入
    GPIO_ResetBits(GPIOB,GPIO_Pin_2);
    // LCD1602_DATAPINS = dat; //写入数据
    GPIO_Write(GPIOC,0X00FF&dat);
    Lcd1602_Delay1ms(1);

// LCD1602_E = 1; //写入时序
GPIO_SetBits(GPIOB,GPIO_Pin_3);
Lcd1602_Delay1ms(5); //保持时间
// LCD1602_E = 0;
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
}
/*******************************************************************************

  • 函 数 名 : LcdInit()

  • 函数功能 : 初始化LCD屏

  • 输 入 : 无

  • 输 出 : 无
    *******************************************************************************/
    void LcdInit() //LCD初始化子程序
    {
    LcdWriteCom(0x38); //开显示
    LcdWriteCom(0x0c); //开显示不显示光标
    LcdWriteCom(0x06); //写一个指针加1
    LcdWriteCom(0x01); //清屏
    // LcdWriteCom(0x80); //设置数据指针起点
    }
    3、按键程序
    void KEY_Scan(void)
    {

    if(KEY40) //读取K1按键状态
    {
    Delay(10);
    if(KEY4
    0)
    {
    while(KEY4==0);
    zh++;
    if(zh>50) zh=50;

      	}
      }
      if(KEY5==0)			//读取K2按键状态
      {
      	 Delay(10);
      	if(KEY5==0)
      	{
      		while(KEY5==0);
      		if(zh>1) zh--;
      	
      }
      }
      if(KEY6==0)			//读取K1按键状态
      {
      	 Delay(10);
      	if(KEY6==0)
      	{
      		while(KEY6==0);
        mode=!mode;
      		
      		
      	}
      }
      	if(KEY7==0)			//读取K1按键状态
      {
      	 Delay(10);
      	if(KEY7==0)
      	{
      		while(KEY7==0);
        if(mode==1)
      			LED1=!LED1;
      		
      	}
      }
    

}
4、核心算法程序
int main(void)
{
u8 i;
u16 adcx;
u16 adc;
unsigned char datas[4];
InitGPIO();
LcdInit();
Adc_Init();

LcdWriteCom(0xc0);  //设置数据指针起点

for(i=0;i<16;i++)
{
	LcdWriteData(Disp_Vol[i]);	
}		 
KEY_Init();
LED_Init();
while(1)
{
	
	KEY_Scan();
	adcx=Get_Adc_Average(ADC_Channel_2,10);
	
	if(mode==0)
	{
		LcdWriteCom(0x80);
	LcdWriteData('A');
	LcdWriteData('u');
		LcdWriteData('t');
	LcdWriteData('o');
			
	}

else
{
LcdWriteCom(0x80);
LcdWriteData(‘H’);
LcdWriteData(‘a’);
LcdWriteData(‘n’);
LcdWriteData(‘d’);

	}
	adcx=20*adcx*(5.0/4096);

	LcdWriteCom(0xc3);
	LcdWriteData('0'+adcx/10);
	LcdWriteData('0'+adcx%10);

	
		LcdWriteCom(0xc3+8);
	LcdWriteData('0'+zh/10);

	LcdWriteData('0'+zh%10);

if(mode==0)
{

	if((adcx<zh)&&(hw==0)) LED1=0;
	else LED1=1;
 }

}

}

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
基于STM32单片机水质检测Proteus,是一种利用STM32单片机Proteus软件实现的水质检测系统。它主要通过传感器实时监测水质指标,并利用STM32单片机对采集到的数据进行处理和分析,最终在Proteus上展示水质检测结果。 首先,需要选择合适的传感器来检测水质指标,例如PH值、溶解氧、温度等。这些传感器将通过模拟量或数字量接口连接到STM32单片机的引脚上,用于将水质信息转化为电信号。 其次,STM32单片机将连接到计算机上,并通过串口或USB接口与Proteus软件进行通信。在Proteus上编写程序,实现与STM32单片机的数据交互,通过虚拟示波器等工具,实时显示传感器采集到的水质数据。 接下来,STM32单片机将通过程序对采集到的数据进行处理和分析。可以根据实际水质指标情况,设置阈值范围,如果水质指标超过阈值,则判定为不符合要求的水质。同时,还可以利用算法对数据进行滤波和校准,提高水质检测的准确性和稳定性。 最后,将通过Proteus软件将处理后的数据在计算机屏幕上进行展示。可以自定义数据格式和界面布局,使用户方便查看水质检测结果。同时,还可以将数据保存到本地文件或远程数据库中,用于日后的分析和比较。 综上所述,基于STM32单片机水质检测Proteus可以实现水质监测系统的自动化检测和数据处理,提高了水质监测的准确性和效率,具有重要的应用价值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bbxyliyang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值