找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2842|回复: 1
收起左侧

城市LED路灯控制电路和程序

[复制链接]
ID:145624 发表于 2016-11-2 02:25 | 显示全部楼层 |阅读模式
电路很简单,接在开关电源的稳压回路中就可控制城市的路灯了。这程序只控制关和开,全功率和半功率。24小时循环可不要人工干涉。
0.png

stm8单片机源程序:
  1. #include"ADC.h"
  2. #include "Eeprom.h" //包含用到的外设的头文件



  3. extern u8 minlimit;
  4. extern u8 maxlimit;
  5. extern u16 right_valume;


  6. extern u8 SaveDATA1H;
  7. u8 Adj_Valume;
  8. u8 DATA0H;


  9. u8 ADJADDR;
  10. extern u8 t1ms;


  11. u8 Adc_Flag;

  12. u8 HeCong;
  13. u8 NoLight;
  14. u8 NewLight;
  15. u8 ADC_Valume;

  16. u16 BufllAcc;
  17. u8 BufllPoint;
  18. u8 Adc_Bufll[8];


  19. u8 ReadSample1(void)
  20. {
  21.         right_valume = 0;
  22.         right_valume += ADC1->DB1RH;
  23.         right_valume += ADC1->DB2RH;
  24.         right_valume += ADC1->DB3RH;
  25.         right_valume += ADC1->DB4RH;
  26.         right_valume += ADC1->DB5RH;
  27.         right_valume += ADC1->DB6RH;
  28.         right_valume += ADC1->DB7RH;
  29.         right_valume += ADC1->DB8RH;
  30.         ADC_Valume = right_valume>>3;        //求平均
  31.         
  32.          
  33.         return ADC_Valume;
  34. }
  35. u8 t =10;
  36. void StartUP_ADC(void)
  37. {
  38.   TIM1_SetCompare1(0); //改变PC1输出的PWM的占空比,0
  39.   t1ms = 0;             //
  40.   while(t1ms <= t)
  41.   {
  42.    nop();
  43.   }

  44.   NoLight = ReadSample1();    //环境光  
  45.   TIM1_SetCompare1(Adj_Valume); //改变PC1输出的PWM的占空比,80%
  46.   t1ms = 0;
  47.   while(t1ms <= t)
  48.   {
  49.     ;
  50.   }
  51.   HeCong = ReadSample1();        //合成光

  52.   SaveDATA1H = NoLight - HeCong;    //增量光,标准光点
  53. }



  54. /*******************************************************************************
  55.   *                         ==ADC初始化函数==
  56.   * ADC_DeInit();                                   -->  复位定时器4寄存器
  57. *******************************************************************************/
  58. void ADC_INIT(void)
  59. {
  60.   CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC, ENABLE); //给ADC时钟
  61.   ADC1->CR1 = 0X03;//ADC = fMASTER /3 = f /4.使能ADC并开始转换
  62.   ADC1->TDRH = 0X00;//施密特触发器禁止
  63.   ADC1->TDRL = 0XF8;//施密特触发器禁止
  64.   
  65.   ADC1->CSR = 0X03;//模拟通道 AIN4
  66.   ADC1->CR2 = 0X00;//单次转换模式,数据左对齐
  67.   ADC1->CR3 = 0X80;//数据缓存功能/禁止

  68.   ADC1->CR1 |= 0x01;         //开始转换
  69. }

  70. u8 T1S_Count;
  71. //ADC开始
  72. void ADCStart(void)
  73. {
  74.       T1S_Count++;
  75.       if(T1S_Count ==5)
  76.       {   
  77.          T1S_Count = 0;
  78.         right_valume = 0;
  79.         right_valume += ADC1->DB1RH;
  80.         right_valume += ADC1->DB2RH;
  81.         right_valume += ADC1->DB3RH;
  82.         right_valume += ADC1->DB4RH;
  83.         right_valume += ADC1->DB5RH;
  84.         right_valume += ADC1->DB6RH;
  85.         right_valume += ADC1->DB7RH;
  86.         right_valume += ADC1->DB8RH;
  87.         NewLight = right_valume>>3;        //求平均
  88.         DATA0H =NoLight -  NewLight;
  89.         Adc_Flag = 1;

  90.       }
  91. }
  92. u8 w;
  93. //ADC以查询方式工作
  94. void AdjRight(void)
  95. {
  96.   w = ~SaveDATA1H;
  97.   if(Adc_Flag == 1 )        //20MS抽一次
  98.   {
  99.     Adc_Flag = 0;
  100.     if(NewLight > w)
  101.     {
  102.               if(Adj_Valume <= maxlimit)
  103.               {
  104.                 Adj_Valume++;
  105.               }        
  106.     }
  107.     else if(NewLight < w)
  108.     {
  109.               if(Adj_Valume >= minlimit)
  110.               {
  111.                 Adj_Valume--;
  112.               }
  113.     }
  114.   }
  115. }
复制代码
0.png
所有资料打包下载:
城市路灯控制电路和程序.rar (2.19 MB, 下载次数: 17)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:71535 发表于 2016-11-3 13:57 | 显示全部楼层
谢谢开源精神,学习学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表