弄到一半不会弄了.有什么黑科技可以自动完成吗
这个是做的个手电驱动三档调pwm占空比
只能用作循环.0 10 35 95
想加一个 打开后, 选择一个亮度 比如10 的占空比,如果三秒后没有按键,再次按键关闭手电. 最好是下次开机继续保持当前关闭的档位(好像这个要用到eeprom)
#include <STC8G.H>
#include "intrins.h"
sbit LED1=P3^3;
sbit KEY1=P3^2;
#define MAIN_Fosc 11059200UL
#define ON 0
#define OFF 1
//#define ld 1
typedef unsigned char u8;
typedef unsigned int u16;
u8 ld=0;
u8 gear = 0;
u8 noShiftTime = 0; // 自上次换挡以来的时间
void pwm_init(void);
void delayms(u16 ms);
void timer0_init() {
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
ET0 = 1; // 开启Timer0中断
EA = 1;// 开启全局中断
TR0 = 1; // 启动Timer0
}
void Timer0_ISR() interrupt 1 {
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
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 / 1) {
ld = 0; // 关闭LED
}
gear = (gear + 1) % 4; // 切换档位,循环回到0
while (!KEY1); // 等待按钮释放
noShiftTime = 0;
}
}
switch (gear) {
case 0:
ld=0;
break;
case 1:
ld=15;
break;
case 2:
ld=35;
break;
case 3:
ld=95;
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);
}
你这个很容易啊,用一个8脚的单片机配合一键开关机电路,一个按键不仅可以开关机,还可以调PWM,eeprom不考虑成本可以用外部eeprom,节约就用单片机内部的eeprom xxxevery 发表于 2024-6-29 12:12
你这个很容易啊,用一个8脚的单片机配合一键开关机电路,一个按键不仅可以开关机,还可以调PWM,eeprom不考 ...
代码不会写了
要不您有空看看我的代码?
帮我优化一下3秒不换挡,再按就关机? eeprom先不管,我后续再弄 你这样写明显不合理嘛,难道必须开机就调亮度,中途调亮度就不行?你把key1设成长短按不就很好解决了 xxxevery 发表于 2024-6-29 12:38
你这样写明显不合理嘛,难道必须开机就调亮度,中途调亮度就不行?你把key1设成长短按不就很好解决了 ...
哥,帮帮忙其实我的设想是这样
单击开机,长按增加亮度,松手再长按减少亮度[无极调光]单击关机,记忆上次无极调光的亮度,,下次开机直接就是上次关机的亮度
双击极亮,关机的时候长按,进入 微亮 %0.1模式
你这个功能逻辑看上去没啥毛病,你用按键状态机的方式实现应该容易些,不要用那种主循环中扫描按键的方式 用ai自动生成基础代码在修改 soma 发表于 2024-6-29 15:41
用ai自动生成基础代码在修改
比如说?我就懂文言一心 vb2002 发表于 2024-6-29 17:25
比如说?我就懂文言一心
也可以,阿里,百度都有,vscode插架可以自己生成代码。 这个功能挺简单的