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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機+VB上位機的調(diào)光系統(tǒng)設(shè)計(含PCB文件和程序源碼)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:78790 發(fā)表于 2018-12-28 22:55 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
分享一個采用STC12單片機+485+232通信接口,完成調(diào)光系統(tǒng)的硬件設(shè)計,同時還設(shè)計了一個上位機用于控制系統(tǒng)的調(diào)光,整個調(diào)光電路的設(shè)計采用模擬方式完成,具有一定的參考價值。另外,上位機寫了很久了,采用VB寫的,僅供參考,現(xiàn)在也基本不用VB了,控制器硬件電路分為控制電路以及轉(zhuǎn)接板電路,程序則分為上位機以及下位機單片機代碼,詳見附件。

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


上位機程序+源碼:


單片機源程序如下:
  1. #include "STC12C5A60S2.h"
  2. #include "main.h"
  3. #include "stdio.h"

  4. #define        HeadCode         0xFC

  5. #define SlaveAddr            2
  6. #define        EndCode                  0xed
  7. #define SCIDELAYTIME  22000


  8. u8 i = 0;
  9. unsigned char uart_receive[10];
  10. unsigned char uart_rc_num  = 0;
  11. unsigned char uart_rc_ok   = 0;

  12. unsigned char RX_Dat[10];
  13. unsigned char TX_Dat[10];
  14. unsigned char len;
  15. unsigned char CmdValid = 0;

  16. unsigned char  A_control;
  17. unsigned char  light;
  18. unsigned char  M_control;
  19. unsigned char  Auto=1;
  20. void sys_init()
  21. {
  22.     UartInit();                                                //初始化串口
  23.     InitADC();                      //初始化內(nèi)部ADC轉(zhuǎn)換器
  24.     pwm_init();                     //初始化內(nèi)部PWM發(fā)生器
  25.     EA = 1;                         //開啟總中斷
  26. }
  27. //------------------------------------/
  28. //執(zhí)行上一次串口接收到的指令
  29. //------------------------------------/
  30. void CmdRun(void)
  31. {
  32.     switch (RX_Dat[3])
  33.     {
  34.     case 0xAB:  //手動模式
  35.             M_control =  RX_Dat[5];
  36.                 set_pwm2(255-(M_control));
  37.                 Auto = 0;
  38.         break;
  39.     case 0xAC: //自動模式
  40.             A_control = RX_Dat[5];
  41.                 Auto = 1;        
  42.         break;
  43.     default:
  44.         break;
  45.     }
  46. }

  47. void main(void)
  48. {
  49.     sys_init();                                        //初始化單片機內(nèi)部模塊
  50.     while(1)
  51.              {
  52.                  if(Auto == 1)                        //自動調(diào)光打開
  53.                  {
  54.                          if((GetADCResult(1)>A_control)) //環(huán)境光比設(shè)定值弱
  55.                          {
  56.                                  if(light<255)                                 //限制pwm范圍在1-255
  57.                                 {
  58.                                  light++;                                         //增加led亮度
  59.                                 }
  60.                                  set_pwm2(light);                         //pwm值裝載到pwm模塊
  61.                          }
  62.                          if((GetADCResult(1)<A_control))//環(huán)境光比設(shè)定值強
  63.                          {
  64.                                  if(light>1)                                        //限制pwm范圍在1-255
  65.                                 {
  66.                                  light--;                                        //減弱led亮度
  67.                                 }
  68.                                  set_pwm2(light);                        //pwm值裝載到pwm模塊  
  69.                          }
  70.                 }

  71.         if(CmdValid==1)                                                 //收到了一條串口發(fā)來的指令
  72.         {                                                                    
  73.             CmdValid=0;                                                 //清除標(biāo)志(指令僅執(zhí)行一次)
  74.             CmdRun();                                                 //執(zhí)行串口發(fā)來的指令
  75.         }
  76.         
  77.     }
  78. }

  79. // 鎵ц涓插彛鎸囦護

  80. /*----------------------------
  81.                 ===涓插彛涓柇===
  82. ----------------------------*/
  83. void Uart_Isr() interrupt 4 using 1                          //串口中斷服務(wù)程序
  84. {
  85. /////////////////////////////////////////////////////////////////////////
  86. //// //串口中斷服務(wù)程序
  87. /////////////////////////////////////////////////////////////////////////
  88.     unsigned char  i=0;
  89.     unsigned int j=0;

  90.     if(RI)                                          //串口接收中斷
  91.     {   
  92.        EA = 0;                                //關(guān)閉總中斷
  93. //                 ES = 0
  94.         RI=0;                                        //清空串口接收中斷標(biāo)志
  95.         RX_Dat[0]=SBUF;
  96.         if(RX_Dat[0] == HeadCode)//判斷頭碼是否正確
  97.         {
  98.             for(i=1;; i++)
  99.             {
  100.                 while(!RI)
  101.                 {
  102.                     j++;
  103.                     if(j>SCIDELAYTIME)break;
  104.                 }
  105.                 if(j<SCIDELAYTIME)   //判斷接收是否超時
  106.                 {
  107.                     RX_Dat[i]=SBUF;
  108.                     RI=0;
  109.                     j=0;
  110.                     if(i == 2)
  111.                     {
  112.                         //if((RX_Dat[1]!=SlaveAddr0))break;
  113.                     }
  114.                        if((RX_Dat[i]==EndCode)&&((RX_Dat[1]==SlaveAddr))||((RX_Dat[1]==0x00)))
  115.                     {
  116.                         len=i;
  117.                         CmdValid=1;
  118.                     }
  119.                 }
  120.                 else
  121.                 {
  122.                     //SBUF = 0XA5;//*********
  123.                     break;
  124.                 }
  125.             }
  126.         }
  127.         else
  128.         {
  129.             //            ErrCode = ErrCMD;
  130.             SBUF = 0X5A;//*********
  131.         }
  132.                 RI = 0;     //清除串口接收中斷標(biāo)志位
  133. //      ES = 1                //打開串口中斷
  134.         EA = 1;                //打開總中斷
  135.     }

  136. }


  137. /*----------------------------
  138. 初始化adc
  139. ----------------------------*/
  140. void InitADC()
  141. {
  142.     P1ASF = 0x03;                   //打開adc通道
  143.     ADC_RES = 0;                    //清楚之前的結(jié)果
  144.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//ADC開機
  145.     Delay(2);                       //延遲
  146. }



  147. /*----------------------------
  148. 返回adc的值(反應(yīng)光的強度)
  149. ----------------------------*/
  150. BYTE GetADCResult(BYTE ch)
  151. {
  152.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  153.     Delay(2);
  154.     while (!(ADC_CONTR & ADC_FLAG));//等待AD轉(zhuǎn)換完成標(biāo)志
  155.     ADC_CONTR &= ~ADC_FLAG;         //關(guān)閉ADC
  156.     return ADC_RES;                 //返回adc的值
  157. }


  158. //-----------------pwm初始化 -----------------

  159. void pwm_init()
  160. {
  161.     CCON = 0;                       //初始化pca控制器
  162.     CH = CL= 0;                     //復(fù)位pca
  163.     CMOD = 0x01;                    //設(shè)置pac時鐘
  164.     //不允許中斷
  165.     CCAP0H = CCAP0L = 0x00;         //PWM0 初始占空比為0
  166.     CCAPM0 = 0x42;                  //PCA 8位無中斷模式

  167.     CCAP1H = CCAP1L = 0x00;         //PWM1初始占空比為0
  168.     CCAPM1 = 0x42;                  //PCA 8位無中斷模式

  169. // PCAPWM1 = 0x03;
  170.     CR = 1;                         //PCA 開啟


  171. }

  172. void set_pwm2(u8 set_dat)
  173. {
  174.     CCAP1H = CCAP1L = set_dat;
  175. }
  176. /*------------------------
  177. // 串口配置初始化
  178. --------------------------*/
  179. void UartInit(void)                //9600bps@12.000MHz
  180. ……………………

  181. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
光控上位機+下位機電路+代碼.zip (6.6 MB, 下載次數(shù): 63)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:165792 發(fā)表于 2019-1-9 20:06 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91麻豆精品国产91久久久更新资源速度超快 | www.欧美| 成人伊人网 | 国产精品18毛片一区二区 | 亚洲欧美日韩系列 | 亚洲精品视频免费观看 | 亚洲电影专区 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 久久国产区 | 午夜精品一区二区三区在线视 | 337p日本欧洲亚洲大胆鲁鲁 | 成人精品一区二区 | 91麻豆精品国产91久久久更新资源速度超快 | 本道综合精品 | 在线国产视频 | 欧美日韩国产中文 | 一区二区三区国产视频 | 日韩中文字幕 | 羞羞在线视频 | 久久久精品综合 | 夜夜骚视频 | 午夜欧美一区二区三区在线播放 | 久久成人国产精品 | 久久国产精彩视频 | 久久久久久综合 | 中文字幕精品一区 | 日韩激情免费 | 国产欧美一区二区精品久导航 | 国产a视频 | 精品国产乱码久久久久久丨区2区 | a在线免费观看视频 | av在线免费观看网址 | 午夜影视 | 久久久国产一区二区三区四区小说 | 亚洲成人精品影院 | 亚洲精品国产电影 | 亚洲综合在线视频 | 久久国产精品一区二区三区 | 国产一级成人 | 337p日本欧洲亚洲大胆鲁鲁 | 97免费在线观看视频 |