【Proteus仿真】【51單片機】教室燈光控制器設計

文章目錄

  • 一、功能簡介
  • 二、軟件設計
  • 三、實驗現象
  • 聯系作者


一、功能簡介

本項目使用Proteus8仿真51單片機控制器,使用LCD1602液晶、DS1302時鐘模塊、人體紅外感應模塊、開關LED指示燈、繼電器、PCF8591 ADC模塊、光敏傳感器、按鍵模塊等。
主要功能:
系統運行后,LCD1602顯示當前時間、光線強弱狀態,光線強度、有無人、燈開關狀態等。
如果檢測光線強度大于上限值,視為白天,此時不管有無人,都不會打開電燈;
如果檢測光線強度低于下限值,視為夜晚,此時檢測有人,打開電燈,無人則延遲2秒熄滅;可通過K3鍵進入閾值設置模式,K3可切換時間、閾值上下限位置,K1和K2鍵調節,K4確認并返回主界面;當時間到達設定時間,則進入手動控制模式,此時可通過開關來打開和關閉電燈;當時間到達次日早上,則又進入自動控制模式。


二、軟件設計

/*
作者:嗨小易(QQ技術交流群:570487280)*///系統數據采集
void sys_data_get(void)
{while(1){//獲取時間ds1302_read_time();sys_ctrl.hour=(gDS1302_TIME[2]/16)*10+gDS1302_TIME[2]%16;sys_ctrl.min=(gDS1302_TIME[1]/16)*10+gDS1302_TIME[1]%16;sys_ctrl.sec=(gDS1302_TIME[0]/16)*10+gDS1302_TIME[0]%16;//讀取光線值sys_ctrl.light=pcf8591_read_adcvalue(0);sys_ctrl.light=cal_map(sys_ctrl.light,0,255,0,100);//白天晚上狀態獲取if(sys_ctrl.light>sys_ctrl.setlight[1])sys_ctrl.dayflag=0;else if(sys_ctrl.light<sys_ctrl.setlight[0])sys_ctrl.dayflag=1; //檢測是否有人if(IRED==0)sys_ctrl.man=1;else sys_ctrl.man=0;break;}	
}//系統數據顯示
void sys_data_show(void)
{u8 buf[3];while(1){//正常模式顯示if(sys_ctrl.mode==0){//時間顯示buf[0]=gDS1302_TIME[2]/16+0x30;buf[1]=gDS1302_TIME[2]%16+0x30;buf[2]='\0';lcd1602_show_string(0,0,buf);buf[0]=gDS1302_TIME[1]/16+0x30;buf[1]=gDS1302_TIME[1]%16+0x30;buf[2]=':';lcd1602_show_string(3,0,buf);buf[0]=gDS1302_TIME[0]/16+0x30;buf[1]=gDS1302_TIME[0]%16+0x30;buf[2]='\0';lcd1602_show_string(6,0,buf);//光線強度顯示lcd1602_show_nums(2,1,sys_ctrl.light,3,0);//白天夜晚狀態顯示if(sys_ctrl.dayflag==0)lcd1602_show_string(11,0,"day  ");else lcd1602_show_string(11,0,"night");//有無人狀態顯示if(sys_ctrl.man==0)lcd1602_show_string(8,1,"N");else lcd1602_show_string(8,1,"Y");//自動手動模式顯示if(sys_ctrl.ctrl_flag==0)lcd1602_show_string(10,1,"Au");else lcd1602_show_string(10,1,"Sd");//電燈開關狀態顯示if(sys_ctrl.onoff==0)lcd1602_show_string(13,1,"OFF");else lcd1602_show_string(13,1," ON");}//設置模式顯示else{//時間閾值lcd1602_show_nums(8,0,sys_ctrl.settime[0],2,0x80);lcd1602_show_nums(11,0,sys_ctrl.settime[1],2,0x80);lcd1602_show_nums(14,0,sys_ctrl.settime[2],2,0x80);	//光線閾值lcd1602_show_nums(8,1,sys_ctrl.setlight[0],2,0);lcd1602_show_nums(12,1,sys_ctrl.setlight[1],2,0);//對應位置閃爍switch(sys_ctrl.mode){case 1://時lcd1602_show_string(8,0,"  ");delay_ms(50);lcd1602_show_nums(8,0,sys_ctrl.settime[0],2,0x80);	break;case 2://分lcd1602_show_string(11,0,"  ");delay_ms(50);lcd1602_show_nums(11,0,sys_ctrl.settime[1],2,0x80);	break;case 3://秒lcd1602_show_string(14,0,"  ");delay_ms(50);lcd1602_show_nums(14,0,sys_ctrl.settime[2],2,0x80);	break;case 4://光線下限lcd1602_show_string(8,1,"  ");delay_ms(50);lcd1602_show_nums(8,1,sys_ctrl.setlight[0],2,0);	break;case 5://光線上限lcd1602_show_string(12,1,"  ");delay_ms(50);lcd1602_show_nums(12,1,sys_ctrl.setlight[1],2,0);	break;}	}break;}
}//系統數據設置
void sys_data_set(void)
{u8 key=0;static u8 oneflag=0;key=key_scan(0);//設置if(key==KEY3_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>5)sys_ctrl.mode=1;if(oneflag==0){oneflag=1;sys_parm_set_show();//系統參數設置界面顯示}}//加else if(key==KEY1_PRESS){switch(sys_ctrl.mode){case 1://時sys_ctrl.settime[0]++;if(sys_ctrl.settime[0]>23)sys_ctrl.settime[0]=0;break;case 2://分sys_ctrl.settime[1]++;if(sys_ctrl.settime[1]>59)sys_ctrl.settime[1]=0;break;case 3://秒sys_ctrl.settime[2]++;if(sys_ctrl.settime[2]>59)sys_ctrl.settime[2]=0;break;case 4://光線下限sys_ctrl.setlight[0]++;if(sys_ctrl.setlight[0]>99)sys_ctrl.setlight[0]=0;break;case 5://光線上限sys_ctrl.setlight[1]++;if(sys_ctrl.setlight[1]>99)sys_ctrl.setlight[1]=0;break;}	}//減else if(key==KEY2_PRESS){switch(sys_ctrl.mode){case 1://時sys_ctrl.settime[0]--;if(sys_ctrl.settime[0]<0)sys_ctrl.settime[0]=23;break;case 2://分sys_ctrl.settime[1]--;if(sys_ctrl.settime[1]<0)sys_ctrl.settime[1]=59;break;case 3://秒sys_ctrl.settime[2]--;if(sys_ctrl.settime[2]<0)sys_ctrl.settime[2]=59;break;case 4://光線下限sys_ctrl.setlight[0]--;if(sys_ctrl.setlight[0]<0)sys_ctrl.setlight[0]=99;break;case 5://光線上限sys_ctrl.setlight[1]--;if(sys_ctrl.setlight[1]<0)sys_ctrl.setlight[1]=99;break;}	}//確定else if(key==KEY4_PRESS){if(sys_ctrl.mode!=0){sys_ctrl.mode=0;oneflag=0;sys_open_show();//系統開機界面顯示}}		
}//系統功能控制
void sys_fun_ctrl(void)
{//如果是深夜,且時間到達設定時間if(sys_ctrl.hour==sys_ctrl.settime[0]){if(sys_ctrl.min==sys_ctrl.settime[1]){if(sys_ctrl.sec==sys_ctrl.settime[2]){sys_ctrl.ctrl_flag=1;//轉為手動	}	}		}if(sys_ctrl.ctrl_flag==1){//如果到達白天,轉為自動if(sys_ctrl.hour==6){if(sys_ctrl.min==0){if(sys_ctrl.sec==0){sys_ctrl.ctrl_flag=0;//轉為自動	}	}		}	}	//自動控制模式if(sys_ctrl.ctrl_flag==0){//正常模式if(sys_ctrl.mode==0){//光線大于上限閾值,白天if(sys_ctrl.dayflag==0){LED=1;//關閉電燈		}//光線小于下限值,晚上else {//如果感應到有人if(sys_ctrl.man==1){delay_ms(100);if(sys_ctrl.man==1){sys_ctrl.onoff=1;LED=0;//打開電燈	}}//如果人離開else{//電燈已打開if(sys_ctrl.onoff==1){delay_ms(2000);LED=1;//關閉電燈sys_ctrl.onoff=0;	}		}	}}	}//手動控制模式else{//如果手動按下遙控或機械開關if(SWITCH==0){LED=0;//打開電燈sys_ctrl.onoff=1;		}else{ 	LED=1;//關閉電燈sys_ctrl.onoff=0;	}	}		
}

三、實驗現象

B站演示視頻:https://space.bilibili.com/444388619

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

聯系作者

視頻地址:https://space.bilibili.com/444388619/video
專注于51單片機、STM32、國產32、DSP、Proteus、arduino、ESP32、物聯網軟件開發,PCB設計,視頻分享,技術交流。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96706.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96706.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96706.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

成為一個年薪30W+的FPGA工程師是一種什么體驗?

FPGA&#xff08;Field-Programmable Gate Array&#xff09;是現場可編程門陣列&#xff0c;通過硬件描述語言設計電路&#xff0c;可實現并行計算&#xff0c;廣泛應用于通信、人工智能、工業控制等領域。FPGA工程師的工作包括RTL設計、仿真驗證、時序分析等。盡管并非所有公…

ZooKeeper Java客戶端與分布式應用實戰

1. ZooKeeper Java客戶端實戰 ZooKeeper應用開發主要通過Java客戶端API連接和操作ZooKeeper集群&#xff0c;有官方和第三方兩種客戶端選擇。 1.1 ZooKeeper原生Java客戶端 依賴引入 <dependency><groupId>org.apache.zookeeper</groupId><artifactId>…

0303 【軟考高項】項目管理概述 - 組織系統(項目型組織、職能型組織、矩陣型組織)

0303 【軟考高項】項目管理概述 - 組織系統&#xff08;項目型組織、職能型組織、矩陣型組織&#xff09; 目錄0303 【軟考高項】項目管理概述 - 組織系統&#xff08;項目型組織、職能型組織、矩陣型組織&#xff09;一、基本概念二、職能型組織二、項目型組織三、矩陣型組織3…

計算機視覺與模式識別前沿一覽:2025年8月arXiv 熱點研究趨勢解析

本推文分析了arXiv中Computer Vision and Patteren Recognition(計算機視覺與模式識別)領域2025年8月發布的近50篇論文的研究熱點&#xff0c;旨在幫助讀者快速了解近期領域內的前沿技術與研究方向。arXiv是全球最具影響力的開放電子預印本平臺之一&#xff0c;由美國國家科學基…

vim復制本地到linux服務器上,換行縮進過大,不對的問題

所搜的試了:setlocal shiftwidth? :setlocal tabstop? :setlocal expandtab? :setlocal softtabstop?" 設置為 4 個空格縮進 :setlocal shiftwidth4" 通常你會希望 tabstop 和 softtabstop 也保持一致 :setlocal tabstop4 :setlocal softtabstop4嘗試完不起作用&…

【小程序】微信小程序九宮格抽獎動畫(完整版)

這是一個微信小程序九宮格抽獎頁面的完整代碼&#xff0c;包括 WXML、WXSS、JS 和 JSON。 效果 九宮格抽獎功能說明&#xff1a; 靜態頁面布局&#xff1a; 3x3 九宮格&#xff0c;中間是“立即抽獎”按鈕&#xff0c;周圍是獎品金額。抽獎動畫&#xff1a; 點擊“立即抽獎”…

java類沖突

一、為什么會發生類沖突&#xff1f; 在 Java 的類加載機制中&#xff0c;類的唯一性是由“類加載器類的全限定名”共同決定的。當你的項目依賴了多個 jar 包&#xff0c;這些 jar 包里有同名的類&#xff08;包名和類名完全一樣&#xff09;&#xff0c;但實現卻不同。類加載器…

GIT客戶端配置支持中文

環境&#xff1a;windows10、Git-2.42.0.2-64-bit.exe1. 問題描述客戶端安裝后&#xff0c;默認是不支持中文顯示的&#xff0c;中文名的文件顯示亂碼&#xff0c;提交時打的標簽內容也不支持中文顯示。2. 解決新建Git全局配置文件&#xff0c;文件名為.gitconfig&#xff0c;內…

Teable vs NocoDB 開源、在線協同 多維表格大PK

文章目錄 Teable 簡介 特性 docker-compose部署 功能截圖 NocoDB 簡介 docker-compose部署 功能截圖 總結 Teable 簡介 Teable 是一款企業級高性能多維表格解決方案,通過無代碼方式快速構建業務管理系統,支持私有部署和精細權限管理。 官方文檔 特性 ?? 卓越性能 輕松處…

SQL專家云能做哪些事兒?

背景數據庫是信息化的基石&#xff0c;支撐著整個業務系統&#xff0c;發揮著非常重要的作用&#xff0c;被喻為“IT的心臟”。因此&#xff0c;讓數據庫安全、穩定、高效地運行已經成為IT管理者必須要面對的問題。但是很多組織沒有專業的DBA&#xff0c;數據庫運維面臨著極大的…

Python 高效實現 Word 轉 PDF:告別 Office 依賴

在工作中&#xff0c;經常會遇到需要把 Word 文檔轉換成 PDF 的情況。比如生成報表、分發文檔、或者做歸檔保存&#xff0c;PDF 格式在排版和跨平臺顯示上更穩定。傳統的做法往往依賴 Microsoft Office 或 LibreOffice 等軟件來完成轉換&#xff0c;但在自動化環境&#xff08;…

SQL優化簡單思路

1. 背景 在實際生產中&#xff0c;因為SQL較慢、SQL關聯不合理、不了解索引的性質、不熟悉mysql執行計劃分析&#xff0c;可能會出現一些生產事故&#xff0c;本文會簡單說明SQL通常的優化分析思路。 基本的優化原則&#xff1a; 先優化SQL再優化mysql server最后優化硬件 2. 優…

軟考 系統架構設計師系列知識點之雜項集萃(144)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(143) 第268題 甲、乙、丙、丁4人加工A、B、C、D四種工件所需工時如下表所示。指派每人加工一種工件,四人加工四種工件其總工時最短的最優方案中,工件B應由()加工。 A B C D 甲

P1168 中位數

題目描述給定一個長度為 N 的非負整數序列 A&#xff0c;對于前奇數項求中位數。輸入格式第一行一個正整數 N。第二行 N 個正整數 A1…N?。輸出格式共 ?2N1?? 行&#xff0c;第 i 行為 A1…2i?1? 的中位數。輸入輸出樣例輸入 #1復制7 1 3 5 7 9 11 6輸出 #11 3 5 6輸入 #…

【CE】圖形化CE游戲教程通關手冊

【CE】圖形化CE游戲教程通關手冊 文章目錄【CE】圖形化CE游戲教程通關手冊導讀需求1?? 第一關提示操作總結2?? 第二關&#xff08;代碼共享&#xff09;提示操作驗證3?? 第三關提示提示總結導讀 需求 除了Tutorial-x86_64.exe教程外&#xff0c;CE還提供了圖形化教程gtu…

leetcode 2785. 將字符串中的元音字母排序 中等

給你一個下標從 0 開始的字符串 s &#xff0c;將 s 中的元素重新 排列 得到新的字符串 t &#xff0c;它滿足&#xff1a;所有輔音字母都在原來的位置上。更正式的&#xff0c;如果滿足 0 < i < s.length 的下標 i 處的 s[i] 是個輔音字母&#xff0c;那么 t[i] s[i] 。…

支付子系統架構及常見問題

支付流程對于支付系統來說&#xff0c;它最重要的其實是安全&#xff0c;所以整個支付流程采用秘鑰加簽的方式進行操作&#xff0c;一共四對秘鑰&#xff0c;以支付寶在線支付為例子&#xff0c;首先通過RSA2算法生成商戶公鑰以及商戶私鑰&#xff0c;同時支付寶平臺會提供支付…

內存傳輸速率MT/s

1 0 0 0 0 0 0 0 0 010 9 8 7 6 5 4 3 2 1十 億 千 百 十 萬 千 百 十 個億 萬 萬 萬傳輸速率 …

.env文件的作用和使用方法

目錄 什么是 .env 文件&#xff1f; 為什么要使用 .env 文件&#xff1f;&#xff08;好處&#xff09; 如何使用 .env 文件&#xff1f; 通用步驟&#xff1a; 具體技術棧中的實現&#xff1a; 最佳實踐和注意事項 總結 什么是 .env 文件&#xff1f; .env 文件&#x…

深度拆解 Python 裝飾器參數傳遞:從裝飾器生效到參數轉交的每一步

在 Python 裝飾器的學習中&#xff0c;“被裝飾函數的參數如何傳遞到裝飾器內層函數”是一個高頻疑問點。很多開發者能寫出裝飾器的基本結構&#xff0c;卻對參數傳遞的底層邏輯一知半解。本文將以一段具體代碼為例&#xff0c;把參數傳遞過程拆成“裝飾器生效→調用觸發→參數…