143
1690
2574
金牌会员
lzl1*** 发表于 2024-6-29 20:21 这个功能挺简单的
使用道具 举报 送花
so*** 发表于 2024-6-29 19:03 也可以,阿里,百度都有,vscode插架可以自己生成代码。
#include <STC8G.H> #include "intrins.h" sbit LED1=P3^3; sbit KEY1=P3^2; #define MAIN_Fosc 11059200UL #define ON 0 #define OFF 1 typedef unsigned char u8; typedef unsigned int u16; u8 ld=0; u8 gear = 0; u16 noShiftTime = 0; // 自上次换挡以来的时间 void pwm_init(void); void delayms(u16 ms); void timer0_init(); void Timer0_Init(void) //1毫秒@11.0592MHz { AUXR |= 0x80; //定时器时钟1T模式 TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0xCD; //设置定时初始值 TH0 = 0xD4; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 } void Timer0_ISR() interrupt 1 { TL0 = 0xCD; //设置定时初始值 TH0 = 0xD4; //设置定时初始值 noShiftTime++; if (noShiftTime >= 3000 / 1) { noShiftTime = 0; } } void main() { P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; while(1) { timer0_init(); pwm_init(); if (KEY1 == 0) { delayms(10); if (KEY1 == 0) { if (noShiftTime >= 3000 ) { ld = 0; // 关闭LED } gear = (gear + 1) % 4; // 切换档位,循环回到0 while (!KEY1); // 等待按钮释放 noShiftTime = 0; } } // 检查是否长时间未换挡 if (noShiftTime >= 3000) { // 如果2秒(或2000毫秒)未换挡 gear = 0; // 将档位重置为0或其他默认档位 ld = 0; // 关闭LED noShiftTime = 0; // 重置计时器 } switch (gear) { case 0: ld=0; break; case 1: ld=15; break; case 2: ld=135; break; case 3: ld=255; break; } delayms(10); } } void pwm_init(void) { CCON = 0x00; CMOD = 0x08; CL = 0x00; CH = 0x00; CCAPM1 = 0x42; PCA_PWM1 = 0x00; CCAP1L = ld; CCAP1H = ld; CR=1; // while(1); } void delayms(u16 ms) { u16 i; do{ i = MAIN_Fosc /10000; while(--i); }while(--ms); } 复制代码
1
120
1917
jker*** 发表于 2024-6-30 20:23 需求还是不太明确,根据你的描述来说,单击开机 长按增加亮度 长按减少亮度 单击关机,这些操作是固定的顺序吗 ...
vb2*** 发表于 2024-6-30 20:49 有款手电就是这个逻辑 蛮多手电都是这个操作逻辑,无级变档
jker*** 发表于 2024-6-30 20:59 重点是它们都是固定操作顺序?比如关机不能随时关机?一定是在长按减少亮度之后? ...
vb2*** 发表于 2024-6-30 21:15 其实还有很多功能,可以用,比如双击极亮,三击爆闪,四击检测电量,6击换模式 另一个模式就是1234档, 1档 1%亮 ...
12
126
1795
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-6-18 17:39 , Processed in 0.165636 second(s), 101 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.