[其他] [HC89S001P demo试用] LED调光灯-锂电池供电

[复制链接]
328|7
 楼主 | 2019-4-1 11:13 | 显示全部楼层 |阅读模式
功能说明:
说明:初始化上电  LED指示灯灭,驱动冷光和暖光LED灭;
长按S1 开机或关机 LED指示灯亮或灭;
开机后短按S1 分别1~12挡循环;
冷光灯亮 (1~6),暖光灯灭,暖光灯亮 (7~12),冷光灯灭,
第一次开机时默认冷光灯2挡,以后开关机记住档位,断电后默认状态2挡;
附件原理图 源代码(MCU HC89S001P)
原理图说明:
Gnd P01  P02  vcc_m  程序下载口  isp dowm
USB口提供充电IC TP4056给锂电池充电,同时可以给 调光灯提供电源
没有USB充电供电,锂电池给 调光灯提供电源.
指示灯 red led   P00口,开机亮 关机灭;
按键S1 (轻触按键)接P21   按键 长按开关机,开机后短按在1~12挡循环;
冷光灯场效应管Q1(SI2300)驱动接  P03,驱动冷光LED照明;
暖光灯场效应管Q2(SI2300)驱动接  P04,驱动暖光LED照明;
代码说明
  初始化:
关看门狗
GPIO口,
初始化定时器T0,
初始化PWM0模块配置 PWM0PWM01高有效,单独模式,周期10ms
并且PWM功能关闭且无输出.
  开看门狗
循环部分
     清看门狗
     按键任务,关机时短按不执行任务,开机时短按,开机后短按S1 分别1~12挡循环;
冷光灯亮 (1~6挡),暖光灯灭,暖光灯亮(7~12挡),冷光灯灭,
  定时器T0 中断
按键的搜索,有按键按下并返回按键值。
焊接的DEMO测试,见下图:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2019-4-2 09:54 | 显示全部楼层
真是个好帖子!我要顶住啊! 好帖子啊!帮你顶住啊!
| 2019-4-2 17:34 | 显示全部楼层
不错
| 2019-4-3 10:53 | 显示全部楼层
试了下,003也可以实现
 楼主 | 2019-4-10 19:41 | 显示全部楼层
本帖最后由 yygdzjs 于 2019-4-10 21:07 编辑

优化了  LED调光灯程序(原理图 LED增加限流电阻 R1 R2)有错误或不合理希望指出,和大家共同学习进步,谢谢!

  //------------功能增加部分----------------------
生产出厂功能测试模式
:(关机短按6次出厂检测及还原出厂状态,指示灯 冷光 暖关 循环点亮1次)
BOR  电源掉电复位 : (设置掉电电压 2.4V,加0.2V 二极管压降,实际2.6V左右)
PLVD  低电压检测报警 延时关机功能



功能说明:
说明:初始化上电  LED指示灯灭,驱动冷光和暖光LED灭;
长按S1 开机或关机 LED指示灯亮或灭;
开机后短按S1 分别1~12挡循环;
冷光灯亮 (1~6),暖光灯灭,暖光灯亮 (7~12),冷光灯灭,
第一次开机时默认冷光灯1挡,以后开关机记住档位,断电后默认状态1挡;


附件原理图 源代码(MCU HC89S001P)
原理图说明:
Gnd P01  P02  vcc_m  程序下载口  isp dowm
USB口提供充电IC TP4056给锂电池充电,同时可以给 调光灯提供电源
没有USB充电供电,锂电池给 调光灯提供电源.
指示灯 red led   P00口,开机亮 关机灭;
按键S1 (轻触按键)接P21   按键 长按开关机,开机后短按在1~12挡循环;
冷光灯场效应管Q1(SI2300)驱动接  P03,驱动冷光LED照明;
暖光灯场效应管Q2(SI2300)驱动接  P04,驱动暖光LED照明;

/****************************************************
程序自己测试后修改记录
修改一内容说明:  增加测试模式 待机省电(掉电模式(电流10uA左右))
修改二内容说明:
   2.1 增加电源电压测试功能,关机进入掉电模式
                    (低电压15分钟后关机,指示状态
                      5分钟内 8秒闪烁1次,
                             5~10分钟内 3秒闪烁1次,
                             10~15分钟内 2秒闪烁1次,
                             电压恢复设置电压则退出低电计数状态)
   2.2 GPIO P03  P04口状态
                   2.3修改长按开关机状态不稳定
                   2.4测试模式 冷光与暖光亮度调低.
                   工厂测试说明: S1连续短按6 指示灯 冷光 暖光 2HZ频率循环一次
****************************************************/  
定时器T0 中断
按键的搜索,有按键按下并返回按键值。
测试延时计数
短按按键延时计数
低电压检测延时计数
INT8~15 中断
    中断唤醒处理

主函数
//---主函数-----
void main()
{
/************************************系统初始化****************************************/
        WDTCCR = 0x00;                                                //关闭看门狗
        //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
        CLKSWR = 0x51;                                                //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
        CLKDIV = 0x01;                                                //Fosc 1分频得到Fcpu,Fcpu=16MHz
       
  //-----VDD 掉电复位设置函数-----
        BORC = 0xC2;                                                //BOR使能,BOR消抖使能,检测电压点2.4V
        BORDBC = 0xFF;               
       
        ConfigGPIO(); //IO配置
        ConfigTimer0(1);  //定时器T0配置
  ConfigPwm0();  //pwm配置
       
        IP3 = IP3&0x3F|0x40; //设置PX8-15的优先级 1

        LVD_VddDetectionSet();//低电压检测LVD 设置函数

        WDTC = 0x57;                                                //允许WDT复位,允许掉电/空闲模式下运行,1024分频
        //WDT使用的是RC44K时钟,WDT_CLOCK_1024是1024分频,初值为0xFF
        //定时时间         = 1024 * 0xFF / 44000
        //                        = 5.93s
        WDTCCR = 0xFF;                                                //写入00时,将关闭WDT功能(但不关闭内部低频RC)

   //---执行一次按键长按动作进入掉电模式
        pwm0enflag=1; // 1为运行状态  0关闭状态
        vGu8KeySec=2; // 1 为短按  2 为长按
       
        while(1)
        {
                WDTC |= 0x10;                                                //置寄存器 WDTC 的 第4位,清看门狗
               
                if(0!=pwm0enflag)//判断是否在运行状态,启动低电压检测
                {
      LVD_Detection();  //低电压检测函数-                       
                }
       
                if(0==vGu8TestSwitchFlag) //--判断是否是出厂测试状态
                {
                   KeyTask1(); //按键任务
                }
                else   
                {
                   TestTask(); //出厂功能检测
                }

                if(vGu8PDFlag == 1) //判断掉电标志位
                {
                        vGu8PDFlag = 0;  //
      PD_Into(); //--进入掉电模式--                       
                }
                       
        }
}



其它具体见附件:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2019-4-15 19:24 | 显示全部楼层
占空比分别是多少呢?
 楼主 | 2019-4-16 14:20 | 显示全部楼层
yzq13246068880 发表于 2019-4-15 19:24
占空比分别是多少呢?

code u16 Cu16PwmTable[]={   //PWM占空比
               
        10,100,280,570,900,1248,
  10,100,280,570,900,1248
       
//          1248,900,570,280,100,10,
//          1248,900,570,280,100,10,       
};  //       


//        //独立模式下,PWM0和PWM01共用一个周期寄存器
//        //PWM0的占空比调节使用                        PWM0组的占空比寄存器
//        //PWM01的占空比调节使用                        PWM0组的死区寄存器

//        //周期计算         = 0x04E2 / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
//        //                        = 0x04E2 / (16000000 / 128)                       
//        //                         = 1250  /125000
//        //                        = 10ms                                   约100Hz
//      //1250=0x04E2

频率100HZ  pwm周期数1250
占空比分别是  10/1250 = 0.8%
占空比分别是  100/1250 = 8%
占空比分别是  280/1250 = 22.4%
占空比分别是  570/1250 = 25.6%
占空比分别是  900/1250 = 72%
占空比分别是  1248/1250 = 99.8%

上面的是实际测试亮度调整的,当时没有计算占空比.

谢谢!
| 2019-4-19 16:51 | 显示全部楼层
不错
扫描二维码,随时随地手机跟帖
*滑动验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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