• 方案介紹
  • 附件下載
  • 相關推薦
申請入駐 產業(yè)圖譜

基于51單片機教室燈光全自動控制設計( proteus仿真+程序+設計報告+原理圖+講解視頻)

2024/11/15
4843
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

設計資料獲取聯(lián)系方式.doc

共1個文件

仿真圖proteus7.8及以上

程序編譯器:keil 4/keil 5

編程語言:C語言

設計編號:S0075

1. 主要功能:

基于51單片機的教室燈光自動控制系統(tǒng)

1、數碼管顯示當前工作強度,光照閾值和教室人數;

2、設定值可以通過按鍵調整;

3、通過按鍵模擬紅外對射傳感器統(tǒng)計進出人數;

4、教室內是否開燈取決于光照強度,光照強度低于閾值(教室燈光暗)的時候開燈;

5、教室內開燈的數量根據教室內人數的多少設定,人數越多,開燈數量越多;

需注意仿真中51單片機芯片是兼容的,AT89C51,AT89C52是51單片機的具體型號,內核是一樣的。相同的原理圖里,無論stc還是at都一樣,引腳功能都是一樣的,程序是兼容的,芯片可以替換為STC89C52/STC89C51/AT89C52/AT89C51等51單片機芯片。

img

以下為本設計資料展示圖:

2. 講解視頻:

講解視頻包含仿真運行講解和代碼講解


基于51單片機教室燈光控制proteus仿真+程序+設計報告+原理圖+講解視頻

3. 仿真設計

打開仿真工程,雙擊proteus中的單片機,選擇hex文件路徑,然后開始仿真。開始仿真后數碼管顯示當前光照強度,光照閾值,教室人數,光照強度低于閾值即教室內燈光暗,滿足開燈條件。此時教室人數0,即教室沒有人,所以不需要開燈。

img

通過點擊按鍵進教室完成教室人數的設置,從1開始,每多十個人多開一盞燈,最多開8盞燈。

img

如果光照強度大于閾值,說明自然光足夠亮,不需要開燈。

img

4. 程序代碼

使用keil4或者keil5編譯,代碼有注釋,可以結合視頻理解代碼含義。

mian 函數

#include "reg51.h"
#include "ADC0832.h"
sbit smg1=P2^0;//數碼管引腳
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit smg5=P2^4;
sbit smg6=P2^5;
sbit k1=P1^0;//按鈕
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
unsigned char time=0;
unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
unsigned char num=0;//人數
unsigned char light=0,limit=20;//光照
unsigned char m1=0,m2=0,m3=0,m4=0;
void delay(unsigned int i)//延時
{
	while(i--);
}
void disp() 
{
    // 根據光照強度light的十位數,通過數組smgduan獲取對應的顯示數據,并將結果顯示在P0口上(假設用于連接數碼管的段選)
    P0 = smgduan[light / 10]; 
    // 清除數碼管第一位(smg1)的位選信號,使其不顯示任何數字
    smg1 = 0;
    // 延時100ms,以便觀察數碼管的顯示效果
    delay(100);
    // 設置數碼管第一位(smg1)的位選信號為1,使顯示數據生效
    smg1 = 1;
    // 根據光照強度light的個位數,通過數組smgduan獲取對應的顯示數據,并更新到P0口上
    P0 = smgduan[light % 10];
    // 清除數碼管第二位(smg2)的位選信號
    smg2 = 0;
    // 延遲100ms
    delay(100);
    // 設置數碼管第二位(smg2)的位選信號為1,使顯示數據生效
    smg2 = 1;

    // 同理,根據光照閥值limit的十位和個位數,分別顯示到數碼管的第三位和第四位
    P0 = smgduan[limit / 10];
    smg3 = 0;
    delay(100);
    smg3 = 1;
    P0 = smgduan[limit % 10];
    smg4 = 0;
    delay(100);
    smg4 = 1;

    // 根據人數num的十位和個位數,分別顯示到數碼管的第五位和第六位
    P0 = smgduan[num / 10];
    smg5 = 0;
    delay(100);
    smg5 = 1;
    P0 = smgduan[num % 10];
    smg6 = 0;
    delay(100);
    smg6 = 1;
}
// 主函數定義
void main() 
{
    // 設置定時器0的工作模式為模式1(16位定時器/計數器TMOD |= 0X01;
    // 設置定時器0的高8位初始值,這里設置的是一個特定的計數值(具體取決于晶振頻率和系統(tǒng)配置)
    TH0 = 0X3C;
    // 設置定時器0的低8位初始值,與TH0共同決定定時器的初值
    TL0 = 0XB0; 
    // 打開定時器0中斷允許位,使能定時器0中斷功能
    ET0 = 1;
    // 打開總中斷,允許單片機接收并處理所有中斷請求
    EA = 1;
    // 啟動定時器0
    TR0 = 1;
    // 進入無限循環(huán)
    while(1)
    {
        // 調用disp()函數,執(zhí)行顯示操作(如可能的話,可能是顯示當前光照閾值或人數等信息)
        disp();

        // 檢測按鍵k1狀態(tài),并在m1標記為0時調整光照閾值limit(增1)
        if(!k1 && (m1 == 0)) 
        {
            if(limit < 100) // 如果當前閾值小于最大值100
                limit++; // 閾值加1
            m1 = 1; // 標記m1為已操作,防止連續(xù)觸發(fā)
        }
        // 當按鍵k1釋放時,重置m1標記
        if(k1)
            m1 = 0;

        // 類似地檢測按鍵k2狀態(tài)并減少光照閾值limit(減1)
        if(!k2 && (m2 == 0)) 
        {
            if(limit > 0) // 如果當前閾值大于最小值0
                limit--; // 閾值減1
            m2 = 1; // 標記m2為已操作
        }
        // 當按鍵k2釋放時,重置m2標記
        if(k2)
            m2 = 0;

        // 檢測按鍵k3表示有人進入教室,當m3標記為0時增加教室內人數num(增1)
        if(!k3 && (m3 == 0)) 
        {
            if(num < 100) // 如果當前人數小于最大值100
                num++; // 人數加1
            m3 = 1; // 標記m3為已操作
        }
        // 當按鍵k3釋放時,重置m3標記
        if(k3)
            m3 = 0;

        // 檢測按鍵k4表示有人離開教室,當m4標記為0時減少教室內人數num(減1)
        if(!k4 && (m4 == 0)) 
        {
            if(num > 0) // 如果當前人數大于最小值0
                num--; // 人數減1
            m4 = 1; // 標記m4為已操作
        }
        // 當按鍵k4釋放時,重置m4標記
        if(k4)
            m4 = 0;

        // 判斷當前光照強度是否低于設定閾值limit
        if(light < limit)
        {
            // 如果教室內有人(即num>0),根據人數開啟相應數量的燈光
            if(num > 0)
                P3 = 0xff << (num / 10) + 1; // 假設每10人開一組燈,不足10人也開一組
            else
                P3 = 0xff; // 若教室內無人,則全開燈光
        }
        // 光照強度高于或等于閾值時,關閉所有燈光
        else
        {
            P3 = 0xff;
        }
    }
}

// 定義一個名為Timer0的中斷服務程序,該中斷由定時器0溢出觸發(fā)(中斷號為1)
void Timer0() interrupt 1
{
    // 判斷計數變量time是否小于10
    if(time < 10)
    {
        // 如果time小于10,則將其加1,表示時間累計增加
        time++;
    }
    else
    {
        // 如果time不小于10(即等于或大于10),則執(zhí)行以下操作:
        // 將time重置為0,重新開始計時周期
        time = 0;
        
        // 調用ADC函數進行光照強度檢測,并將返回值賦給light變量
        light = ADC();
    }
    
    // 設置定時器0的高8位和低8位初始值,以維持特定的定時周期
    // 假設此處設置的定時器初值使得定時器0每10個單位時間產生一次溢出中斷
    TH0 = 0X3C; // 設置TH0為0X3C(十六進制)對應到二進制并轉換為對應的機器周期數
    TL0 = 0XB0; // 設置TL0為0XB0(十六進制),與TH0共同決定定時器0的定時周期
} 

5. 設計報告

7608字設計報告,內容包括硬件設計軟件設計、軟硬件框圖、調試、結論等

img

本課程設計項目正是順應這一時代潮流,選擇了51系列單片機作為核心控制器元件,以其穩(wěn)定可靠、易于編程的特點來構建一套適用于教室環(huán)境的燈光自動控制系統(tǒng)。該系統(tǒng)旨在模擬真實應用場景中的光照條件變化和人員流動情況,實現精準的光線感應控制機制。具體來說,通過集成光敏傳感器實時監(jiān)測教室內的自然光線強度,并設定一個可調閾值,當實際光線低于此閾值時,系統(tǒng)將自動開啟照明設備,確保室內有足夠的光線供師生進行教學活動。

此外,為了進一步提高系統(tǒng)的智能性和實用性,本設計還特別加入了人數統(tǒng)計功能,通過按鍵模擬紅外對射傳感器的工作原理,以簡化的操作方式記錄進出教室的人數變化。這種創(chuàng)新性的設計不僅有助于精確掌握教室內學生數量,更為關鍵的是,能夠基于人數動態(tài)調整教室內燈光的數量和分布,從而實現按需照明,避免不必要的能源浪費。

6. 原理圖

原理圖使用AD繪制,可供實物參考,仿真不同于實物,需要調試經驗才能做出來。

img

Proteus仿真和實物作品的區(qū)別:

1.運行環(huán)境:Proteus仿真是在計算機上運行的,而實物則是在硬件電路板上運行。

2.調試方式:在Proteus仿真中,可以方便地進行單步調試和觀察變量值的變化,而在實物中則需要通過調試器或者串口輸出等方式進行調試。

電路連接方式:在Proteus仿真中,可以通過軟件設置進行電路連接的修改,而在實物中則需要通過硬件電路板和連接線進行修改。

3.運行速度:Proteus仿真通常比實物運行速度快,因為仿真是基于計算機運行的,而實物則需要考慮電路板上的物理限制和器件的響應時間等因素。

4.功能實現:在Proteus仿真中,可以通過軟件設置實現不同的功能,而在實物中則需要根據電路設計和器件的性能進行實現。

7. 設計資料內容清單&&下載鏈接

資料設計資料包括仿真,程序代碼、講解視頻、功能要求、設計報告、軟硬件設計框圖等。

0、常見使用問題及解決方法–必讀?。。?!

1、程序

2、proteus仿真

3、功能要求

4、軟硬件流程圖

5、開題報告

6、設計報告

7、原理圖

8、講解視頻

Altium Designer 安裝破解

KEIL+proteus 單片機仿真設計教程

KEIL安裝破解

Proteus元器件查找

Proteus安裝

Proteus簡易使用教程

單片機學習資料

相關數據手冊

答辯技巧

設計報告常用描述

鼠標雙擊打開查找嘉盛單片機51 STM32單片機課程畢業(yè)設計.url

img

資料下載鏈接(可點擊):

https://docs.qq.com/doc/DS3ZEVW13cXBzT0ZS

  • 設計資料獲取聯(lián)系方式.doc
    下載

相關推薦