数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 5329|回复: 33

[家电] 用FT60E211单片机替换头灯的驱动芯片

[复制链接]
发表于 2023-7-13 10:16:05 | 显示全部楼层 |阅读模式
前段时间因电池装反,烧了头灯内部的驱动芯片,上网查了下芯片型号是YX8254,本身价格只有几毛钱,但算上运费就要好几块了,其实我只要单键开关功能就行了,想到以前买了些FT60E211单片机还在吃灰,就尝试用它代替。用厂家提供的例程略改了一下,凑和能用了,量了下待机时的电流为0.1uA左右。至于用到的编译器和编程器的资料,可以搜索本坛 2元成本玩2毛单片机这个帖子。


  1. #include "SYSCFG.h"

  2. bit start=0;

  3. void interrupt ISR(void)        
  4. {
  5.         //PA2外部中断处理
  6.         if(INTE && INTF)               
  7.         {
  8.                 INTF = 0;                          //清PA2 INT 标志位
  9.                 INTE = 0;                          //暂先禁止PA2中断
  10.             start=~start;
  11.         }
  12. }

  13. /*-------------------------------------------------
  14. * 函数名:POWER_INITIAL
  15. * 功能:  上电系统初始化
  16. * 输入:  无
  17. * 输出:  无
  18. --------------------------------------------------*/        
  19. void POWER_INITIAL (void)
  20. {
  21.         OSCCON = 0B01110001;        //IRCF=111=16MHz/4T=4MHz,0.25us
  22.         INTCON = 0;                          //暂禁止所有中断
  23.         PORTA = 0B00000100;               
  24.         TRISA = 0B00000100;                //PA输入输出 0-输出 1-输入
  25.                                                                                                                
  26.         WPUA = 0B00000100;            //PA端口上拉控制 1-开上拉 0-关上拉                                                        
  27.                            
  28.         OPTION = 0B00001000;        //Bit3=1,WDT MODE,PS=000=WDT RATE 1:1                             
  29.     PSRCA = 0B11111111;            //源电流设置最大

  30.     PSINKA = 0B11111111;    //灌电流设置最大
  31.                     
  32.     MSCON = 0B00110000;                           
  33.         //Bit5:        PSRCAH4和PSRCA[4]共同决定源电流。00:4mA; 11: 33mA; 01、10:8mA
  34.         //Bit4:        PSRCAH3和PSRCA[3]共同决定源电流。00:4mA; 11: 33mA; 01、10:8mA
  35.         //Bit3:        UCFG1<1:0>为01时此位有意义。0:禁止LVR;         1:打开LVR
  36.         //Bit2:        快时钟测量慢周期的平均模式。0:关闭平均模式;1:打开平均模式
  37.         //Bit1:        0:关闭快时钟测量慢周期;1:打开快时钟测量慢周期
  38.         //Bit0:        0:睡眠时停止工作:1: 睡眠时保持工作。
  39.     //                当T2时钟不是选择指令时钟的时
  40.         }
  41.       
  42. /*-------------------------------------------------
  43. *  函数名:DelayUs
  44. *  功能:  短延时函数
  45. *  输入:  Time延时时间长度 延时时长Time us
  46. *         输出:  无
  47. -------------------------------------------------*/
  48. void DelayUs(unsigned char Time)
  49. {
  50.         unsigned char a;
  51.         for(a=0;a<Time;a++)
  52.         {
  53.                 NOP();
  54.         }
  55. }                  
  56. /*-------------------------------------------------
  57. *         函数名:DelayMs
  58. *         功能:  短延时函数--16M-4T--大概快1%左右.
  59. *         输入:  Time延时时间长度 延时时长Time ms
  60. *         输出:  无
  61. -------------------------------------------------*/
  62. void DelayMs(unsigned char Time)
  63. {
  64.         unsigned char a,b;
  65.         for(a=0;a<Time;a++)
  66.         {
  67.                 for(b=0;b<5;b++)
  68.                 {
  69.                          DelayUs(98);
  70.            
  71.                 }
  72.         }
  73. }

  74. /*-------------------------------------------------
  75. * 函数名: INT_INITIAL
  76. * 功能:  中断初始化函数
  77. * 输入:  无
  78. * 输出:  无
  79. --------------------------------------------------*/
  80. void INT_INITIAL(void)
  81. {
  82.         TRISA2 =1;                                                                //SET PA2 INPUT
  83.         IOCA2 =0;                                                                //禁止PA2电平变化中断
  84.         INTEDG =0;                                                                //OPTION,INTEDG=0;PA2 INT 为下降沿触发
  85.         INTF =0;                                                                //清PA2 INT中断标志位
  86.         INTE =1;                                                                //使能PA2 INT中断
  87. }

  88. /*-------------------------------------------------
  89. *  函数名:  main
  90. *        功能:  主函数
  91. *  输入:  无
  92. *  输出:  无
  93. --------------------------------------------------*/
  94. void main()
  95. {   
  96.    
  97.         POWER_INITIAL();
  98.     PA3=1;
  99.         while(1)
  100.         {         
  101.             if(start==1)            
  102.                 {
  103.                        PA3=0;
  104.                        DelayMs(250);                                         
  105.                 }
  106.             else
  107.                 {
  108.                        PA3=1;
  109.                        DelayMs(250);                                    
  110.                 }      
  111.                                           
  112.                 INT_INITIAL();                                                //初始化外部中断
  113.                 GIE = 1;                                                        //开总中断
  114.                 SLEEP();
  115.         }
  116. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 5家元 +259 收起 理由
followboy + 6 優秀文章
xtay112 + 6 優秀文章
IlovePLC + 30 認真發帖
作死的家伙 + 7
家睦 + 210

查看全部打赏

 楼主| 发表于 2023-7-13 13:11:19 | 显示全部楼层
魂の殇 发表于 2023-7-13 13:03
双稳态开关嘛,用两个BJT可以实现,两个MOS也可以。
也可以用触发器。记忆一个bit的数据,就是触发器的本职 ...

因为头灯的LED和按键是共地的,用了根三芯弹簧线,要是用分立件替换的话,还要另外加条电线。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-10 19:24:08 | 显示全部楼层
3dg6 发表于 2023-8-10 15:33
请教一下:
MSCON = 0B00000000;         //            
        //Bit5:        PSRCAH4和PSRCA[4]共同 ...

官方没有ft60e211的例程,我是拿ft60f12x的例程改的,没注意到这些细节。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-28 18:59:49 | 显示全部楼层
tigerhifi 发表于 2024-10-22 14:35
请问楼主使用FT60E211这颗单片机,烧录是用“ 2元成本玩2毛单片机” 这个帖子里面作者自制的CH552G下载板 ...

1.6.1版的烧录软件支持60F01X/E01X,60F21X/E21X这些单片机。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-29 05:23 , Processed in 0.171600 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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