久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1994|回復: 3
打印 上一主題 下一主題
收起左側

求分享基于單片機的濁度檢測設計資料

[復制鏈接]
跳轉到指定樓層
樓主
ID:1080331 發表于 2024-1-20 11:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:883242 發表于 2024-1-20 14:47 | 只看該作者
你先把傳感器特性搞清楚,不然沒人能做。
回復

使用道具 舉報

板凳
ID:420836 發表于 2024-1-21 08:54 | 只看該作者
請給出您對系統的設計要求、規格以及您已經掌握的一些信息,以便其他人更好地幫助您。
回復

使用道具 舉報

地板
ID:155507 發表于 2024-1-21 18:09 | 只看該作者
水的渾濁度是指水中含有的泥沙,粘土,有機物,浮游生物和微生物等懸浮
物質,造成的渾濁程度。工業級的濁度傳感器或濁度儀價格昂貴,在電子產品設
計中成本太高不適合選用;因此我們選取了一款在家用電器洗衣機、洗碗機上廣
泛應用的渾濁度傳感器,這款濁度傳感器利用光學原理,通過溶液中的透光率和
散射率來綜合判斷濁度情況。傳感器內部是一個紅外線對管,當光線穿過一定量
的水時,光線的透過量取決于該水的污濁程度,水越污濁,透過的光就越少。光
接收端把透過的光強度轉換為對應的電流大小,透過的光多,電流大,反之透過
的光少,電流小。


濁度傳感器模塊將傳感器輸出的電流信號轉換為電壓信號,通過單片機進行
AD 轉換數據處理。改款模塊具有模擬量和數字量輸出接口。模擬量可通過單片
機 A/D 轉換器進行采樣處理,以獲知當前水的污濁度。數字量可通過模塊上的
電位器調節觸發閾值,當濁度達到設置好的閾值后,D1 指示燈會被點亮,傳感
器模塊輸出由高電平變成低電平,單片機通過監測電平的變化,判斷水的濁度是
否超標,從而預警或者聯動其他設備。該模塊價格低廉、使用方便、測量精度高
可以用于洗衣機、洗碗機等產品的水污濁程度的測量;也可以用于工業現場控制,
環境污水采集等需要濁度檢測控制的場合。


* 硬件連接:
* ADC0809:OE -> P1.0; EOC -> P1.1; ST -> P1.2;CLK -> P1.3; A -> P1.4; B -> P1.5; C->P1.6;
*         OUT1~OUT8 -> P3口
* LCD1602:RS -> P0.0; RW -> P0.1; E -> P0.2;
*         D0~D7 -> P2口

* PH模塊: VCC -> 5V; GND -> GND; PO -> IN3;


/************************************************************************************
* 文件名  :main.c
* 描述    :        
* 硬件連接:
* ADC0809:OE -> P1.0; EOC -> P1.1; ST -> P1.2;CLK -> P1.3; A -> P1.4; B -> P1.5; C->P1.6;
*         OUT1~OUT8 -> P3口
* LCD1602:RS -> P0.0; RW -> P0.1; E -> P0.2;
*         D0~D7 -> P2口
* 濁度傳感器模塊: VCC -> 5V; GND -> GND; PO -> IN3;
*
* 實驗平臺:
*
**********************************************************************************/
#include <reg52.h>
#include <adc0809.h>
#include <1602.h>
#include <intrins.h>
#include <math.h>
float TU=0.0;
float TU_value=0.0;
float TU_calibration=0.0;
unsigned char disbuff[13]={0};
float temp_data=25.0;
float K_Value=3047.19;


uint num;
/**************延時1s函數***************/
void Delay_1s()
{
     unsigned char a,b,c;
    for(c=167;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
}


/**************PH值采集函數***************/
void TU_Collection()
{
        Red_0809 () ;
        TU =num * 5.0 / 256;
        TU_calibration=-0.0192*(temp_data/10-25)+TU;  
        TU_value=-865.68*TU_calibration + K_Value;
       
  if(TU_value<=0){TU_value=0;}
        if(TU_value>=3000){TU_value=3000;}
}
/**************PH值顯示函數***************/
void TU_Display()
{
   
        disbuff[0]=(int)(TU_value)/1000+'0';
        disbuff[1]=(int)(TU_value)%1000/100+'0';       
        disbuff[2]=(int)(TU_value)%100/10+'0';
        disbuff[3]=(int)(TU_value)%10+'0';


        DisplaySingleChar(0x3,1,disbuff[0]);
        DisplaySingleChar(0x4,1,disbuff[1]);
        DisplaySingleChar(0x5,1,disbuff[2]);
        DisplaySingleChar(0x6,1,disbuff[3]);
        DisplaySingleChar(0x7,1,disbuff[4]);
}


/**************主函數***************/
void main()
{        
        TMOD = 0x02; //中斷初始化,adc0809產生時鐘信號
        TH0  = 0x14;
        TL0  = 0x00;
        IE   = 0x82;
        TR0  = 1;
        P1   = 0x3f;
        LCDInit();         //LCD初始化
  DisplayString(0x0,0,"  Welcome  TU   ");
        DisplayString(0x0,1,"Detection system");
        Delay_1s();
        WriteCmd(LCD_CLS);                 //清屏
       
        DisplaySingleChar(0x0,1,'T');
        DisplaySingleChar(0x1,1,'U');
        DisplaySingleChar(0x2,1,'=');
        DisplaySingleChar(0x8,1,'p');
        DisplaySingleChar(0x9,1,'p');
        DisplaySingleChar(0x0A,1,'m');
       
        while(1)
        {
      TU_Collection();
                  TU_Display();
  }
}


void Timer0_INT() interrupt 1
{
        CLK = !CLK;

}


#ifndef ADC0809_H
#define ADC0809_H
#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char
       
extern uint num;

sbit OE  = P1^0;
sbit EOC = P1^1;
sbit ST  = P1^2;
sbit CLK = P1^3;

void Red_0809 ();

#endif


#include "adc0809.h"

void Red_0809 ()
{

        ST = 0;
        ST = 1;
        ST = 0;
        while(EOC == 0);
        OE = 1;
        num = P3;
        OE = 0;
       
}




#ifndef _1602_H
#define _1602_H
#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char
#define Busy                        0x80                                        //忙信號
#define  LCD_Data             P2       
#define Write                                0x00                                        //低電平寫入
#define Read                                0x01                                        //高電平讀出
#define Data                                0x01                                        //高電平選擇數據
#define Cmd                                    0x00                                        //低電平選擇命令

#define Enable                            0x00                                        //躍變到低電平時執行命令
#define Disable                            0x01   
#define True                                0x01
#define False                                0x00
#define LCD_Init                        0x38                                        //初始化模式                                                       
#define LCD_DispCtr                    0x0C                                        //開顯示及光標設置
#define LCD_CloseCtr                0x08                                        //關顯示
#define LCD_CLS                        0x01                                        //清屏幕
#define LCD_EnterSet                   0x06                                        //顯示光標

sbit LCD_RS                          =P0^0;                                        //數據命令選擇端
sbit LCD_RW                          =P0^1;                                   //讀寫控制端
sbit LCD_E                           =P0^2;                                        //執行使能端


/*-------------------------------  LCD模塊 -------------------------------------*/
void LCDInit(void);                                                                //LCD初始化
void SetWriteCmd(void);                                                                //設置寫命令模式
void SetReadCmd(void);                                                                //設置讀命令模式
void SetWriteData(void);                                                        //設置寫數據模式
void WriteCmd(char cmd);                                                        //寫命令
void WriteData(char ddata);                                                        //寫數據
void ExecuteCmd(void);                                                                //執行命令
void SetXY(char x,char y);                                                        //定位顯示地址
void DisplaySingleChar(char x,char y,char cchar);                //顯示單個字符
void DisplayString(char x,char y,char *str);                         //顯示一段字符串
void Delay(unsigned int time);                                                //延時主程序
void DelayUs(unsigned int time);                                                //延時子程序
//void delay500ms(void) ;
bit  IsBusy(void);                                                                        //判斷忙標志函數
void DisplayTime(void);                                                                //顯示時間
void DisplayAVGSpeed(void);                                                        //顯示平均速度
void DisplayDistance(void);                                                        //顯示路程
void DelayUs(unsigned int time);        //延時函數



#endif


#include "1602.h"

void Delay(unsigned int time)
{
    unsigned int timeCounter = 0;
        for (timeCounter = time;timeCounter > 0 ;timeCounter --)
                DelayUs(255);
}

void DelayUs(unsigned int time)
{
        unsigned int timeCounter = 0;
        for (timeCounter = 0;timeCounter < time;timeCounter ++)
                _nop_();
}

/*---------------------------------  LCD初始化函數--------------------------------------*/

void LCDInit(void)
{
    //三次顯示模式設置
        LCD_Data=0;
        LCD_E=Disable;
        Delay(5);
        WriteCmd(LCD_Init);
        Delay(5);
        WriteCmd(LCD_Init);
        Delay(5);
        WriteCmd(LCD_Init);

        WriteCmd(LCD_Init);                                                           //初始化
        WriteCmd(LCD_CloseCtr);                                                        //關顯示
        WriteCmd(LCD_CLS);                                                                //清屏幕
        WriteCmd(LCD_EnterSet);                                                        //光標移動設置
        WriteCmd(LCD_DispCtr);                                                        //顯示開以及光標設置
       
}

/*---------------------------------  LCD模式設置函數--------------------------------------*\
       
        SetWriteCmd()                                  設置LCD為寫命令模式
        SetReadCmd()                                       設置LCD為讀命令模式
        SetWriteData()                                設置LCD為寫數據模式
       
\*----------------------------------------------------------------------------------------*/
void SetWriteCmd(void)
{
        LCD_RW=Write;
        LCD_RS=Cmd;
}

void SetReadCmd(void)
{
        LCD_RW=Read;
        LCD_RS=Cmd;
}

void SetWriteData(void)
{
        LCD_RW=Write;
        LCD_RS=Data;
}

/*---------------------------------  LCD功能執行函數--------------------------------------*\
       
        WriteCmd()                                        寫命令
        WriteData()                                        寫數據
        ExecuteCmd()                                        執行命令
        SetXY()                                                顯示定位
        DisplaySingleChar()                        顯示單個字符
        DisplayString()                                顯示一串字符
        IsBusy()                                                忙標志檢測
\*----------------------------------------------------------------------------------------*/
void WriteCmd(char cmd)
{
        while(IsBusy());
        LCD_Data=cmd;       
        SetWriteCmd();
        ExecuteCmd();
}

void WriteData(char ddata)
{
        while(IsBusy());
        LCD_Data=ddata;
        SetWriteData();       
        ExecuteCmd();
}

void ExecuteCmd(void)
{
        LCD_E=Enable;
        LCD_E=Disable;
}

void SetXY(char x,char y)
{
        if (y)
                x|=0x40;
        x|=0x80;
        Delay(5);
        WriteCmd(x);

}

void DisplaySingleChar(char x,char y,char cchar)
{
        Delay(5);
        SetXY(x,y);
        WriteData(cchar);       
}

void DisplayString(char x,char y,char *str)
{
        while(*str)
        {
                Delay(5);
                DisplaySingleChar(x++,y,*str);
                str++;
        }
}

bit IsBusy(void)
{
        LCD_Data=0xFF;
        SetReadCmd();
        ExecuteCmd();
        return (bit)(LCD_Data & 0x80);       
}




回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产久| 欧美日韩1区2区 | 免费一区二区 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 国产一级电影在线观看 | 免费欧美| 国产亚洲精品久久久久动 | 国产在线观看网站 | 久久一区二区三区四区 | 欧美三区视频 | 在线观看国产www | 伊人二区| 狠狠色狠狠色综合系列 | 欧美日韩视频在线第一区 | 91久久精品国产91久久性色tv | 成人免费在线观看 | 国产传媒在线观看 | 亚洲精品久久久 | 四虎影音 | 亚洲97 | 久久久噜噜噜久久中文字幕色伊伊 | 日韩国产一区 | av在线一区二区三区 | 欧美日韩一区二区电影 | 91视频国产精品 | 超碰在线人| 丝袜一区二区三区 | 国产精品99久久久久久动医院 | 全免费a级毛片免费看视频免费下 | 国产传媒 | 久久国产精品一区二区三区 | 九色在线 | 91国在线高清视频 | 国产精品免费观看 | 一级免费a | 午夜精品一区二区三区在线视频 | 日本a级大片 | 午夜精品久久久久久久星辰影院 | 国产欧美日韩 | 97精品一区二区 | 国产资源在线播放 |