找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5878|回复: 14
收起左侧

基于stm32的水质检测源程序与Proteus仿真设计

  [复制链接]
ID:511094 发表于 2021-3-19 22:18 | 显示全部楼层 |阅读模式
STM32水质检测仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif

51hei.png I}U{{J~AO72A(POZB4PFNYT.png

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "bsp-lcd1602.h"
  3. #include "delay.h"
  4. #include "sys.h"
  5. #include "adc.h"

  6. char PH_High = 7;
  7. char zuodu_High = 50;


  8. void LED( void )
  9. {
  10.         GPIO_InitTypeDef GPIO_InitStructure;         
  11.         
  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  13.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  14.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  15.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  16.         GPIO_Init(GPIOA, &GPIO_InitStructure);        
  17.         GPIO_SetBits( GPIOA,GPIO_Pin_10 );
  18.         
  19. }


  20. int main(void)
  21. {
  22.   int ADC_num;
  23.         int temp1,temp2;
  24.         
  25.         ADC1_GPIO_Config();
  26.   ADC_Config();           
  27.         LCD1602_Init();
  28.         LCD1602_ShowStr(0,1,"zd_S:50% PH_S:7",15);
  29.         LCD1602_ShowStr(0,0,"zd:      PH:   ",15);
  30.         LED();
  31.         
  32.         while(1)
  33.         {
  34.                 ADC_num=Get_ADC(ADC_Channel_0);
  35.                 temp1=ADC_num*100/4096;
  36.                 LCD1602_WriteCmd( 0x80 + 3 );
  37.                 LCD1602_WriteDat( temp1/10 + 0x30 );
  38.                 LCD1602_WriteDat( temp1%10 + 0x30 );
  39.                 LCD1602_WriteDat( '%' );
  40.                
  41.                 ADC_num=Get_ADC(ADC_Channel_1);
  42.                 temp2=ADC_num*10/4096;
  43.                 LCD1602_WriteCmd( 0x80 + 13 );
  44.                 LCD1602_WriteDat( temp2 + 0x30 );
  45.                
  46.                 if(( temp1 >= 50 )||( temp2 >= 7 ))
  47.                 {
  48.                         GPIO_ResetBits( GPIOA,GPIO_Pin_10 );
  49.                 }
  50.                 else
  51.                 {
  52.                         GPIO_SetBits( GPIOA,GPIO_Pin_10 );
  53.                 }
  54.         }
  55. }


  56. 3、main函数
  57. #include "stm32f10x.h"
  58. #include "bsp-lcd1602.h"
  59. #include "delay.h"
  60. #include "sys.h"
  61. #include "adc.h"

  62. char PH_High = 7;
  63. char zuodu_High = 50;


  64. void LED( void )
  65. {
  66.         GPIO_InitTypeDef GPIO_InitStructure;         
  67.         
  68.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  69.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  70.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  71.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  72.         GPIO_Init(GPIOA, &GPIO_InitStructure);        
  73.         GPIO_SetBits( GPIOA,GPIO_Pin_10 );
  74.         
  75. }


  76. int main(void)
  77. {
  78.   int ADC_num;
  79.         int temp1,temp2;
  80.         
  81.         ADC1_GPIO_Config();
  82.   ADC_Config();           
  83.         LCD1602_Init();
  84.         LCD1602_ShowStr(0,1,"zd_S:50% PH_S:7",15);
  85.         LCD1602_ShowStr(0,0,"zd:      PH:   ",15);
  86.         LED();
  87.         
  88.         while(1)
  89.         {
  90.                 ADC_num=Get_ADC(ADC_Channel_0);
  91.                 temp1=ADC_num*100/4096;
  92.                 LCD1602_WriteCmd( 0x80 + 3 );
  93.                 LCD1602_WriteDat( temp1/10 + 0x30 );
  94.                 LCD1602_WriteDat( temp1%10 + 0x30 );
  95.                 LCD1602_WriteDat( '%' );
  96.                
  97.                 ADC_num=Get_ADC(ADC_Channel_1);
  98.                 temp2=ADC_num*10/4096;
  99.                 LCD1602_WriteCmd( 0x80 + 13 );
  100.                 LCD1602_WriteDat( temp2 + 0x30 );
  101.                
  102.                 if(( temp1 >= 50 )||( temp2 >= 7 ))
  103.                 {
  104.                         GPIO_ResetBits( GPIOA,GPIO_Pin_10 );
  105.                 }
  106.                 else
  107.                 {
  108.                 所有资料51hei提供下载:


  109.         GPIO_SetBits( GPIOA,GPIO_Pin_10 );
  110.                 }
  111.         }
  112. }
复制代码

Keil代码与Proteus仿真下载(注意版本号):
Keil5版本: 程序.7z (185.48 KB, 下载次数: 411)
回复

使用道具 举报

ID:769170 发表于 2021-3-27 14:45 | 显示全部楼层

你好,为什么我的Proteus中没有STM32F103R6这个芯片,请问您用的那个版本
回复

使用道具 举报

ID:208271 发表于 2021-3-31 22:36 | 显示全部楼层
用的PROTEUS8.9测试,程序,仿真都可用,很好,谢谢楼主分享。放心下载!
回复

使用道具 举报

ID:920329 发表于 2021-5-18 01:08 | 显示全部楼层
谢谢,请问如何模拟测量电导率。
回复

使用道具 举报

ID:883211 发表于 2021-5-18 11:31 | 显示全部楼层
水质主要是检测什么变化量?说说实现原理哈。
回复

使用道具 举报

ID:852608 发表于 2021-5-18 18:04 | 显示全部楼层
895545 发表于 2021-3-27 14:45
你好,为什么我的Proteus中没有STM32F103R6这个芯片,请问您用的那个版本

Proteus sp2才有stm103的芯片
回复

使用道具 举报

ID:865814 发表于 2021-5-24 09:43 | 显示全部楼层
895545 发表于 2021-3-27 14:45
你好,为什么我的Proteus中没有STM32F103R6这个芯片,请问您用的那个版本

proteus8
回复

使用道具 举报

ID:865814 发表于 2021-5-28 09:13 | 显示全部楼层
895545 发表于 2021-3-27 14:45
你好,为什么我的Proteus中没有STM32F103R6这个芯片,请问您用的那个版本

proteus8
回复

使用道具 举报

ID:865814 发表于 2021-5-28 09:14 | 显示全部楼层
wifingtta 发表于 2021-3-31 22:36
用的PROTEUS8.9测试,程序,仿真都可用,很好,谢谢楼主分享。放心下载!

确实不错
回复

使用道具 举报

ID:865812 发表于 2021-6-7 09:46 | 显示全部楼层
能给我解释一下代码吗
回复

使用道具 举报

ID:440028 发表于 2021-12-30 11:53 | 显示全部楼层
最好在代码后加上注释,这样便于新手理解,
回复

使用道具 举报

ID:865843 发表于 2022-4-22 15:47 | 显示全部楼层
需要使用Proteus8.8才行 不然会导致运行ad一直采集不到 一直显示0
回复

使用道具 举报

ID:160286 发表于 2022-5-3 12:07 | 显示全部楼层
需要用Proteus8.8版本才行,其他版本可能会出问题,看图
51hei.png
回复

使用道具 举报

ID:743691 发表于 2023-4-17 17:01 | 显示全部楼层
用的PROTEUS8.8测试,程序,仿真都可用,很好,谢谢楼主分享。放心下载!
回复

使用道具 举报

ID:743691 发表于 2023-4-18 19:43 | 显示全部楼层
这个告警灯是由模拟看门狗来控制的吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表