找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7521|回復(fù): 14
收起左側(cè)

基于stm32的水質(zhì)檢測源程序與Proteus仿真設(shè)計

  [復(fù)制鏈接]
ID:511094 發(fā)表于 2021-3-19 22:18 | 顯示全部樓層 |閱讀模式
STM32水質(zhì)檢測仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif

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

單片機(jī)源程序如下:
  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函數(shù)
  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. }
復(fù)制代碼

Keil代碼與Proteus仿真下載(注意版本號):
Keil5版本: 程序.7z (185.48 KB, 下載次數(shù): 428)
Proteus8.8版本: proteus.rar (118.47 KB, 下載次數(shù): 393)
回復(fù)

使用道具 舉報

ID:769170 發(fā)表于 2021-3-27 14:45 | 顯示全部樓層

你好,為什么我的Proteus中沒有STM32F103R6這個芯片,請問您用的那個版本
回復(fù)

使用道具 舉報

ID:208271 發(fā)表于 2021-3-31 22:36 | 顯示全部樓層
用的PROTEUS8.9測試,程序,仿真都可用,很好,謝謝樓主分享。放心下載!
回復(fù)

使用道具 舉報

ID:920329 發(fā)表于 2021-5-18 01:08 | 顯示全部樓層
謝謝,請問如何模擬測量電導(dǎo)率。
回復(fù)

使用道具 舉報

ID:883211 發(fā)表于 2021-5-18 11:31 | 顯示全部樓層
水質(zhì)主要是檢測什么變化量?說說實現(xiàn)原理哈。
回復(fù)

使用道具 舉報

ID:852608 發(fā)表于 2021-5-18 18:04 | 顯示全部樓層
895545 發(fā)表于 2021-3-27 14:45
你好,為什么我的Proteus中沒有STM32F103R6這個芯片,請問您用的那個版本

Proteus sp2才有stm103的芯片
回復(fù)

使用道具 舉報

ID:865814 發(fā)表于 2021-5-24 09:43 | 顯示全部樓層
895545 發(fā)表于 2021-3-27 14:45
你好,為什么我的Proteus中沒有STM32F103R6這個芯片,請問您用的那個版本

proteus8
回復(fù)

使用道具 舉報

ID:865814 發(fā)表于 2021-5-28 09:13 | 顯示全部樓層
895545 發(fā)表于 2021-3-27 14:45
你好,為什么我的Proteus中沒有STM32F103R6這個芯片,請問您用的那個版本

proteus8
回復(fù)

使用道具 舉報

ID:865814 發(fā)表于 2021-5-28 09:14 | 顯示全部樓層
wifingtta 發(fā)表于 2021-3-31 22:36
用的PROTEUS8.9測試,程序,仿真都可用,很好,謝謝樓主分享。放心下載!

確實不錯
回復(fù)

使用道具 舉報

ID:865812 發(fā)表于 2021-6-7 09:46 | 顯示全部樓層
能給我解釋一下代碼嗎
回復(fù)

使用道具 舉報

ID:440028 發(fā)表于 2021-12-30 11:53 | 顯示全部樓層
最好在代碼后加上注釋,這樣便于新手理解,
回復(fù)

使用道具 舉報

ID:865843 發(fā)表于 2022-4-22 15:47 | 顯示全部樓層
需要使用Proteus8.8才行 不然會導(dǎo)致運(yùn)行ad一直采集不到 一直顯示0
回復(fù)

使用道具 舉報

ID:160286 發(fā)表于 2022-5-3 12:07 | 顯示全部樓層
需要用Proteus8.8版本才行,其他版本可能會出問題,看圖
51hei.png
回復(fù)

使用道具 舉報

ID:743691 發(fā)表于 2023-4-17 17:01 | 顯示全部樓層
用的PROTEUS8.8測試,程序,仿真都可用,很好,謝謝樓主分享。放心下載!
回復(fù)

使用道具 舉報

ID:743691 發(fā)表于 2023-4-18 19:43 | 顯示全部樓層
這個告警燈是由模擬看門狗來控制的嗎?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表