别的我没试 ,我主要是看到按键扫描没有去抖 没有延时,就对这个按键扫描函数比较感兴趣,我就试了按键扫描这个函数,发现是有问题的,根本就不工作! /******************按键扫描******************************/ /* 功能 : 设置S6按键长短按识别小于20MS短按 长于3S长按 */ void keyScan() { static unsigned char i; static unsigned int key_press_time = 0; // ……请记得标为静态变量 static unsigned int key_press_time2 = 0; // ……请记得标为静态变量 if(s6==0) { if(++key_press_time <=0 ) --key_press_time;//计量按键时间,并避免数据溢出 if(key_press_time==3000) { //在此写下按键长按3s时要做的事情 LED2_REV(); Loop_Speed= Loop_Speed-15; } } else { if(10<=key_press_time && key_press_time < 3000) { //大于20ms小于3s,视为短按,在此写下写短按的处理代码 LED1_REV(); i++; switch(i) //s6按键LED7色控制 { case 0 : {RR=0X00;GG=0X00;BB=0XFE; break;} case 1 : {RR=0X00;GG=0XFE;BB=0X00; break;} case 2 : {RR=0XFE;GG=0X00;BB=0X00; break;} case 3 : {RR=0XFE;GG=0XFE;BB=0X00; break;} case 4 : {RR=0X00;GG=0XFE;BB=0XFE; break;} case 5 : {RR=0XFE;GG=0X00;BB=0XFE; break;} case 6 : {RR=0XFE;GG=0XFE;BB=0XFE; break;} case 7 : {i=0; break;} } } key_press_time=0; } 下面这段话大家来讨论看看 这完全行不通啊,24M的单片机跑起来 ++key_press_time; key_press_time==3000,需要3秒钟?即使是6M的时钟跑起来 加到3000也不要3秒钟吧! if(++key_press_time <=0 ) --key_press_time;//计量按键时间,并避免数据溢出 if(key_press_time==3000) { //在此写下按键长按3s时要做的事情 |
烈火 发表于 2025-3-4 21:05 30块包邮的逻辑分析仪,你值得拥有 |
参考了一下,单色没有实现。是什么原因? |
大家都说有问题?那我只好下载下来研究和验证一下了。 |
这个挺好的,我正想编辑这个程序驱动自己的彩灯,感谢楼主提供,我可以参考一下 |
服了,就一个IO端口,要啥原理图,要啥自行车? ![]() |
师傅,测试的时候没有单色蓝光,检查下哪里出了问题? |
非常感谢,终于找到想要的了。 |
有原理图么 |
谢谢楼主分享,难得的好资料。 |
一上电变全彩闪烁,mode初始化为0应该是关闭的状态,灯不亮,通过按下按键才亮的吧 |
我看了下代码,发现好多变量都没初始化就开始累加计算了,真的无语,确定不会出错吗 |
a399288395 发表于 2022-1-8 16:13 下载完整程序好好看看再说话。。。。。。就看了一段直接判断程序不能用也是绝了。。。。。。。 |
gaochen15159 发表于 2021-11-10 08:48 这东西是串行控制,灯是成品,控制随便啦个IO就行了 |
谢谢楼主分享,难得的好资料,感谢,经过编译,正常点亮 |
huping137 发表于 2021-11-4 09:27 时序在WS2812B.H里面 |
几百个灯珠可以控制吗? |
有没有原理图可以借鉴一下,我也想自己做一个玩一下 |
这个程序里是不是少了发送0和1的时序了 |
用STC哪个型号的单片机? |
有原理图吗大师 |