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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4422|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

12單片機(jī)的PWM智能照明燈程序設(shè)計(jì)+APPE4A源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
為什么使用STC12C5A60S2是因?yàn)樗詭Я薖CA和ADC,PCA可以配置為8位PWM。材料清單:

材料
數(shù)量
IC鎖緊座活動(dòng)插座
1
STC12C5A60S2
1
IR2104
1
TPS7333
1
B1205S-2W
1
1N5819
3
1N4729
1
74LVC245
1
IR7843
2
HC-05
1
HC-SR1
1
DHT11
1
電容電阻排針
若干
以上是材料清單,其中還需要一個(gè)COB燈和12v2a以上電源。COB燈需要是12V供電的,或者也有能力的自己改。
之前我有發(fā)過(guò)簡(jiǎn)單的半成品,現(xiàn)在快工作了,我這個(gè)設(shè)計(jì)已經(jīng)做好了,也馬上答辯了。
先介紹介紹功能吧:
    1.設(shè)計(jì)具備日期時(shí)間顯示功能,應(yīng)用程序上顯示日期/時(shí)間/光線強(qiáng)度等級(jí)等內(nèi)容。
2.光線強(qiáng)度有0~10共10個(gè)等級(jí),等級(jí)越高表示照明燈越亮。
3.系統(tǒng)具有自動(dòng)/手動(dòng)模式,可通過(guò)遙控器隨時(shí)切換:
1)自動(dòng)模式:人體紅外模塊用于檢測(cè)是否有人。當(dāng)有人時(shí),照明燈根據(jù)照明情況自動(dòng)調(diào)節(jié)亮度。燈光越強(qiáng),亮度越暗,燈光越弱,照明燈的亮度就越強(qiáng)。當(dāng)檢測(cè)沒(méi)有人的時(shí)候,延遲30秒后,照明燈自動(dòng)關(guān)閉;
2)手動(dòng)模式:通過(guò)按鍵調(diào)節(jié)燈光亮度。
其中遙控是APP遙控,顯示溫濕度也是APP顯示(此處APP是由E4A編寫(xiě)).
APP功能介紹:注冊(cè)登錄功能(我不是計(jì)算機(jī)專業(yè),不是用數(shù)據(jù)庫(kù),是自己想出來(lái)的一個(gè)很簡(jiǎn)單的方法)。檢測(cè)更新功能,找回密碼功能,綁定設(shè)備功能(綁定設(shè)備不完善,一個(gè)賬號(hào)目前智能綁定一個(gè)設(shè)備,這個(gè)功能很可能有bug,但是這些不屬于我設(shè)計(jì)的要求功能,所以我也就沒(méi)有特別去完善),其他就是控制電路和顯示溫濕度亮度等級(jí)了,源碼中我會(huì)刪除我的服務(wù)器信息使用******代替,這個(gè)服務(wù)器就是一個(gè)FTP空間和一個(gè)域名就可以了,網(wǎng)上有很多免費(fèi)的。
一下是部分代碼(中文注釋亂碼了,不過(guò)工程里沒(méi)有):
  1. #include "STC12C5A.h"
  2. #include "string.h"
  3. #include "stdio.h"
  4. #include "DELAY.H"
  5. #include "adc.h"
  6. #include "intrins.h"
  7. #define uint unsigned int         //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
  8. #define uchar unsigned char
  9. /************************************************************
  10. 因?yàn)?2單片機(jī)的AD不支持位尋址,所以用|定義寄存器執(zhí)行位。
  11. **************************************************************/

  12. sbit RT = P2^0;   //溫濕度數(shù)據(jù)引腳
  13. sbit ren = P2^1;  //人體傳感器引腳
  14. sbit led = P3^7;

  15. uchar TH_temp,TL_temp,RH_temp,RL_temp,KEY_temp;//溫濕度高低位以及驗(yàn)證密鑰
  16. uchar count,temp,flag,time_ren,flag_ren;      //藍(lán)牙數(shù)據(jù)發(fā)送的計(jì)數(shù)緩存和溫濕度讀取標(biāo)志位等
  17. uchar comdata;                                 //DHT11返回的數(shù)據(jù)
  18. uchar ADC_DATA;                                //模數(shù)轉(zhuǎn)換后亮度數(shù)據(jù)
  19. outdata[5];                                    //藍(lán)牙發(fā)送數(shù)組
  20. uchar str[6]="012345";                         //要發(fā)送數(shù)據(jù)的緩存之地
  21. uchar model;
  22. uchar AUTO,PWM_DATA;
  23. char CMD[10];                                  //接收指令數(shù)據(jù)的緩存之地
  24. int CMD_COUNT=0,DATA_MAX;                      //接收數(shù)據(jù)的計(jì)數(shù)和數(shù)據(jù)最長(zhǎng)位數(shù)限制

  25. SendData(uchar *a)
  26. {
  27.         outdata[0] = a[0];
  28.         outdata[1] = a[1];
  29.         outdata[2] = a[2];
  30.         outdata[3] = a[3];
  31.         outdata[4] = a[4];
  32.         outdata[5] = a[5];
  33.         count = 1;
  34.         SBUF=outdata[0];
  35. }

  36. void init_pwm()
  37. {
  38.         CMOD = 0x02; //用定時(shí)器0溢出做PCA脈沖
  39.         CL = 0x00; //PCA定時(shí)器低8位 地址:E9H
  40.         CH = 0x00; //PCA高8位 地址 F9H
  41.         CCON=0x00;
  42.         CCAP0H = CCAP0L = 255; //PWM模式時(shí)他倆用來(lái)控制占空比   128=50%   0=100%  256=0%
  43.         CCAPM0 = 0x42;
  44. //0100,0010 Setup PCA module 0 in PWM mode
  45. // ECOM0=1使能比較 PWM0=1 使能CEX0腳用作脈寬調(diào)節(jié)輸出
  46. /******************************************************************
  47. PCA 模塊工作模式設(shè)置 (CCAPMn 寄存器 n= 0-3四種)
  48. 7     6        5        4       3       2     1      0
  49. -   ECOMn   CAPPn     CAPNn   MATn     TOGn   PWMn   ECCFn
  50. 選項(xiàng): 0x00 無(wú)此操作
  51.        0x20 16位捕捉模式,由 CEXn上升沿觸發(fā)
  52.        0x10 16位捕捉模式,由CEXn下降沿觸發(fā)
  53.        0x30 16位捕捉模式,由CEXn的跳變觸發(fā)
  54.        0x48 16位軟件定時(shí)器
  55.        0x4c 16位高速輸出
  56.        0x42  8位PWM輸出
  57. 每個(gè)PCA模塊另外還對(duì)應(yīng)兩個(gè)寄存器:CCAPnH和CCAPnL 。  捕獲或者比較時(shí),它們用來(lái)
  58. 保存16位計(jì)數(shù)值,當(dāng)工作于PWM模式時(shí),用來(lái)控制占空比
  59. **************************************************************************************/      
  60.         CR=1; //Start PCA Timer.

  61. }
  62. void UsartInit()
  63. {     
  64.         TMOD=0X20;                        //設(shè)置計(jì)數(shù)器工作方式2
  65.         TH1=253;                                //計(jì)數(shù)器初始值設(shè)置,注意波特率是9600的,晶振11.0592
  66.         TL1=253;
  67.         SCON=0X50;                        //設(shè)置為工作方式1
  68.         TR1=1;
  69.         ES=1;                                                //打開(kāi)接收中斷
  70.         EA=1;                                                //打開(kāi)總中斷                                             //打開(kāi)計(jì)數(shù)器   
  71.         
  72. }
  73. /**********************************************************************
  74. 功能;設(shè)置占空比
  75. ***********************************************************************/
  76. void set_pwm(uchar ZKB)
  77. {
  78.         CCAP0H = CCAP0L = ZKB;
  79. }
  80. void  COM(void)
  81. {
  82.         uchar i;               
  83.         for(i=0;i<8;i++)           
  84.         {
  85.         
  86.                 flag=2;        
  87.                 while((!RT)&&flag++);
  88.                 Delay10u();
  89.                         Delay10u();
  90.                 Delay10u();
  91.                         temp=0;
  92.                  if(RT)temp=1;
  93.                         flag=2;
  94.          while((RT)&&flag++);
  95.                 //超時(shí)則跳出for循環(huán)                  
  96.                  if(flag==1)break;
  97.                 //判斷數(shù)據(jù)位是0還是1         
  98.                         
  99.         // 如果高電平高過(guò)預(yù)定0高電平值則數(shù)據(jù)位為 1
  100.                  
  101.                  comdata<<=1;
  102.                          comdata|=temp;        //0
  103.         }//rof
  104.          
  105. }

  106.         //--------------------------------
  107.         //-----濕度讀取子程序 ------------
  108.         //--------------------------------
  109.         //----以下變量均為全局變量--------
  110.         //----溫度高8位== TH------
  111.         //----溫度低8位== TL------
  112.         //----濕度高8位== RH-----
  113.         //----濕度低8位== RL-----
  114.         //----校驗(yàn) 8位 == KEY-----
  115.         //----調(diào)用相關(guān)子程序如下----------
  116.         //---- Delay();, Delay_10us();,COM();
  117.         //--------------------------------

  118.         void Readdata(void)
  119.         {
  120.           //主機(jī)拉低18ms
  121.        RT=0;
  122.            Delay18ms();
  123.            RT=1;
  124.          //總線由上拉電阻拉高 主機(jī)延時(shí)20us
  125.            Delay10u();
  126.            Delay10u();
  127.            Delay10u();
  128.            Delay10u();
  129.          //主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號(hào)
  130.            RT=1;
  131.          //判斷從機(jī)是否有低電平響應(yīng)信號(hào) 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行         
  132.            if(!RT)                 
  133.            {
  134.            flag=2;
  135.          //判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束         
  136.            while((!RT)&&flag++);
  137.            flag=2;
  138.          //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
  139.            while((RT)&&flag++);
  140.          //數(shù)據(jù)接收狀態(tài)                 
  141.            COM();
  142.            RH_temp=comdata;
  143.            COM();
  144.            RL_temp=comdata;
  145.            COM();
  146.            TH_temp=comdata;
  147.            COM();
  148.            TL_temp=comdata;
  149.            COM();
  150.            KEY_temp=comdata;
  151.            RT=1;
  152.          //數(shù)據(jù)校驗(yàn)
  153.          
  154.            temp=(TH_temp+TL_temp+RH_temp+RL_temp);
  155.            if(temp==KEY_temp)
  156.            {
  157.                      str[0]=RH_temp;
  158.                      str[1]=RL_temp;
  159.                     str[2]=TH_temp;
  160.                      str[3]=TL_temp;
  161.                      str[4]=KEY_temp;
  162.            }//fi
  163.            }//fi

  164. }
  165. void main()
  166. {
  167.         uint ge,shi,bai;
  168.         UsartInit();//串口初始化
  169.         ADC_Init(0x01);
  170.         init_pwm();//PWM初始化
  171.         DATA_MAX=3;
  172.         model=0;
  173.         CMD[0]='2';CMD[1]='5';CMD[2]='2';
  174.         while(1)
  175.         {
  176.                 if(CMD[0]=='S'&&CMD[1]=='D')model=0;
  177.                 if(CMD[0]=='Z'&&CMD[1]=='D')model=1;
  178.                 if(model==0)
  179.                 {
  180.                         if(CMD[0]=='0')       bai=0;
  181.                         else if(CMD[0]=='1')  bai=1;        
  182.                         else if(CMD[0]=='2')  bai=2;
  183.                         else if(CMD[0]=='3')  bai=3;
  184.                         else if(CMD[0]=='4')  bai=4;
  185.                         else if(CMD[0]=='5')  bai=5;
  186.                         else if(CMD[0]=='6')  bai=6;
  187.                         else if(CMD[0]=='7')  bai=7;
  188.                         else if(CMD[0]=='8')  bai=8;
  189.                         else if(CMD[0]=='9')  bai=9;
  190.                         else bai=-1;
  191.                         if(CMD[1]=='0')       shi=0;
  192.                         else if(CMD[1]=='1')  shi=1;
  193.                         else if(CMD[1]=='2')  shi=2;
  194.                         else if(CMD[1]=='3')  shi=3;
  195.                         else if(CMD[1]=='4')  shi=4;
  196.                         else if(CMD[1]=='5')  shi=5;
  197.                         else if(CMD[1]=='6')  shi=6;
  198.                         else if(CMD[1]=='7')  shi=7;
  199.                         else if(CMD[1]=='8')  shi=8;
  200.                         else if(CMD[1]=='9')  shi=9;
  201.                         else shi=-1;
  202.                         if(CMD[2]=='0')       ge=0;
  203.                         else if(CMD[2]=='1')  ge=1;
  204.                         else if(CMD[2]=='2')  ge=2;
  205.                         else if(CMD[2]=='3')  ge=3;
  206.                         else if(CMD[2]=='4')  ge=4;
  207.                         else if(CMD[2]=='5')  ge=5;
  208.                         else if(CMD[2]=='6')  ge=6;
  209.                         else if(CMD[2]=='7')  ge=7;
  210.                         else if(CMD[2]=='8')  ge=8;
  211.                         else if(CMD[2]=='9')  ge=9;
  212.                         else ge=-1;
  213.                         set_pwm(bai*100+shi*10+ge);
  214.                         ADC_DATA=bai*100+shi*10+ge;
  215.          }
  216.          if(model==1)
  217.          {
  218.                  if(ren==0){time_ren=time_ren+1;}
  219.                  if(time_ren>=15){flag_ren=1;time_ren=0;}
  220.                  if(ren==1){flag_ren=0;time_ren=0;}
  221.                  if(time_ren<=15&&flag_ren==0)
  222.                  {
  223.                          ADC_DATA=(Get_Adc_Average(0,5)*5*11.9/256);
  224.                          set_pwm(255-ADC_DATA);
  225.                  }
  226.                  if(flag_ren==1){ADC_DATA=0xff;set_pwm(255);}
  227.          }
  228.                 str[5]=ADC_DATA;
  229.                 Readdata();
  230.                
  231.                 //str[0]=AUTO;str[1]=ADC_DATA;str[2]=PWM_DATA;str[3]=str[0]*10+str[1];str[4]=((CMD[0]-0X30)*100+(CMD[1]-0X30)*10+(CMD[2]-0X30));
  232.                 SendData(str);
  233.                 Delay1000ms();Delay1000ms();
  234.           CMD_COUNT=0;
  235.         }
  236. }
  237. void Usart() interrupt 4
  238. {
  239.           if(RI==1)
  240.                 {
  241.                         if(CMD_COUNT>=DATA_MAX){CMD_COUNT=0;}   //大于該指令長(zhǎng)度清零
  242.                         CMD[CMD_COUNT]=SBUF;
  243.                         CMD_COUNT++;
  244.                         RI = 0;
  245.                 }
  246.                 if(TI==1) //發(fā)送中斷         
  247.                 {
  248.                         TI=0;
  249.                         if(count!=6) //發(fā)送完5位數(shù)據(jù)         
  250.                         {
  251.                                 SBUF= outdata[count];
  252.                                 count++;
  253.                         }
  254.                 }
  255. }
復(fù)制代碼

以下是原理圖截圖(PCB我就不提供了,我怕到時(shí)候別人說(shuō)我設(shè)計(jì)抄別人的,連PCB都一樣就很麻煩。):

app的話就不截圖了。。。,沒(méi)有server就用我編譯好的來(lái)試目前server我一直續(xù)費(fèi)。什么時(shí)候中斷我也不知道,其中主頁(yè)是我自己的網(wǎng)址,希望大家不要攻擊,因?yàn)檎娴臎](méi)有任何防御。。。。手下留情。。。。

全部資料51hei下載地址:

Sheet1.zip (29.02 KB, 下載次數(shù): 41)
stc12程序.zip (70.16 KB, 下載次數(shù): 47)
遙控器.zip (747.35 KB, 下載次數(shù): 61)

評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:229772 發(fā)表于 2020-5-17 18:55 | 只看該作者
我覺(jué)得資源還行啊
咋沒(méi)人
回復(fù)

使用道具 舉報(bào)

板凳
ID:754287 發(fā)表于 2020-5-17 20:54 | 只看該作者
2695154202 發(fā)表于 2020-5-17 18:55
我覺(jué)得資源還行啊
咋沒(méi)人

老哥,我的題目是51單片機(jī)的RGB燈,沒(méi)有整體電路原理圖
回復(fù)

使用道具 舉報(bào)

地板
ID:754287 發(fā)表于 2020-5-17 20:58 | 只看該作者
老哥啊在?
回復(fù)

使用道具 舉報(bào)

5#
ID:130231 發(fā)表于 2020-5-18 13:10 | 只看該作者
請(qǐng)教你在哪里做server?
回復(fù)

使用道具 舉報(bào)

6#
ID:229772 發(fā)表于 2020-5-21 20:29 | 只看該作者

在在在  我不知道為什么沒(méi)有新消息提醒,RGB的話看你是那種RGB,一般情況下三極管驅(qū)動(dòng)就夠了
回復(fù)

使用道具 舉報(bào)

7#
ID:229772 發(fā)表于 2020-5-21 20:30 | 只看該作者

就是免費(fèi)的空間FTP,APP里面填好地址賬號(hào)密碼端口默認(rèn)21就可以了
回復(fù)

使用道具 舉報(bào)

8#
ID:992710 發(fā)表于 2022-10-11 15:36 來(lái)自手機(jī) | 只看該作者
E4A源碼打不開(kāi)呀
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产欧美一区二区三区久久 | 亚洲精品第一国产综合野 | 狠狠亚洲 | 国产成人福利 | 久久久久黄色 | 久久久久久电影 | 91在线最新| 亚洲在线一区 | 亚洲欧洲在线视频 | 精品日韩在线 | 国产精品毛片一区二区在线看 | 国产精品网址 | 久久久高清| 精品国产精品三级精品av网址 | 91在线一区二区三区 | 国产视频中文字幕 | 日本小视频网站 | 精品欧美一区二区久久久伦 | 九一视频在线播放 | www狠狠干 | 亚洲色图综合 | 欧美一级二级视频 | 国产一区二区三区四区三区四 | 欧美日韩三级视频 | 国产精品一区二区三区四区 | 日日夜夜免费精品 | 国产人成精品一区二区三 | 欧美一区视频 | 欧美xxxx网站 | 久草在线| 久久国产精品72免费观看 | 婷婷激情五月网 | 亚洲一区二区av | 久久不射电影网 | 色综合久| 亚洲在线日韩 | 户外露出一区二区三区 | 亚洲先锋影音 | 国产精品欧美一区二区三区不卡 | 日本一二三区高清 | 欧美伊人久久久久久久久影院 |