找回密码
 立即注册
查看: 492|回复: 5

使用STC8H2K08U-45I-SOP8修好了我的手电筒

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:290
  • 最近打卡:2026-06-07 18:26:15
已绑定手机

17

主题

120

回帖

812

积分

高级会员

积分
812
发表于 2025-12-19 15:34:12 | 显示全部楼层 |阅读模式
使用STC8H2K08U-45I-SOP8修好了我的手电筒


    手电筒掉水里了,电路板腐蚀无法使用,主控芯片是SOP8封装的,刚好可以用STC8H2K08U-45I-SOP8焊接上去,飞线修改电路完美复活。就是充电需要另外处理


代码如下:

#include <STC8H.H>
#include <intrins.h>

// 引脚定义
sbit KEY = P3^3;    // 按键引脚(共阴极,按下为低电平)
sbit LED = P3^2;    // LED引脚(共阳极,低电平点亮)

// 全局变量
unsigned int timer_count = 0;       // 定时器计数
unsigned int key_press_time = 0;    // 按键按下时间
bit key_pressed = 0;                // 按键按下标志
bit key_long_pressed = 0;           // 长按标志
bit led_state = 0;                  // LED状态(0=熄灭,1=点亮)
bit led_blink_flag = 0;             // LED闪烁标志
unsigned char blink_count = 0;      // 闪烁计数

// 定时器0初始化(10ms中断)
void Timer0_Init(void) {
    TMOD = 0x01;                // 定时器0工作在方式1
    TH0 = (65536 - 10000) / 256; // 10ms中断初值(12MHz晶振)
    TL0 = (65536 - 10000) % 256;
    ET0 = 1;                    // 允许定时器0中断
    EA = 1;                     // 允许总中断
    TR0 = 1;                    // 启动定时器0
}

// 端口初始化
void Port_Init(void) {
    // 配置P3.2为推挽输出(LED)
    P3M0 |= 0x04;  // P3.2推挽输出 (0000 0100)
    P3M1 &= 0xFB;
   
    // 配置P3.3为准双向口(按键,内部上拉)
    P3M0 &= 0xF7;  // P3.3准双向口 (1111 0111)
    P3M1 &= 0xF7;
   
    // 初始状态:LED熄灭
    LED = 1;
}

// 按键扫描函数(在主循环中调用)
void Key_Scan(void) {
    static bit key_last_state = 1;  // 按键上次状态
    static unsigned char key_debounce = 0;  // 消抖计数
   
    // 读取按键状态(按下为0,松开为1)
    bit key_current_state = KEY;
   
    // 按键状态变化检测
    if (key_current_state != key_last_state) {
        key_debounce++;
        if (key_debounce >= 2) {  // 消抖(20ms)
            key_debounce = 0;
            key_last_state = key_current_state;
            
            if (key_current_state == 0) {  // 按键按下
                key_pressed = 1;
                key_press_time = 0;
                led_blink_flag = 0;  // 停止闪烁
                LED = !led_state ? 0 : 1;  // 恢复LED到正常状态
            } else {  // 按键释放
                if (!key_long_pressed) {  // 如果不是长按
                    // 短按:LED状态翻转
                    led_state = !led_state;
                    LED = !led_state ? 0 : 1;
                }
                key_pressed = 0;
                key_long_pressed = 0;
            }
        }
    } else {
        key_debounce = 0;
    }
}

// 定时器0中断服务程序
void Timer0_ISR(void) interrupt 1 {
    TH0 = (65536 - 10000) / 256;
    TL0 = (65536 - 10000) % 256;
   
    timer_count++;
   
    // 按键长按检测(每10ms计数一次)
    if (key_pressed) {
        key_press_time++;
        
        // 长按1秒检测(100个10ms)
        if (key_press_time >= 100) {
            key_long_pressed = 1;
            led_blink_flag = 1;  // 启动闪烁
            blink_count = 0;
        }
    }
   
    // LED闪烁控制(每100ms切换一次)
    if (led_blink_flag) {
        if (timer_count >= 10) {  // 100ms
            timer_count = 0;
            LED = !LED;  // LED状态翻转
            
            // 闪烁计数(可选,可用于控制闪烁次数)
            blink_count++;
        }
    }
}

void main(void) {
    Port_Init();      // 初始化端口
    Timer0_Init();    // 初始化定时器
   
    while (1) {
        Key_Scan();   // 扫描按键
    }
}

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-07-21 14:44:21
已绑定手机

5

主题

356

回帖

6446

积分

论坛元老

积分
6446
发表于 2025-12-19 15:51:22 | 显示全部楼层
不考虑一下掉电模式?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:707
  • 最近打卡:2026-07-20 09:09:10

33

主题

3031

回帖

6980

积分

论坛元老

积分
6980
发表于 2025-12-19 15:56:40 | 显示全部楼层
lcws*** 发表于 2025-12-19 15:51
不考虑一下掉电模式?

可能是有控制电源的开关把,,直接断电了
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:924
  • 最近打卡:2026-07-22 08:21:46
已绑定手机

25

主题

643

回帖

4257

积分

论坛元老

积分
4257
发表于 2025-12-19 17:09:12 | 显示全部楼层
学以致用啊,哈哈哈
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:290
  • 最近打卡:2026-06-07 18:26:15
已绑定手机

17

主题

120

回帖

812

积分

高级会员

积分
812
发表于 2025-12-19 17:15:41 | 显示全部楼层
lcws*** 发表于 2025-12-19 15:51
不考虑一下掉电模式?

能修好了比废品强
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:290
  • 最近打卡:2026-06-07 18:26:15
已绑定手机

17

主题

120

回帖

812

积分

高级会员

积分
812
发表于 2025-12-19 17:16:00 | 显示全部楼层
wangxi*** 发表于 2025-12-19 17:09
学以致用啊,哈哈哈

回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-22 10:40 , Processed in 0.077800 second(s), 64 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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