标题: 最近做个一个灯光控制系统,含代码 [打印本页]

作者: zha    时间: 2017-7-9 19:17
标题: 最近做个一个灯光控制系统,含代码
这是最近参加一个比赛做的一个智能灯光控制系统,
可以实现的功能是用光强传感器感应强度来使灯光强度变化,
手动是通过app来控制灯的颜色变化,
还有闪烁模式,灯光闪烁加颜色变化,比较绚丽,
最后是一个睡眠模式和驱蚊模式。还有人来灯亮人走灯灭的功能。
用oled来显示,没有字库,自己取模来显示。
比较简单。
附上代码

流程图 副本.JPG (216.65 KB, 下载次数: 239)

流程图 副本.JPG

截图00.png (213.25 KB, 下载次数: 216)

截图00.png

截图01.png (187.08 KB, 下载次数: 267)

截图01.png

截图02.png (23.06 KB, 下载次数: 221)

截图02.png

截图03.png (693.61 KB, 下载次数: 211)

截图03.png

截图04.png (429.75 KB, 下载次数: 215)

截图04.png

0.png (10.81 KB, 下载次数: 179)

0.png

多级系统.zip

76.39 KB, 下载次数: 71, 下载积分: 黑币 -5


作者: 我爱吃零食    时间: 2017-12-13 13:24
楼主你好,下载的时候显示指定板块不存在,请问应该怎么办
作者: admin    时间: 2017-12-13 13:58
楼主的主程序:
  1. #include "reg52.h"
  2. #include "oled.h"
  3. sbit led = P1^0;
  4. unsigned char step = 0;
  5. unsigned char oprt = 0;
  6. unsigned char xuhao = 0;

  7. signed long num1 = 0;
  8. signed long num2 = 0;
  9. signed long result = 0;
  10. unsigned char T0RH = 0;
  11. unsigned char T0RL = 0;
  12. void ConfigTimer0(unsigned int ms);
  13. extern void KeyScan();
  14. extern void KeyDriver(unsigned char xuhao);
  15. void jia();
  16. void jian();
  17. void jian()
  18. {
  19.         if(xuhao==0)
  20.         xuhao=2;
  21.         else
  22.         xuhao--;
  23.         led = ~led;
  24. }
  25. void jia()
  26. {       
  27.         if(xuhao<2)
  28.         xuhao++;
  29.         else
  30.         xuhao=0;
  31.         led = ~led;
  32. }

  33. void main(void)
  34. {                u8 t;
  35.                 EA = 1;           //开总中断
  36.         ConfigTimer0(1);  //配置T0定时1ms
  37.                         OLED_Init();                        //初始化OLED  
  38.                 OLED_Clear()          ;
  39.                 t=' ';
  40.                 led =1;
  41.         while(1)
  42.         {               
  43.                  KeyDriver(xuhao);  //调用按键驱动
  44.         }          
  45. }
  46. void Reset()
  47. {
  48.         num1 = 0;
  49.         num2 = 0;
  50.         step = 0;
  51.         OLED_Clear();
  52.                 OLED_ShowString(5,0,"1.",16);
  53.                 OLED_ShowCHinese(18,0,0);//
  54.                 OLED_ShowCHinese(36,0,1);//
  55.                 OLED_ShowCHinese(54,0,2);
  56.                 OLED_ShowCHinese(72,0,3);
  57.                 OLED_ShowString(5,2,"2.",16);
  58.                 OLED_ShowCHinese1(18,2,0);
  59.                 OLED_ShowCHinese1(36,2,1);
  60.                 OLED_ShowCHinese1(54,2,2);
  61.                 OLED_ShowCHinese1(72,2,3);
  62.                   OLED_ShowString(5,4,"3.",16);
  63.                 OLED_ShowCHinese1(18,4,0);
  64.                 OLED_ShowCHinese1(36,4,1);
  65.                 OLED_ShowCHinese1(54,4,2);
  66.                 OLED_ShowCHinese1(72,4,3);
  67.                 delay_ms(8000);
  68. }

  69. void OprtKeyAction(unsigned char type)
  70. {  
  71.         switch(type)
  72.         {
  73.                 case 0: jian(); break;
  74.                 case 1:        jia(); break;       
  75.                 default: break;
  76.         }
  77. }
  78. void ConfigTimer0(unsigned int ms)
  79. {
  80.     unsigned long tmp;  //临时变量
  81.    
  82.     tmp = 11059200 / 12;      //定时器计数频率
  83.     tmp = (tmp * ms) / 1000;  //计算所需的计数值
  84.     tmp = 65536 - tmp;        //计算定时器重载值
  85.     tmp = tmp + 12;           //补偿中断响应延时造成的误差
  86.     T0RH = (unsigned char)(tmp>>8);  //定时器重载值拆分为高低字节
  87.     T0RL = (unsigned char)tmp;
  88.     TMOD &= 0xF0;   //清零T0的控制位
  89.     TMOD |= 0x01;   //配置T0为模式1
  90.     TH0 = T0RH;     //加载T0重载值
  91.     TL0 = T0RL;
  92.     ET0 = 1;        //使能T0中断
  93.     TR0 = 1;        //启动T0
  94. }
  95. /* T0中断服务函数,执行按键扫描 */
  96. void InterruptTimer0() interrupt 1
  97. {
  98.     TH0 = T0RH;  //重新加载重载值
  99.     TL0 = T0RL;
  100.     KeyScan();   //按键扫描
  101.        
  102.        
  103. }
复制代码

作者: wuzhenyu    时间: 2024-4-7 21:19
请问这个光敏电阻的DO输出连接到哪个IO口呀




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1