国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于51單片機的數(shù)字電容容值測量儀proteus仿真原理圖PCB

這篇具有很好參考價值的文章主要介紹了基于51單片機的數(shù)字電容容值測量儀proteus仿真原理圖PCB。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

功能介紹:
0.本系統(tǒng)采用STC89C52作為單片機
1.系統(tǒng)支持15pF~450uF電容測量
2.按鍵可更改測量量程
3.除了采用LCD1602可以實時顯示測量參數(shù),同時具有LED可以顯示各個檔位
4.該方案電容容值測量原理是基于NE555振蕩電路來設計的

原理圖:
ne555測電容,51單片機,proteus,單片機
ne555測電容,51單片機,proteus,單片機

PCB:
ne555測電容,51單片機,proteus,單片機

主程序:

#include <reg52.h>
#include "lcd1602.h"
#include "delay.h"

sbit VO = P3^2; // 用于檢測P3.2口的值,計算時間。  計時器0的開與斷
sbit TR = P3^7; // 產(chǎn)生一個低電平脈沖
                  // 超量程提示燈
sbit BUZZER = P2^0;

sbit RELAY1 = P1^5; // 用于控制繼電器,實現(xiàn)檔位選擇
sbit RELAY2 = P1^6;
sbit RELAY3 = P1^7;

sbit KEY1 = P3^4; // 獨立按鍵部分,用于用戶選擇量程

sbit LED1 = P2^1; // 量程提示燈
sbit LED2 = P2^2;
sbit LED3 = P2^3;
sbit LED4 = P2^4;

unsigned int tw = 0; // 用于獲取定時器的數(shù)值

float ftemp = 0; // 用于計算電容值的中間變量

unsigned long int c = 0; // 存放電容值

bit measureFlag = 0;                        // 需要測量時置1,一次測量結(jié)束置0
unsigned char R = 1;                        // 表示不同的檔位
unsigned char finishFlag = 0;                   // 數(shù)據(jù)處理結(jié)束置1
unsigned char temp[8];                      // 存放電容值的各個位

void Timer0_Init(); // 定時器0  初始化
void Ext1_Init(); // 外部中斷1  初始化
void Process(unsigned long int c); // 數(shù)據(jù)處理函數(shù)
void Key_Scan();                   // 鍵盤掃描函數(shù)
void Mode_Select(unsigned char R);   //	量程指示燈函數(shù)
void Disp(unsigned char *p);


void main()
{
    BUZZER = 1;      // 超量程蜂鳴器關閉
    TR = 1;
    measureFlag = 0; // 一開始無需測量
    finishFlag = 0;

    Timer0_Init(); // 初始化
    Ext1_Init();
    LCD_Init();
    LCD_DispStr(0, 0, "please press key");
    LCD_DispStr(0, 1, "     to measure ");
    Mode_Select(R);
    while (1)
    {
        if (measureFlag == 1)
        {                // 當需要測量時
            if (VO == 0) // VO == 0時檢測計數(shù)器的值可能還沒開始計數(shù),可能計數(shù)結(jié)束
            {
                if (TH0 != 0x00 || TL0 != 0x00) // 是計數(shù)結(jié)束 若有讀數(shù),用tw 存下
                {
                    tw = TH0 << 8;
                    tw = tw | TL0;
                    TH0 = 0x00; // 一次結(jié)束,計時器清零
                    TL0 = 0x00;
                    measureFlag = 0; // 需要再次測量時,measureFlag置1.避免tw的值被更//改   即不需要測量時,一直保持
                    EX1 = 1;         // 開外部中斷1
                }
                else // 反之,證明沒有計數(shù),無電容,默認值tw置0
                {
                    tw = 0;
                }
            }

            ftemp = tw / 1.0; // 計算電容值   根據(jù)公式 tw = 1.0 * R * C

            c = (unsigned long int)(ftemp)*100; //擴大了一百倍   便于后續(xù)程序
                                                //取兩位小數(shù)點
            Process(c);                         // 調(diào)用數(shù)據(jù)處理函數(shù),根據(jù)不同的R值進行處理
        }
        DelayMs(10);
        if (finishFlag == 1) // 數(shù)據(jù)處理結(jié)束   每次處理結(jié)束,證明需要更新顯示的數(shù)據(jù)
        {
            
            if (tw >= 50000 || BUZZER == 0) // 量程超出
            {
                LCD_DispStr(0, 0, " range is higher");
                LCD_DispStr(0, 1, "                ");
                BUZZER = 0;
            }
            else if (tw <= 100 && BUZZER == 1) //量程太低
            {
                LCD_DispStr(0, 0, " range is lower ");
                LCD_DispStr(0, 1, "                ");
                BUZZER = 0;
            }
            else
            {
                LCD_DispStr(0, 0, "The value of Cap");
                Disp(temp);
            }
            finishFlag = 0;
        }
        
        Key_Scan();
    }
}

void Timer0_Init() // 定時器0  初始化
{
    TMOD = 0x09; // gate置1,方式1,16位計時,定時器由P3.2控制開斷
    TH0 = 0x00;
    TL0 = 0x00;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void Ext1_Init() // 外部中斷1  初始化
{
    EA = 1;
    IT1 = 1; // 下降沿觸發(fā)
    EX1 = 1;
}

void Timer0_Interrupt() interrupt 1 // 定時器0中斷  用于超量程提示
{
    BUZZER = 0;
}

void Ext1_Interrupt() interrupt 2 // 外部中斷1  啟動測量按鍵按下,用于產(chǎn)生低脈沖,啟動555定時器
{
    unsigned char a;
    TR = 1; // tr端一個負脈沖
    a = 1;
    while (--a)
        ;
    TR = 0;
    a = 20;
    while (--a)
        ;
    TR = 1;          // tr端負脈沖結(jié)束	   大約40us的負脈沖
    measureFlag = 1; // 表示需要測量
    BUZZER = 1;      // 關閉先前的超量程提示
    EX1 = 0;         // 暫時關閉外部中斷,一次測量結(jié)束,再開放外部中斷
}

void Disp(unsigned char *p) // 顯示數(shù)據(jù)
{
	unsigned char i;
	LCD_LocateXY(3, 1);
	for (i = 0; i < 6; i++)
	{
		if (4 == i)
		{
			LCD_WriteData(0x2e);
		}
		LCD_WriteData('0' + (*p));
		p++;
	}
}

void Process(unsigned long int c)
{
    if (R == 1) // 10M	 的電阻		   量程10pf ~ 5000pf
    {
        c = c / 10;
        LCD_LocateXY(10, 1);
        LCD_WriteData(' ');
        LCD_WriteData('p');
        LCD_WriteData('f');
        LCD_WriteData(' ');
        LCD_WriteData(' ');
    }
    if (R == 2) // 100k 的電阻	       量程5nf~ 500nf
    {
        c = c / 100;
        LCD_LocateXY(10, 1);
        LCD_WriteData(' ');
        LCD_WriteData('n');
        LCD_WriteData('f');
        LCD_WriteData(' ');
        LCD_WriteData(' ');
    }
    if (R == 3) // 1k歐姆 的電阻		   量程0.5uf ~ 50uf
    {
        c = c / 1000; // 擴大了一百倍 單位  c = tw/500   uf
        LCD_LocateXY(10, 1);
        LCD_WriteData(' ');
        LCD_WriteData('u');
        LCD_WriteData('f');
        LCD_WriteData(' ');
        LCD_WriteData(' ');
    }
    if (R == 4) // 100歐姆 的電阻		   量程50uf ~ 500uf
    {
        c = c / 100; // 擴大了一百倍 單位  c = tw/500   uf
        LCD_LocateXY(10, 1);
        LCD_WriteData(' ');
        LCD_WriteData('u');
        LCD_WriteData('f');
        LCD_WriteData(' ');
        LCD_WriteData(' ');
    }
    temp[0] = c / 100000;     // 千位
    temp[1] = c / 10000 % 10; // 百位
    temp[2] = c / 1000 % 10;  // 十位
    temp[3] = c / 100 % 10;   // 個位
    temp[4] = c / 10 % 10;
    temp[5] = c % 10;
    finishFlag = 1;
}
void Key_Scan()
{
    if (KEY1 == 0)
    {
        DelayMs(10);
        if (KEY1 == 0) //  b3按下
        {
            while (KEY1 == 0)
                ;

            if (R == 4)
            {
                R = 0;
            }
            R++;
            Mode_Select(R);

            BUZZER = 1;
            LCD_DispStr(0, 0, "please press key");
            LCD_DispStr(0, 1, "     to measure ");
        }
    }
}
void Mode_Select(unsigned char R)
{
    if (1 == R)
    {
        LED1 = 1;
        LED2 = 1;
        LED3 = 1;
        LED4 = 0;
        RELAY1 = 0;
        RELAY2 = 0;
        RELAY3 = 0;
    }
    if (2 == R)
    {
        LED1 = 1;
        LED2 = 1;
        LED3 = 0;
        LED4 = 1;
        RELAY1 = 1;
        RELAY2 = 1;
        RELAY3 = 0;
    }
    if (3 == R)
    {
        LED1 = 1;
        LED2 = 0;
        LED3 = 1;
        LED4 = 1;
        RELAY1 = 0;
        RELAY2 = 0;
        RELAY3 = 1;
    }
    if (4 == R)
    {
        LED1 = 0;
        LED2 = 1;
        LED3 = 1;
        LED4 = 1;
        RELAY1 = 0;
        RELAY2 = 1;
        RELAY3 = 1;
    }
}

仿真演示視頻:
https://www.bilibili.com/video/BV1jd4y1M7Dy/

實物演示視頻:
https://www.bilibili.com/video/BV1fP41137BD/文章來源地址http://www.zghlxwxcb.cn/news/detail-662584.html

到了這里,關于基于51單片機的數(shù)字電容容值測量儀proteus仿真原理圖PCB的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于51單片機的555定時器測電容proteus仿真

    基于51單片機的555定時器測電容proteus仿真

    一、555定時器構(gòu)成多諧振蕩器 由555定時器構(gòu)成的多諧振蕩器如下圖所示, ? 工作原理:電路沒有穩(wěn)態(tài),只有兩個暫穩(wěn)態(tài),也不需要外加觸發(fā)信號,利用電源VCC通過R1和R2向電容器C充電,使Uc逐漸升高,升到2VCC/3時,Uo跳變到低電平,放電端D導通,這時,電容器C通過電阻R2和

    2024年02月06日
    瀏覽(23)
  • 51單片機汽車胎壓大氣氣壓測量儀仿真設計_數(shù)碼管顯示(代碼+仿真+設計報告+講解)

    51單片機汽車胎壓大氣氣壓測量儀仿真設計_數(shù)碼管顯示(代碼+仿真+設計報告+講解)

    (代碼+仿真+設計報告+講解) 仿真原版本:proteus 7.8 程序編譯器:keil 4/keil 5 編程語言:C語言 設計編號:S0018 本課程設計用MPX4115傳感器來檢測壓力參數(shù),ADC0832進行模數(shù)轉(zhuǎn)換后,利用單片機AT89C52進行數(shù)據(jù)處理后,用四個八段數(shù)碼管顯示壓力值。壓力測量的量程在15.3KPA~114.9KPA,

    2024年02月08日
    瀏覽(22)
  • 【基于51單片機的數(shù)字鐘】

    掌握單片機 C 語言判斷語句、分支語句以及子程序調(diào)用等編程知識 此程序調(diào)試時間方式為先暫停再調(diào)時,故有調(diào)秒的功能。 (1) 實現(xiàn)正確穩(wěn)定地顯示小時(兩位數(shù))、分鐘(兩位數(shù))、秒鐘(兩位數(shù)),同時數(shù) 碼管應無閃爍問題 (2) 通過按鍵分別實現(xiàn)時、分、秒信息的調(diào)整,方便用戶

    2024年02月11日
    瀏覽(20)
  • 基于51單片機的數(shù)字時鐘設計

    基于51單片機的數(shù)字時鐘設計

    目錄 一、總體概述 1、計時控制方案 2、主控制器模塊 3、顯示電路模塊 4、調(diào)試按鍵模塊 5、電源模塊 6、鬧鐘聲光報警模塊 二、系統(tǒng)總體結(jié)構(gòu) 1.電路圖 三、系統(tǒng)的硬件設計與實現(xiàn) 1、電源電路 2、顯示電路 3、單片機基本電路 4、按鍵電路 四、功能測試及結(jié)果分析 五、程序附

    2024年02月07日
    瀏覽(21)
  • 基于51單片機的數(shù)字電子鐘

    基于51單片機的數(shù)字電子鐘

    目錄 摘? 要 1.課程設計任務 1.1課程設計題目 1.2設計的要求? 2.設計總體方案 2.1初步設計方案 2.2芯片的選型 2.2.1時鐘芯片的選擇 2.2.2溫度傳感器的選擇 2.2.3顯示電路的選擇 2.2.4輸入按鍵的選擇 2.2.5控制電路芯片的選擇 2.3總體方案 3.單元模塊設計 3.1顯示模塊 3.2按鍵模塊 3.3蜂

    2024年02月12日
    瀏覽(26)
  • 基于51單片機的數(shù)字電壓表設計

    基于51單片機的數(shù)字電壓表設計

    簡介 1、數(shù)字電壓表簡稱DVM,數(shù)字電壓表基本原理是將輸入的模擬電壓信號轉(zhuǎn)化為數(shù)字信號,再進行輸出顯示。而A/D轉(zhuǎn)換器的作用是將連續(xù)變化的模擬信號量轉(zhuǎn)化為離散的數(shù)字信號,器基本結(jié)構(gòu)是由采樣保持,量化,編碼等幾部分組成。因此AD轉(zhuǎn)換是此次設計的核心元件。輸入

    2024年02月05日
    瀏覽(25)
  • 基于51單片機的數(shù)字溫度計【開源】

    基于51單片機的數(shù)字溫度計【開源】

    (1)溫度實時顯示(LCD2864) (2)溫度上限下線調(diào)節(jié) (3)萬年歷功能 (4)超溫報警 (5)年月日時分秒可調(diào)節(jié) (6)溫度測量精度0.0625℃ (7)節(jié)日自動判定 STC89c52,DS18B20,DS1302,按鍵模塊。LCD12864 main.c LCD12864.c ( 主要一些延時和LCD12864的驅(qū)動) LCD12864.h (主要一些函數(shù)的聲

    2024年02月10日
    瀏覽(23)
  • 畢設--基于51單片機數(shù)字電壓表的設計

    畢設--基于51單片機數(shù)字電壓表的設計

    注:本畢設資源可在微信公眾號:“Kevin的學習站” 中獲取! 3.1、基本功能 利用51單片機作為主控芯片,模擬量輸入范圍直流0v-5v。模擬量經(jīng)A/D(ADC0809)模數(shù)轉(zhuǎn)換芯片,把模擬量轉(zhuǎn)換為數(shù)字量輸入到單片機的P0口,再由單片機控制LCD1602液晶顯示模擬量輸入的電壓值。 3.2、主

    2023年04月08日
    瀏覽(21)
  • 基于單片機的一種風速測量儀的設計與制作

    基于單片機的一種風速測量儀的設計與制作

    收藏和點贊,您的關注是我創(chuàng)作的動力 ????風速、風向的測量在氣象預報、環(huán)境監(jiān)測、風力發(fā)電、航空航天等領域中有著重要意義。隨著傳感器技術、微處理器技術和網(wǎng)絡通信技術的發(fā)展,相比傳統(tǒng)的人工觀測,數(shù)字化、智能化的氣象儀器在觀測精度、速度和穩(wěn)定性等方

    2024年01月17日
    瀏覽(24)
  • 基于51單片機數(shù)字頻率計的設計與實現(xiàn)

    基于51單片機數(shù)字頻率計的設計與實現(xiàn)

    目錄 第一章 系統(tǒng)原理與總體設計 1.1系統(tǒng)組成 1.2系統(tǒng)原理 1.3測量原理 1.4頻率測量與總體設計 第二章 硬件電路設計 2.1硬件電路框圖 2.2數(shù)字頻率計原理圖 2.3硬件電路設計 第三章 軟件程序設計 3.1程序流程圖 3.2顯示電路程序設計 3.3 定時器初始化程序設計 3.4中斷控制程序設計

    2024年02月08日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包