RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于51單片機(jī)的智能臺燈設(shè)計

精通單片機(jī)與嵌入式 ? 來源:精通單片機(jī)與嵌入式 ? 2023-08-29 09:32 ? 次閱讀

一、設(shè)計目的

使用單片機(jī)設(shè)計智能臺燈對于提高學(xué)生的單片機(jī)應(yīng)用能力具有較強(qiáng)的意義。通過該設(shè)計,可以鞏固所學(xué)的單片機(jī)理論知識,培養(yǎng)學(xué)生硬件和軟件的設(shè)計能力,從而促進(jìn)學(xué)生所掌握的理論知識向?qū)嵺`應(yīng)用的改變。

二、設(shè)計要求

(1)熟悉51單片機(jī)集成開發(fā)環(huán)境,運(yùn)用C語言編寫工程文件; (2)熟練應(yīng)用所選用單片機(jī)的內(nèi)部結(jié)構(gòu)、資源,以及軟硬件調(diào)試設(shè)備的基本方法; (3)自行構(gòu)建基于單片機(jī)的最小系統(tǒng),完成相關(guān)硬件電路的設(shè)計實現(xiàn); (4)掌握智能臺燈的原理和實現(xiàn)方法。

三、設(shè)計內(nèi)容

(1) 可以通過按鍵切換控制模式,有自動模式和手動模式可選;

(2) 自動模式下,可根據(jù)空間環(huán)境的光線強(qiáng)度大小,調(diào)節(jié)臺燈的亮度。并且

1分鐘檢測不到有人,直接熄滅臺燈,達(dá)到節(jié)能的效果;

(3) 手動模式下,可通過按鍵增加或減少亮度;

開題報告

b876f676-45fb-11ee-a2ef-92fbcf53809c.png

方案設(shè)計

整個系統(tǒng)以STC89C52單片機(jī)為核心器件,配合電阻電容晶振等器件,構(gòu)成單片機(jī)的最小系統(tǒng)。其它個模塊圍繞著單片機(jī)最小系統(tǒng)展開。其中包括,照明設(shè)備采用USB小燈進(jìn)行模擬,使得設(shè)計在外形上更加美觀,在USB小燈內(nèi)部,是6顆白色的LED燈;光照強(qiáng)度采集模塊,是使用光敏電阻+ADC0832方案;人體感應(yīng)采用紅外熱釋傳感器,該傳感器靈敏度高,操作控制簡單;指示燈模塊由一顆綠色的小燈構(gòu)成,指示燈亮?xí)r是自動模式,熄滅時是手動模式;按鍵模塊由3個按鍵組成,包括模式切換按鍵、亮度減少按鍵和亮度增加按鍵;

b8bfc66c-45fb-11ee-a2ef-92fbcf53809c.png

設(shè)計功能

1、上電之后,綠色的 LED 燈點亮,代表當(dāng)前是自動控制模式。

2、通過按鍵 1,可以在手動模式(綠燈滅)和自動模式(綠燈亮)之間來回切換。

3、在手動模式下,可以通過按鍵 2 降低亮度,按鍵 3 增加亮度。

4、在自動模式下,首先要檢測到有人,才進(jìn)行亮度的自動控制,否則臺燈熄滅。可以擋住光敏電阻的光線,或用手電筒來照射光敏電阻,模擬光照的變化,從而就可以 看到臺燈的亮度會隨著環(huán)境中的光照強(qiáng)度的改變而改變,效果是光照越弱,臺燈越亮。如果人體傳感器 1 分鐘檢測不到有人,臺燈就會自動熄滅。

5、無論是自動模式還是手動模式,都是把亮度分為 10 個等級的。

6、注意,人體感應(yīng)檢測功能只在自動模式下有效。

原理圖設(shè)計


b9f9d0f4-45fb-11ee-a2ef-92fbcf53809c.png

PCB設(shè)計


ba5391d4-45fb-11ee-a2ef-92fbcf53809c.pngb820cfda-45fb-11ee-a2ef-92fbcf53809c.gif

源代碼


#include 
#include 


#define uchar unsigned char    // 以后unsigned char就可以用uchar代替
#define uint  unsigned int    // 以后unsigned int 就可以用uint 代替




sbit LED     = P1^0;          // 模式指示燈,亮是自動模式,滅是手動模式
sbit Lamp    = P1^4;           // 臺燈控制引腳
sbit Key1    = P1^1;          // 按鍵1,模式切換按鍵
sbit Key2    = P1^2;           // 按鍵2,亮度減少按鍵      
sbit Key3    = P1^3;          // 按鍵3,亮度增加按鍵
sbit ADC_CS  = P2^3;           // ADC0832的CS引腳
sbit ADC_CLK = P2^0;           // ADC0832的CLK引腳
sbit ADC_DAT = P2^1;           // ADC0832的DI/DO引腳
sbit Module  = P2^2;          // 人體紅外檢測模塊




uchar gCount=0;                // 全局計數(shù)變量
uchar gIndex;                  // 亮度變量,0是最暗,9是最亮,一共10檔
uint  gTime=0;                // 計時變量,用于計時多久沒檢測到有人






/*********************************************************/
// 毫秒級的延時函數(shù),time是要延時的毫秒數(shù)
/*********************************************************/
void DelayMs(uint time)
{
  uint i,j;
  for(i=0;i>= 1;
    if(ADC_DAT)
      dat2=dat2|0x80;
    else
      dat2=dat2|0x00;
    WavePlus();
  }


  _nop_();            // 結(jié)束此次傳輸
  ADC_DAT = 1;
  ADC_CLK = 1;
  ADC_CS  = 1;   


  if(dat1==dat2)      // 返回采集結(jié)果
    return dat1;
  else
    return 0;
} 






/*********************************************************/
// 定時器初始化
/*********************************************************/
void TimerInit()
{
  TMOD = 0x01;        // 使用定時器0,工作方式1   
  TH0  = 252;          // 給定時器0的TH0裝初值
  TL0  = 24;          // 給定時器0的TL0裝初值  
  ET0  = 1;            // 定時器0中斷使能
  EA   = 1;            // 打開總中斷
  TR0   = 1;            // 啟動定時器0
}






/*********************************************************/
// 手動控制
/*********************************************************/
void ManualControl()
{
  // 亮度減少
  if(Key2==0)          // 如果按鍵2被按下去
  {
    if(gIndex>0)      // 只要當(dāng)前亮度不為最低才能減少亮度
    {
      gIndex--;        // 亮度降低一檔
      DelayMs(300);    // 延時0.3秒
    }
  }


  // 亮度增加
  if(Key3==0)          // 如果按鍵3被按下去
  {
    if(gIndex<9)      // 只要當(dāng)前亮度不為最高才能增加亮度
    {
      gIndex++;        // 亮度增加一檔
      DelayMs(300);    // 延時0.3秒
    }
  }
}






/*********************************************************/
// 自動控制
/*********************************************************/
void AutoControl(uchar num)
{
  if(num<59)                            // 最亮
    gIndex=9;
  else if((num>65)&&(num<81))            // 第二亮
    gIndex=8;
  else if((num>87)&&(num<103))          // 第三亮
    gIndex=7;
  else if((num>109)&&(num<125))
    gIndex=6;
  else if((num>131)&&(num<147))
    gIndex=5;
  else if((num>153)&&(num<169))
    gIndex=4;
  else if((num>175)&&(num<191))
    gIndex=3;
  else if((num>197)&&(num<213))
    gIndex=2;
  else if((num>219)&&(num<235))
    gIndex=1;
  else if(num>241)                     // 最暗
    gIndex=0;
}






/*********************************************************/
// 主函數(shù)
/*********************************************************/
void main()
{
  uchar ret;


  TimerInit();           // 定時器初始化


  LED=0;                // 指示燈點亮(自動模式指示燈)
  ret=Get_ADC0832();    // 獲取AD采集結(jié)果(環(huán)境光照強(qiáng)度)
  AutoControl(ret);      // 上電先進(jìn)行一次自動亮度控制  
  AutoControl(ret+7);


  while(1)
  {
    /* 模式切換控制 */
    if(Key1==0)          // 如果按鍵1被按下去
    {
      LED=~LED;          // 切換LED燈狀態(tài)
      DelayMs(10);      // 延時消除按鍵按下的抖動
      while(!Key1);      // 等待按鍵釋放
      DelayMs(10);      // 延時消除按鍵松開的抖動
    }


    /* 亮度控制 */
    if(LED==1)              // 如果LED是滅的
    {
      ManualControl();      // 則進(jìn)行手動控制
    }
    else                    // 如果LED是亮的
    {
      if(gTime<60000)
      {
        ret=Get_ADC0832();    // 獲取AD采集結(jié)果(環(huán)境光照強(qiáng)度)
        AutoControl(ret);      // 進(jìn)行自動控制  
        DelayMs(200);
      }
    }


    /*檢測是否有人*/
    if(Module==1)
    {
      gTime=0;                    // 檢測到有人,則把60秒計時清零
    }
    if(gTime>60000)                // 如果gTime的值超過了60000
    {
      gTime=60000;                // 則把gTime的值重新賦值為60000,避免過大溢出
      gIndex=0;                    // 如果1分鐘檢測不到有人,則把臺燈熄滅
    }
  }
}




/*********************************************************/
// 定時器0服務(wù)程序,1毫秒
/*********************************************************/
void Timer0(void) interrupt 1
{
  TH0  = 252;            // 給定時器0的TH0裝初值
  TL0  = 24;            // 給定時器0的TL0裝初值  


  gTime++;              // 每1毫秒,gTime變量加1
  gCount++;              // 每1毫秒,gCount變量加1


  if(gCount==10)        // 如果gCount加到10了
  {
    gCount=0;            // 則將gCount清零,進(jìn)入新一輪的計數(shù)
    if(gIndex!=0)        // 如果說臺燈不是最暗的(熄滅)
    {
      Lamp=0;            // 則把臺燈點亮
    }
  }
  if(gCount==gIndex)    // 如果gCount計數(shù)到和gIndex一樣了
  {
    if(gIndex!=9)        // 如果說臺燈不是最亮的
    {
      Lamp=1;            // 則把臺燈熄滅
    }
  }
}

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6035

    文章

    44554

    瀏覽量

    634629
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    274

    文章

    5702

    瀏覽量

    123490
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136684
  • 智能臺燈
    +關(guān)注

    關(guān)注

    9

    文章

    83

    瀏覽量

    21020

原文標(biāo)題:【畢業(yè)設(shè)計】基于51單片機(jī)的智能臺燈設(shè)計(任務(wù)書、原理圖、PCB、源代碼、參考論wen)

文章出處:【微信號:精通單片機(jī)與嵌入式,微信公眾號:精通單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于51單片機(jī)智能臺燈演示

    單片機(jī)臺燈51單片機(jī)智能臺燈
    jf_06209345
    發(fā)布于 :2022年07月23日 00:26:54

    哪位大神會仿真基于51單片機(jī)智能臺燈???????

    ????????????????????????????????????????
    發(fā)表于 03-22 22:20

    基于51單片機(jī)智能臺燈

    請問下有人用過熱釋電紅外傳感芯片biss0001嗎?我這樣連接一個光敏電阻有沒有問題?
    發(fā)表于 03-18 16:35

    一種基于51單片機(jī)智能臺燈設(shè)計

    系統(tǒng)由STC89C52單片機(jī)+L數(shù)碼管+光敏電阻+人體感應(yīng)模塊+紅外接近傳感器模塊構(gòu)成。具體功能:(1)亮度不夠且有人靠近時臺燈自動亮;(2)靠的太近會提醒坐姿不正(蜂鳴器);(3)附近無人時臺燈
    發(fā)表于 07-01 06:05

    如何實現(xiàn)基于51單片機(jī)智能臺燈的設(shè)計?

    如何實現(xiàn)基于51單片機(jī)智能臺燈的設(shè)計?
    發(fā)表于 10-21 08:19

    如何去實現(xiàn)一種基于51單片機(jī)智能臺燈設(shè)計

    一.硬件方案本文介紹了一種基于PWM調(diào)光的智能臺燈設(shè)計。把單片機(jī)技術(shù)和PWM調(diào)光技術(shù)結(jié)合起來實現(xiàn)臺燈光強(qiáng)的調(diào)節(jié)。即在不改變PWM方波周期的前提下,利用
    發(fā)表于 11-18 08:24

    基于51單片機(jī)的藍(lán)牙智能臺燈設(shè)計

    基于51單片機(jī)的藍(lán)牙智能臺燈目錄 基于51單片機(jī)的藍(lán)牙智能
    發(fā)表于 12-01 07:36

    基于51單片機(jī)智能臺燈

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)智能臺燈.zip》資料免費(fèi)下載
    發(fā)表于 05-26 08:00 ?187次下載

    基于51單片機(jī)智能臺燈設(shè)計

    一.硬件方案本文介紹了一種基于PWM調(diào)光的智能臺燈設(shè)計。把單片機(jī)技術(shù)和PWM調(diào)光技術(shù)結(jié)合起來實現(xiàn)臺燈光強(qiáng)的調(diào)節(jié)。即在不改變PWM方波周期的前提下,利用
    發(fā)表于 11-12 10:51 ?46次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>智能</b><b class='flag-5'>臺燈</b>設(shè)計

    基于51單片機(jī)的藍(lán)牙臺燈

    基于51單片機(jī)的藍(lán)牙臺燈
    發(fā)表于 11-12 15:06 ?26次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的藍(lán)牙<b class='flag-5'>臺燈</b>

    50-基于51單片機(jī)智能臺燈設(shè)計

    系統(tǒng)由STC89C52單片機(jī)+L數(shù)碼管+光敏電阻+人體感應(yīng)模塊+紅外接近傳感器模塊構(gòu)成。具體功能:(1)亮度不夠且有人靠近時臺燈自動亮;(2)靠的太近會提醒坐姿不正(蜂鳴器);(3)附近無人時臺燈
    發(fā)表于 11-13 10:36 ?20次下載
    50-基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>智能</b><b class='flag-5'>臺燈</b>設(shè)計

    基于AT89C51單片機(jī)智能臺燈設(shè)計

    系統(tǒng)內(nèi)使用AT89C51單片機(jī)作為主控,系統(tǒng)內(nèi)分為普通模式和調(diào)節(jié)模式,上電之后就是普通模式,小燈會亮但是不能進(jìn)行亮度調(diào)節(jié),按下設(shè)置按鍵后亮度可調(diào)節(jié)的小燈亮,通過加減按鍵就能直接控制小燈的亮度。
    發(fā)表于 09-27 15:55 ?2481次閱讀

    基于51單片機(jī)智能臺燈帶坐姿矯正覆銅板設(shè)計技術(shù)手冊

    基于51單片機(jī)智能臺燈帶坐姿矯正覆銅板設(shè)計技術(shù)手冊
    發(fā)表于 09-18 10:52 ?2次下載

    基于51單片機(jī)智能臺燈洞洞板設(shè)計技術(shù)手冊

    基于51單片機(jī)智能臺燈洞洞板設(shè)計技術(shù)手冊
    發(fā)表于 09-18 11:06 ?30次下載

    基于51單片機(jī)智能臺燈覆銅板設(shè)計技術(shù)手冊

    基于51單片機(jī)智能臺燈覆銅板設(shè)計技術(shù)手冊
    發(fā)表于 09-18 10:49 ?15次下載
    RM新时代网站-首页