仿真圖proteus7.8及以上
程序編譯器:keil 4/keil 5
編程語言:C語言
設(shè)計編號:S0075
1. 主要功能:
基于51單片機(jī)的教室燈光自動控制系統(tǒng)
1、數(shù)碼管顯示當(dāng)前工作強(qiáng)度,光照閾值和教室人數(shù);
2、設(shè)定值可以通過按鍵調(diào)整;
3、通過按鍵模擬紅外對射傳感器統(tǒng)計進(jìn)出人數(shù);
4、教室內(nèi)是否開燈取決于光照強(qiáng)度,光照強(qiáng)度低于閾值(教室燈光暗)的時候開燈;
5、教室內(nèi)開燈的數(shù)量根據(jù)教室內(nèi)人數(shù)的多少設(shè)定,人數(shù)越多,開燈數(shù)量越多;
需注意仿真中51單片機(jī)芯片是兼容的,AT89C51,AT89C52是51單片機(jī)的具體型號,內(nèi)核是一樣的。相同的原理圖里,無論stc還是at都一樣,引腳功能都是一樣的,程序是兼容的,芯片可以替換為STC89C52/STC89C51/AT89C52/AT89C51等51單片機(jī)芯片。
以下為本設(shè)計資料展示圖:
2. 講解視頻:
講解視頻包含仿真運(yùn)行講解和代碼講解
基于51單片機(jī)教室燈光控制proteus仿真+程序+設(shè)計報告+原理圖+講解視頻
3. 仿真設(shè)計
打開仿真工程,雙擊proteus中的單片機(jī),選擇hex文件路徑,然后開始仿真。開始仿真后數(shù)碼管顯示當(dāng)前光照強(qiáng)度,光照閾值,教室人數(shù),光照強(qiáng)度低于閾值即教室內(nèi)燈光暗,滿足開燈條件。此時教室人數(shù)0,即教室沒有人,所以不需要開燈。
通過點擊按鍵進(jìn)教室完成教室人數(shù)的設(shè)置,從1開始,每多十個人多開一盞燈,最多開8盞燈。
如果光照強(qiáng)度大于閾值,說明自然光足夠亮,不需要開燈。
4. 程序代碼
使用keil4或者keil5編譯,代碼有注釋,可以結(jié)合視頻理解代碼含義。
mian 函數(shù)
#include "reg51.h"
#include "ADC0832.h"
sbit smg1=P2^0;//數(shù)碼管引腳
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;//人數(shù)
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()
{
// 根據(jù)光照強(qiáng)度light的十位數(shù),通過數(shù)組smgduan獲取對應(yīng)的顯示數(shù)據(jù),并將結(jié)果顯示在P0口上(假設(shè)用于連接數(shù)碼管的段選)
P0 = smgduan[light / 10];
// 清除數(shù)碼管第一位(smg1)的位選信號,使其不顯示任何數(shù)字
smg1 = 0;
// 延時100ms,以便觀察數(shù)碼管的顯示效果
delay(100);
// 設(shè)置數(shù)碼管第一位(smg1)的位選信號為1,使顯示數(shù)據(jù)生效
smg1 = 1;
// 根據(jù)光照強(qiáng)度light的個位數(shù),通過數(shù)組smgduan獲取對應(yīng)的顯示數(shù)據(jù),并更新到P0口上
P0 = smgduan[light % 10];
// 清除數(shù)碼管第二位(smg2)的位選信號
smg2 = 0;
// 延遲100ms
delay(100);
// 設(shè)置數(shù)碼管第二位(smg2)的位選信號為1,使顯示數(shù)據(jù)生效
smg2 = 1;
// 同理,根據(jù)光照閥值limit的十位和個位數(shù),分別顯示到數(shù)碼管的第三位和第四位
P0 = smgduan[limit / 10];
smg3 = 0;
delay(100);
smg3 = 1;
P0 = smgduan[limit % 10];
smg4 = 0;
delay(100);
smg4 = 1;
// 根據(jù)人數(shù)num的十位和個位數(shù),分別顯示到數(shù)碼管的第五位和第六位
P0 = smgduan[num / 10];
smg5 = 0;
delay(100);
smg5 = 1;
P0 = smgduan[num % 10];
smg6 = 0;
delay(100);
smg6 = 1;
}
// 主函數(shù)定義
void main()
{
// 設(shè)置定時器0的工作模式為模式1(16位定時器/計數(shù)器)
TMOD |= 0X01;
// 設(shè)置定時器0的高8位初始值,這里設(shè)置的是一個特定的計數(shù)值(具體取決于晶振頻率和系統(tǒng)配置)
TH0 = 0X3C;
// 設(shè)置定時器0的低8位初始值,與TH0共同決定定時器的初值
TL0 = 0XB0;
// 打開定時器0中斷允許位,使能定時器0中斷功能
ET0 = 1;
// 打開總中斷,允許單片機(jī)接收并處理所有中斷請求
EA = 1;
// 啟動定時器0
TR0 = 1;
// 進(jìn)入無限循環(huán)
while(1)
{
// 調(diào)用disp()函數(shù),執(zhí)行顯示操作(如可能的話,可能是顯示當(dāng)前光照閾值或人數(shù)等信息)
disp();
// 檢測按鍵k1狀態(tài),并在m1標(biāo)記為0時調(diào)整光照閾值limit(增1)
if(!k1 && (m1 == 0))
{
if(limit < 100) // 如果當(dāng)前閾值小于最大值100
limit++; // 閾值加1
m1 = 1; // 標(biāo)記m1為已操作,防止連續(xù)觸發(fā)
}
// 當(dāng)按鍵k1釋放時,重置m1標(biāo)記
if(k1)
m1 = 0;
// 類似地檢測按鍵k2狀態(tài)并減少光照閾值limit(減1)
if(!k2 && (m2 == 0))
{
if(limit > 0) // 如果當(dāng)前閾值大于最小值0
limit--; // 閾值減1
m2 = 1; // 標(biāo)記m2為已操作
}
// 當(dāng)按鍵k2釋放時,重置m2標(biāo)記
if(k2)
m2 = 0;
// 檢測按鍵k3表示有人進(jìn)入教室,當(dāng)m3標(biāo)記為0時增加教室內(nèi)人數(shù)num(增1)
if(!k3 && (m3 == 0))
{
if(num < 100) // 如果當(dāng)前人數(shù)小于最大值100
num++; // 人數(shù)加1
m3 = 1; // 標(biāo)記m3為已操作
}
// 當(dāng)按鍵k3釋放時,重置m3標(biāo)記
if(k3)
m3 = 0;
// 檢測按鍵k4表示有人離開教室,當(dāng)m4標(biāo)記為0時減少教室內(nèi)人數(shù)num(減1)
if(!k4 && (m4 == 0))
{
if(num > 0) // 如果當(dāng)前人數(shù)大于最小值0
num--; // 人數(shù)減1
m4 = 1; // 標(biāo)記m4為已操作
}
// 當(dāng)按鍵k4釋放時,重置m4標(biāo)記
if(k4)
m4 = 0;
// 判斷當(dāng)前光照強(qiáng)度是否低于設(shè)定閾值limit
if(light < limit)
{
// 如果教室內(nèi)有人(即num>0),根據(jù)人數(shù)開啟相應(yīng)數(shù)量的燈光
if(num > 0)
P3 = 0xff << (num / 10) + 1; // 假設(shè)每10人開一組燈,不足10人也開一組
else
P3 = 0xff; // 若教室內(nèi)無人,則全開燈光
}
// 光照強(qiáng)度高于或等于閾值時,關(guān)閉所有燈光
else
{
P3 = 0xff;
}
}
}
// 定義一個名為Timer0的中斷服務(wù)程序,該中斷由定時器0溢出觸發(fā)(中斷號為1)
void Timer0() interrupt 1
{
// 判斷計數(shù)變量time是否小于10
if(time < 10)
{
// 如果time小于10,則將其加1,表示時間累計增加
time++;
}
else
{
// 如果time不小于10(即等于或大于10),則執(zhí)行以下操作:
// 將time重置為0,重新開始計時周期
time = 0;
// 調(diào)用ADC函數(shù)進(jìn)行光照強(qiáng)度檢測,并將返回值賦給light變量
light = ADC();
}
// 設(shè)置定時器0的高8位和低8位初始值,以維持特定的定時周期
// 假設(shè)此處設(shè)置的定時器初值使得定時器0每10個單位時間產(chǎn)生一次溢出中斷
TH0 = 0X3C; // 設(shè)置TH0為0X3C(十六進(jìn)制)對應(yīng)到二進(jìn)制并轉(zhuǎn)換為對應(yīng)的機(jī)器周期數(shù)
TL0 = 0XB0; // 設(shè)置TL0為0XB0(十六進(jìn)制),與TH0共同決定定時器0的定時周期
}
5. 設(shè)計報告
7608字設(shè)計報告,內(nèi)容包括硬件設(shè)計、軟件設(shè)計、軟硬件框圖、調(diào)試、結(jié)論等
本課程設(shè)計項目正是順應(yīng)這一時代潮流,選擇了51系列單片機(jī)作為核心控制器元件,以其穩(wěn)定可靠、易于編程的特點來構(gòu)建一套適用于教室環(huán)境的燈光自動控制系統(tǒng)。該系統(tǒng)旨在模擬真實應(yīng)用場景中的光照條件變化和人員流動情況,實現(xiàn)精準(zhǔn)的光線感應(yīng)控制機(jī)制。具體來說,通過集成光敏傳感器實時監(jiān)測教室內(nèi)的自然光線強(qiáng)度,并設(shè)定一個可調(diào)閾值,當(dāng)實際光線低于此閾值時,系統(tǒng)將自動開啟照明設(shè)備,確保室內(nèi)有足夠的光線供師生進(jìn)行教學(xué)活動。
此外,為了進(jìn)一步提高系統(tǒng)的智能性和實用性,本設(shè)計還特別加入了人數(shù)統(tǒng)計功能,通過按鍵模擬紅外對射傳感器的工作原理,以簡化的操作方式記錄進(jìn)出教室的人數(shù)變化。這種創(chuàng)新性的設(shè)計不僅有助于精確掌握教室內(nèi)學(xué)生數(shù)量,更為關(guān)鍵的是,能夠基于人數(shù)動態(tài)調(diào)整教室內(nèi)燈光的數(shù)量和分布,從而實現(xiàn)按需照明,避免不必要的能源浪費(fèi)。
6. 原理圖
原理圖使用AD繪制,可供實物參考,仿真不同于實物,需要調(diào)試經(jīng)驗才能做出來。
Proteus仿真和實物作品的區(qū)別:
1.運(yùn)行環(huán)境:Proteus仿真是在計算機(jī)上運(yùn)行的,而實物則是在硬件電路板上運(yùn)行。
2.調(diào)試方式:在Proteus仿真中,可以方便地進(jìn)行單步調(diào)試和觀察變量值的變化,而在實物中則需要通過調(diào)試器或者串口輸出等方式進(jìn)行調(diào)試。
電路連接方式:在Proteus仿真中,可以通過軟件設(shè)置進(jìn)行電路連接的修改,而在實物中則需要通過硬件電路板和連接線進(jìn)行修改。
3.運(yùn)行速度:Proteus仿真通常比實物運(yùn)行速度快,因為仿真是基于計算機(jī)運(yùn)行的,而實物則需要考慮電路板上的物理限制和器件的響應(yīng)時間等因素。
4.功能實現(xiàn):在Proteus仿真中,可以通過軟件設(shè)置實現(xiàn)不同的功能,而在實物中則需要根據(jù)電路設(shè)計和器件的性能進(jìn)行實現(xiàn)。
7. 設(shè)計資料內(nèi)容清單&&下載鏈接
資料設(shè)計資料包括仿真,程序代碼、講解視頻、功能要求、設(shè)計報告、軟硬件設(shè)計框圖等。
0、常見使用問題及解決方法–必讀?。。?!
1、程序
2、proteus仿真
3、功能要求
4、軟硬件流程圖
5、開題報告
6、設(shè)計報告
7、原理圖
8、講解視頻
Altium Designer 安裝破解
KEIL+proteus 單片機(jī)仿真設(shè)計教程
KEIL安裝破解
Proteus元器件查找
Proteus安裝
Proteus簡易使用教程
單片機(jī)學(xué)習(xí)資料
相關(guān)數(shù)據(jù)手冊
答辯技巧
設(shè)計報告常用描述
鼠標(biāo)雙擊打開查找嘉盛單片機(jī)51 STM32單片機(jī)課程畢業(yè)設(shè)計.url
資料下載鏈接(可點擊):
https://docs.qq.com/doc/DS3ZEVW13cXBzT0ZS