找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2322|回复: 1
上一主题 下一主题
收起左侧

STM32单片机热释电灯具程序

[复制链接]
跳转到指定楼层
楼主
ID:412827 发表于 2019-5-21 21:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*板子引脚说明
X0  PC7
X1  PC6
X2  PB15
X3  PA1
X4  PA0
X5  PC4
X6  PB12
X7  PB14

Y0  PC9
Y1  PA8
Y2  PA11
Y3  PA12
Y4  PD2
Y5  PC12

AD0 PC1
AD1 PC2
*/

#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "pwm.h"
#define TIME_1MS 1000
#define TIME_3min 36000000
#define TRUE  1
#define FALSE 0
volatile  u32  timer_tick_count = 0; //定时器节拍
volatile u32  timer_tick_count1 = 0; //建立任务池
volatile u32  timer_tick_count2 = 0; //建立任务池
static u16 Key_Value=0;
static u16 Key_Value1=0;
static u8 light_FG= FALSE;
static u8 P_FG= FALSE;
u16 value=0;
u8 a=0;
u8 i ;
float vol=0;               
int  PWM_TAB[10]={0,                 //白天不工作
                                   200,             //晚上无人20%亮度
                              1000             //有人亮度100%
                             };
u8 pwm=0;
u8 key_SCAN;
#define X0    PCin(7)                                                           
//程序入口
int main()
{        
        Output_GPIO_Init();   //输出GPIO 初始化。
    ADCx_Init();       //AD初始化
        TimerInit();//定时器初始化
        while(1)
        {
                /*Y0  PC9 Y1  PA8 Y2  PA11 Y3  PA12 Y4  PD2  Y5  PC12*/
            /*ADC转换*/
                 value=Get_ADC_Value(ADC_Channel_11,30);     //光电传感器,在没有放书的情况下,不会触发,只要放到上面有书籍,就要触发。
                   vol=(float)value*(3.3/4096);    //转换完成之后的值
           i=(int)vol;    //数据类型需要强制转换         
              if(i>=1) //天黑的情况
                  {
                      light_FG= TRUE;
                          a=1;   //占空比20%
                          if(P_FG==TRUE)
                          { light_FG= FALSE;
                                  a=2;
                          }
                                 
                          if(timer_tick_count1>2000)      //设置天黑有人的情况   红外识别   可认为是按键检测
                          {timer_tick_count1=0;
                  if(X0==1)
                                  {
                                  Key_Value=1;
                                  }
                                    if(X0==0)
                                  {
                                  Key_Value=0;
                                  }
                                 
                             if(Key_Value== Key_Value1)
                                 {
                                          if( Key_Value==0)     //边沿处理
                                          {Key_Value1= Key_Value;
                                           light_FG= FALSE;
                                           P_FG=TRUE;
                                                timer_tick_count2=0;
                               a=2;
                                          }
                                 }  
                          }
                  }
                   else
                 {
             GPIO_SetBits(GPIOC,GPIO_Pin_9);     //高电平无效   PC9对应Y0
        //                 GPIO_ResetBits(GPIOC,GPIO_Pin_9);
                          light_FG= FALSE;
                  }  
                 if( light_FG==TRUE)  
           {                 
                           //PWM波输出,调节灯光亮度
                                if( timer_tick_count>=TIME_1MS)     //频率为1K    产生PWM波形                        
                                  {        timer_tick_count=0;                   //周期值清零                                   
                                  }                  
                                if( timer_tick_count<PWM_TAB[a])     //调节占空比
//                                   GPIO_SetBits(GPIOC,GPIO_Pin_9);     //高电平无效   PC9对应Y0
                                 {         GPIO_ResetBits(GPIOC,GPIO_Pin_9);   //低电平有效   PC9对应Y0
                                  }               
                                  else
                                  { GPIO_SetBits(GPIOC,GPIO_Pin_9);     //高电平无效   PC9对应Y0
                                
                                   }
                   }                 
                  
         if( P_FG==TRUE)  
           {                 
                           //PWM波输出,调节灯光亮度
                                if( timer_tick_count>=TIME_1MS)     //频率为1K    产生PWM波形                        
                                  {        timer_tick_count=0;                   //周期值清零                                   
                                  }                  
                                if( timer_tick_count<PWM_TAB[a])     //调节占空比
//                                   GPIO_SetBits(GPIOC,GPIO_Pin_9);     //高电平无效   PC9对应Y0
                                 {         GPIO_ResetBits(GPIOC,GPIO_Pin_9);   //低电平有效   PC9对应Y0
                                  }               
                                  else
                                  { GPIO_SetBits(GPIOC,GPIO_Pin_9);     //高电平无效   PC9对应Y0
                                
                                   }
                   }                 
                  
                   if(timer_tick_count2>=TIME_3min)
                   {
                   P_FG= FALSE;
                   }
        
        }
}

全部资料51hei下载地址:
热释电灯具.7z (178.58 KB, 下载次数: 22)

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:341741 发表于 2019-6-2 16:47 | 只看该作者
原理图可以分享一下吗
回复

使用道具 举报

板凳
ID:525821 发表于 2019-6-4 04:27
要5个币,没舍得。

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

本版积分规则

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

Powered by 单片机教程网

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