久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 單片機(jī)自動(dòng)感應(yīng)環(huán)境光的調(diào)光控制器程序+電路設(shè)計(jì) [打印本頁]

作者: 175445946    時(shí)間: 2019-6-12 14:59
標(biāo)題: 單片機(jī)自動(dòng)感應(yīng)環(huán)境光的調(diào)光控制器程序+電路設(shè)計(jì)
1)設(shè)計(jì)一個(gè)環(huán)境光亮度檢測(cè)電路,并根據(jù)環(huán)境亮度進(jìn)行臺(tái)燈光照強(qiáng)度的自動(dòng)調(diào)節(jié);
2)采用多只LED指示亮度等級(jí),環(huán)境亮度達(dá)到最高時(shí),自動(dòng)關(guān)閉;
3)拓展部分:具有LED數(shù)碼顯示亮度等級(jí)功能;
4)安裝、調(diào)試電路,記錄調(diào)零、測(cè)試的數(shù)據(jù),進(jìn)行測(cè)試、分析。

2.1 設(shè)計(jì)的總體方案
無論LED是經(jīng)由降壓、升壓、降壓/升壓或線性穩(wěn)壓器驅(qū)動(dòng),連接每一個(gè)驅(qū)動(dòng)電路最常見的線程就是須要控制光的輸出。。目前,針對(duì)亮度控制方面,主要的兩種解決方案為線性調(diào)節(jié)LED的電流(模擬調(diào)光)或在肉眼無法察覺的高頻下,讓驅(qū)動(dòng)電流從0到目標(biāo)電流值之間來回切換(數(shù)字調(diào)光)。利用脈沖寬度調(diào)變(PWM)來設(shè)定循環(huán)和工作周期可能是實(shí)現(xiàn)數(shù)字調(diào)光的最簡(jiǎn)單的方法。
PWM方法的基本思想是利用單片機(jī)具有的PWM端口,在不改變PWM方波周期的前提下,通過軟件的方法調(diào)整單片機(jī)的PWM控制寄存器來調(diào)整PWM的占空比,從而控制充電電流。本方法把設(shè)定的充電電流與實(shí)際讀取到的充電電流進(jìn)行比較,若實(shí)際電流偏小則向增加充電電流的方向調(diào)整PWM的占空比,LED燈光度變亮;若實(shí)際電流偏大則向減小充電電流的方向調(diào)整PWM的占空比,LED燈光度變暗。本文介紹了以STC12C5A60S2為控制核心,通過光敏電阻感應(yīng)光度,并利用PWM調(diào)光技術(shù)對(duì)LED進(jìn)行光度的自動(dòng)調(diào)節(jié)。
2.2 設(shè)計(jì)的總體構(gòu)思及框圖
基于STC單片機(jī)的PWM調(diào)光是以STC12C5A60S2作為主控芯片,設(shè)置了手動(dòng)控制和自動(dòng)控制。在手動(dòng)控制時(shí),分為三檔,輸出不同的PWM占空比對(duì)LED的電流進(jìn)行控制,從而實(shí)現(xiàn)了對(duì)光度的手動(dòng)調(diào)節(jié)。在自動(dòng)控制時(shí),通過STC12C5A60S2內(nèi)部模擬-數(shù)字不斷檢驗(yàn)光敏電阻的電壓來間接測(cè)量感應(yīng)光度,將電壓和預(yù)設(shè)的閾值進(jìn)行對(duì)比,調(diào)整PWM的占空比對(duì)LED的電流進(jìn)行控制,從而實(shí)現(xiàn)了對(duì)光度的自動(dòng)調(diào)節(jié)。如圖2-1所示為設(shè)計(jì)的總體框圖。

圖2-1 總體框圖

第3章 系統(tǒng)硬件電路設(shè)計(jì)

3.1 STC12C5A60S2單片機(jī)簡(jiǎn)介
STC12C5A60S2是STC生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),是高速、低功耗、超強(qiáng)抗干擾的新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換,針對(duì)電機(jī)控制,強(qiáng)干擾場(chǎng)合。

    利用STC12C5A60S2的IO口P1.1接收光敏電阻采集的當(dāng)前光照測(cè)檢測(cè)輸出數(shù)據(jù)。IO口P1.3產(chǎn)生產(chǎn)生相應(yīng)的PWM波,給高亮度LED,從而有不同的光照。IO口P0作為L(zhǎng)CD液晶顯示器的數(shù)據(jù)/指令輸入端口。

STC12C5A60S2單片機(jī)的時(shí)鐘電路采用的是內(nèi)部的時(shí)鐘電路,利用單片機(jī)內(nèi)部的振蕩電路,并在XLAT1和XLAT2兩引腳間外接石英晶體和電容構(gòu)成的并聯(lián)諧振電路,使內(nèi)部振蕩器產(chǎn)生自激振蕩。石英晶體Y1頻率是12.0M,C1和C2是30pf。STC12C5A60S2單片機(jī)最小系統(tǒng)線路圖如圖3-1所示。

      

  圖3-1  STC12C5A60S2單片機(jī)最小系統(tǒng)線路圖

3.2 A/D轉(zhuǎn)換電路
A/D轉(zhuǎn)換是用來通過一定的電路將模擬量轉(zhuǎn)變?yōu)閿?shù)字量。模擬量可以是電壓、電流等電信號(hào),也可以是壓力、溫度、濕度、位移、聲音等非電信號(hào)。但在A/D轉(zhuǎn)換前,輸入到A/D轉(zhuǎn)換器的輸入信號(hào)必須經(jīng)各種傳感器把各種物理量轉(zhuǎn)換成電壓信號(hào)。

將模擬量或連續(xù)變化的量進(jìn)行量化(離散化),轉(zhuǎn)換為相應(yīng)的數(shù)字量的電路。 A/D變換包含三個(gè)部分:抽樣、量化和編碼。一般情況下,量化和編碼是同時(shí)完成的。 抽樣是將模擬信號(hào)在時(shí)間上離散化的過程; 量化是將模擬信號(hào)在幅度上離散化的過程; 編碼是指將每個(gè)量化后的樣值用一定的二進(jìn)制代碼來表示。

采集光照強(qiáng)度運(yùn)用光敏電阻和電位器來構(gòu)成信號(hào)采集電路。AD轉(zhuǎn)換電路有STC12內(nèi)部10位AD組成。STC125A60S2內(nèi)部AD基準(zhǔn)電壓5V,輸入電壓范圍為0~5V,輸出數(shù)字量最大值為1024。如圖3-2所示為信號(hào)采集電路。

圖3-2 信號(hào)采集電路
3.3 LED驅(qū)動(dòng)
脈寬調(diào)制(PWM)是利用微處理器的數(shù)字輸出來對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),廣泛應(yīng)用在從測(cè)量、通信到功率控制與變換及LED照明等許多領(lǐng)域中。通過以數(shù)字方式控制模擬電路,可以大幅度降低系統(tǒng)的成本和功耗。LED器件對(duì)驅(qū)動(dòng)電源的要求近乎于苛刻,LED不像普通的白熾燈泡,可以直接連接220V的交流市電。LED是2~3伏的低電壓驅(qū)動(dòng),必須要設(shè)計(jì)復(fù)雜的變換電路,不同用途的LED燈,要配備不同的電源適配器。
電流控制LED的亮度,通過控制電流調(diào)節(jié)LED燈的亮度。利用公式i*t/T可知,利用調(diào)整PWM不同的占空比t/T就可以控制電流的大小。電流由三極管9013提供驅(qū)動(dòng),PWM由P1.3輸出,低電平有效。如圖3-3所示為PWM電路。

         

圖3-3 PWM電路

3.4 LCD顯示電路
1602采用標(biāo)準(zhǔn)的16腳接口,本設(shè)計(jì)當(dāng)前光照采用的是LCD1602顯示檢測(cè)信息。所以單片機(jī)需要給LCD分配3位個(gè)控制信號(hào)IO口和8位數(shù)據(jù)傳輸IO口,LCD的EN控制端連接P2.2,RS控制端連接P2.0,RW控制端連接P2.1,8位據(jù)總線連接PO口。如圖3-4所示為L(zhǎng)CD電路。

         

圖3-4 LCD電路

3.5 按鍵切換手動(dòng)和自動(dòng)
K3按下為自動(dòng)控制,K4按下為手動(dòng)控制,來回按K3、K4切換。當(dāng)手動(dòng)按鍵按下時(shí),K1為L(zhǎng)ED亮度增加,當(dāng)增加到最大值自動(dòng)為最小,K2為L(zhǎng)ED亮度減小,當(dāng)減少到最小值時(shí)自動(dòng)為最大。
按鍵電路的工作原理:芯片的控制器通過讀取I/O口的信息(可采用逐位讀入,或者整個(gè)字節(jié)讀入的方法),來判斷哪一個(gè)按鍵被按下(或哪幾個(gè)按鍵被同時(shí)按下),按下按鍵時(shí)I/O位的信息為”高電位“。然后根據(jù)內(nèi)部設(shè)定的判斷,轉(zhuǎn)去執(zhí)行相應(yīng)的程序。如圖3-5所示為按鍵電路:

            

圖3-5 按鍵電路

3.6 光敏電阻
光敏電阻器是利用半導(dǎo)體的光電導(dǎo)效應(yīng)制成的一種電阻值隨入射光的強(qiáng)弱而改變的電阻器,又稱為光電導(dǎo)探測(cè)器;入射光強(qiáng),電阻減小,入射光弱,電阻增大。還有另一種入射光弱,電阻減小,入射光強(qiáng),電阻增大。
光敏電阻器一般用于光的測(cè)量、光的控制和光電轉(zhuǎn)換(將光的變化轉(zhuǎn)換為電的變化)。常用的光敏電阻器硫化鎘光敏電阻器,它是由半導(dǎo)體材料制成的。光敏電阻器對(duì)光的敏感性(即光譜特性)與人眼對(duì)可見光(0.4~0.76)μm的響應(yīng)很接近,只要人眼可感受的光,都會(huì)引起它的阻值變化。設(shè)計(jì)光控電路時(shí),都用白熾燈泡(小電珠)光線或自然光線作控制光源,使設(shè)計(jì)大為簡(jiǎn)化。光敏電路如圖3-6所示:

  

   圖3-6 光敏電路

3.7 電源設(shè)計(jì)

電源電路是指提供給用電設(shè)備電力供應(yīng)的電源部分的電路設(shè)計(jì),使用的電路形式和特點(diǎn)。常見的電源電路有交流電源電路、直流電源電路等。

此次采用 78XX系列固定三端穩(wěn)壓器穩(wěn)壓,三端正穩(wěn)壓電路,能提供多種固定的輸出電壓,應(yīng)用范圍廣,內(nèi)含過流,過熱和過載保護(hù)電路。降壓穩(wěn)壓部分由三端穩(wěn)壓管7805、電解電容組成,將9V轉(zhuǎn)換成穩(wěn)定的5V。如圖3-7所示為電源電路。

   

圖3-7 電源電路

第4章 系統(tǒng)軟件設(shè)計(jì)

4.1 系統(tǒng)流程圖
  此次系統(tǒng)軟件設(shè)計(jì)利用信號(hào)采集電路讀取當(dāng)前亮度,并通過程序及系統(tǒng)判斷其亮度是否大于設(shè)定亮度,是則減小PWM輸出,否則增大PWM輸出,通過程序所得PWM值調(diào)節(jié)LED亮度,從而控制系統(tǒng)達(dá)到調(diào)光功能。程序流程圖如圖4-1所示:

圖4-1 程序流程圖

4.2 系統(tǒng)程序

  1. #include" STC12c5a.h" //stc頭文件
  2. #include"intrins.h" //包含_nop_空操作的定義
  3. typedef unsigned char uchar;
  4. typedef unsigned int  uint;
  5. sbit RW=P2^1;//寫入時(shí)一直為低電平,讀出時(shí)為高。
  6. sbit RS=P2^0; //指令數(shù)據(jù)選擇端
  7. sbit LCDEN=P2^2;//使能端
  8. sbit key1=P3^0;
  9. sbit key2=P3^1;
  10. sbit key3=P3^2;
  11. sbit key4=P3^3;
  12. uchar j=0;
  13. void AD_init();//AD初始化
  14. //函數(shù)聲明
  15. void delay(uint a);
  16. uint AD_work(uchar channel);
  17. uint  AD_get(uchar channel);
  18. uchar disbuf[]=" illumin: .    ";
  19. uchar PWM[]={0xec,0xe7,0xe0,0xda,0xd3,0xcd,0xc0,0xa6,0x9a,0x80,0x33,0x00} ;              //                92.5%-0%
  20. void pwm_set(unsigned char a);
  21. void pwm_init()
  22. {
  23. CCON=0; //PCA初始化
  24. CH=0;                //PCA              高8位
  25. CL=0;                //PCA              低8位
  26. CMOD=0x00;  //f=sysclk/256/12
  27. CCAPM0=0x42;              //p1.3
  28. PCA_PWM0=0x00;
  29. CR=1;  //啟動(dòng)PCA計(jì)數(shù)器
  30. }
  31. void pwm_set(unsigned char a)              //占空比設(shè)置
  32. {
  33. CCAP0H=CCAP0L=a;
  34. }
  35. void write_com(uchar com )
  36. {
  37. RS=0;
  38. RW=0;
  39. LCDEN=0;
  40. P0=com ;
  41. delay(5);
  42. LCDEN=1;
  43. delay(5);
  44. LCDEN=0;
  45. }
  46. void write_dat(uchar date)
  47. {
  48. RW=0;
  49. RS=1;
  50. LCDEN=0;
  51. P0=date;
  52. delay(5);
  53. LCDEN=1;
  54. delay(5);
  55. LCDEN=0;
  56. }
  57. //液晶初始化
  58. void LCDinit()
  59. {
  60. write_com(0x0c);
  61. write_com(0x06);
  62. write_com(0x01);
  63. write_com(0x38);
  64. }
  65. void  display(unsigned int z)
  66. {
  67. uchar i;
  68. disbuf[9]=z%1000/100+0x30;
  69. disbuf[11]=z%100/10+0x30;
  70. disbuf[12]=z%10+0x30;
  71. for(i=0;i<13;i++)
  72. write_dat(disbuf[i]);
  73. }
  74. void main()
  75. {
  76. AD_get(1);
  77. AD_init(); //A/D轉(zhuǎn)換初始化
  78. LCDinit(); //液晶初始化
  79. pwm_init();//照度檢測(cè)
  80. pwm_set(0xda);
  81. delay(200);
  82. while(1)
  83. {
  84. write_com(0x80);
  85. display(AD_work(1));
  86. if(key3==0)
  87. {
  88. delay(5);
  89. if(key3==0)                                                                                    //自動(dòng)模式
  90. {
  91. while(key4==1)
  92. {
  93. write_com(0x80);
  94. display(AD_work(1));
  95. if(AD_work(1)>=900)
  96. pwm_set(0xEC);                 
  97. if((850<=AD_work(1))&&(AD_work(1)<900))
  98. pwm_set(0xE7);
  99. if((750<=AD_work(1))&&(AD_work(1)<850))
  100. pwm_set(0xe0);
  101. if((700<=AD_work(1))&&(AD_work(1)<750))
  102. pwm_set(0xda);
  103. if((600<=AD_work(1))&&(AD_work(1)<700))
  104. pwm_set(0xd3);
  105. if((500<=AD_work(1))&&(AD_work(1)<600))
  106. pwm_set(0xCD);
  107. if((400<=AD_work(1))&&(AD_work(1)<500))
  108. pwm_set(0xC0);
  109. if((300<=AD_work(1))&&(AD_work(1)<400))
  110. pwm_set(0xA6);
  111. if((200<=AD_work(1))&&(AD_work(1)<300))
  112. pwm_set(0x9A);
  113. if((150<=AD_work(1))&&(AD_work(1)<200))
  114. pwm_set(0x80);
  115. if((100<=AD_work(1))&&(AD_work(1)<150))
  116. pwm_set(0x33);
  117. if(AD_work(1)<100 )
  118. pwm_set(0x00);
  119. }
  120. }
  121. }
  122. if(key4==0)                                                                                    // 手動(dòng)模式
  123. {
  124. delay(5);
  125. if(key4==0)
  126. {
  127. while(key3==1)
  128. {
  129. write_com(0x80);
  130. display(AD_work(1));
  131. if(key1==0)
  132. {
  133. delay(5);
  134. if(key1==0)
  135. {
  136. if(j==11)
  137. j=0;
  138. pwm_set((PWM[j++]));
  139. }
  140. }
  141. if(key2==0)
  142. {
  143. delay(5);
  144. if(key2==0)
  145. {
  146. if(j==0)
  147. j=11;
  148. pwm_set((PWM[j--]));
  149. }
  150. }
  151. }
  152. }
  153. }
  154. }
  155. }
  156. uint AD_get(uchar channel)
  157. {
  158. ADC_CONTR=0x88|channel;    //開啟AD轉(zhuǎn)換1000 1000 即POWER SPEED1 SPEED0 ADC_FLAG   ADC_START CHS2 CHS1 CHS0
  159. _nop_(); _nop_(); _nop_(); _nop_();//要經(jīng)過4個(gè)CPU時(shí)鐘的延時(shí),其值才能夠保證被設(shè)置進(jìn)ADC_CONTR 寄存器
  160. while(!(ADC_CONTR&0x10));    //等待轉(zhuǎn)換完成
  161. ADC_CONTR&=0xe7;      //關(guān)閉AD轉(zhuǎn)換,ADC_FLAG位由軟件清0
  162. return(ADC_RES*4+ADC_RESL);   //返回AD轉(zhuǎn)換完成的10位數(shù)據(jù)(16進(jìn)制)
  163. }
  164. /*unsigned char GETADCResult()//AD轉(zhuǎn)換
  165. {
  166. unsigned char AD;
  167. ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START;
  168. _nop_();
  169. _nop_();
  170. _nop_();
  171. _nop_();
  172. while(!(ADC_CONTR&ADC_FLAG));
  173. ADC_CONTR&=~ADC_FLAG;//關(guān)閉AD
  174. Vo=ADC_RES*5*10/256              ;
  175. return Vo;
  176. }
  177. uint AD_work(uchar channel)
  178. {
  179. float AD_val;     //定義處理后的數(shù)值A(chǔ)D_val為浮點(diǎn)數(shù)
  180. uchar i;
  181. uint AD_V;
  182. for(i=0;i<100;i++)
  183. AD_val+=AD_get(channel); //轉(zhuǎn)換100次求平均值(提高精度)
  184. AD_val/=100;
  185. AD_V=(uint)AD_val;
  186. return AD_V;
  187. }
  188. void delay(uint a) //延時(shí)約1ms
  189. {
  190. uint i;
  191. while (--a!=0)
  192. for(i=600;i>0;i--);   //1T單片機(jī)i=600,若是12T單片機(jī)i=125
  193. }
  194. void AD_init()
  195. {
  196. P1ASF=0x02; //P1.1 作為模擬功能AD使用                                                                                                
  197. ADC_RES=0;   //清零轉(zhuǎn)換結(jié)果寄存器高8位
  198. ADC_RESL=0; //清零轉(zhuǎn)換結(jié)果寄存器低2位
  199. ADC_CONTR=0x80;//開啟AD電源
  200. delay(2);   //等待1ms,讓AD電源穩(wěn)定
  201. ES=1;
  202. EA=1;
  203. }
復(fù)制代碼

第5章 系統(tǒng)仿真及調(diào)試
5.1 軟件調(diào)試
軟件程序設(shè)計(jì)對(duì)單片機(jī)的I/O接口的控制,智能光控臺(tái)燈主要通過光控電路對(duì)光的感應(yīng)以達(dá)到輸出端口的控制,在黑暗時(shí)光控部分輸出高電平,通過單片機(jī)內(nèi)部程序的控制以光控輸出高電平為準(zhǔn),給輸出端口定義低電平,臺(tái)燈是以低電平有效,當(dāng)單片機(jī)輸出端達(dá)到低電平時(shí)臺(tái)燈亮。
5.2 系統(tǒng)仿真
系統(tǒng)的硬件及軟件都已經(jīng)調(diào)試完成,然后利用protues進(jìn)行系統(tǒng)仿真。在仿真中,利用光敏電阻模擬天黑天亮,用滑動(dòng)變阻器來調(diào)整光亮的強(qiáng)度。
仿真圖如圖5-1所示。

   

圖5-1 光照強(qiáng)度強(qiáng)仿真圖

然后,調(diào)整光敏電阻阻值,使之達(dá)到天黑的效果。此時(shí),單片機(jī)控制臺(tái)燈亮,仿真效果圖如圖5-2所示。

圖5-2 光照強(qiáng)度弱仿真圖


完整的Word格式文檔51黑下載地址:

自動(dòng)感應(yīng)環(huán)境光的調(diào)光控制器.docx (202.95 KB, 下載次數(shù): 75)



作者: 247015164    時(shí)間: 2019-9-16 20:15
謝謝樓主的分享
作者: 125844584    時(shí)間: 2020-3-30 15:24
求樓主程序頭文件




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一区二区在线不卡 | 完全免费在线视频 | 亚洲精品成人免费 | 成人免费在线视频 | 日本在线视频不卡 | 亚洲视频中文 | 婷婷成人在线 | 日本一区二区在线视频 | a级黄色网 | 欧美精品一区二区三区蜜桃视频 | 欧美一级二级视频 | 毛片视频网站 | 亚洲一区二区三区四区五区中文 | 一区二区精品在线 | 最新国产精品 | 亚洲精品视频一区二区三区 | 亚洲视频二区 | 欧美日韩亚 | 羞羞视频免费在线观看 | 中文字幕视频在线 | 超碰电影 | 日韩视频在线一区 | 波多野吉衣久久 | 国产中文一区二区三区 | 国产人成精品一区二区三 | 国产精品久久久久久久久图文区 | 97精品国产97久久久久久免费 | 欧美精品一区二区三区在线 | 精品久久久久久久久久久久久久久久久 | 久久一区二区视频 | 一级a性色生活片久久毛片 午夜精品在线观看 | 不卡在线一区 | 最新中文字幕 | 激情欧美日韩一区二区 | 免费观看黄色一级片 | 欧美久久天堂 | 国产精品久久 | 夜夜av| 色屁屁在线观看 | 中文字幕亚洲区 | 男女羞羞视频在线看 |