看这序好象是乱套的。还不如先写一个小函数,先在软件里,自己调试一下。这样才能学会。 |
本帖最后由 i_could_have 于 2020-10-22 18:41 编辑 jianuli 发表于 2020-9-3 12:54 按下会暗是因为程序一直在获取按键输入,开始时灯亮,你按下S2灯灭,之后再次获取按键信息,case1还是先亮,之后检测到S2按下,又灭。这样闪烁,但是闪的频率很快,所以看到的就是变暗。你可以在if里加个延时,那样就会看到闪烁了 |
你的switch语句缺default: breaks;而且编程风格不是很好,一行应该就一个;语句的; |
贴一个相对完整的上来,要不你就看清楚定义,分析一下是否能执行到LED=1;这里。 |
学到了 |
条件不对啊,尝试声明一个全局变量,用变量来记录按键 |
cnt_2是怎么算的,按下去算一次还是按下去弹起算一次,如果按下去弹起算一次,就不可能出现S2=0的情况;前面的条件不满足,下面的程序是不可能执行的 |
把if(S2==0){}这段话写到按键函数里面去处理 |
只测led1看能亮灭吗,因该是硬件问题或者io选择的问题 |
连个防抖设计都没有,直接判断s2==0??!! |
wlefa 发表于 2020-9-8 10:27 您好,首先谢谢你的回复,我刚才按你的方法加了延时,真的可以了耶,真是像你说的这样,反复循环点亮与关断LED1了,还有个最后问题,哈哈,就是case1:在执行后面语句的时候,是不是类似有{}加在LED1与LED8之间呢,像这样case1:{LED1=0;LED2=1;LED3=1;LED4=1;LED=1;LED6=1;LED7=1;LE D8=1;}break; |
不给延时怎么看的出来 |
本帖最后由 wlefa 于 2020-9-8 13:11 编辑 恐怕cnt_2值都是1吧,所以程序重复运行在在case 1;当S2按下时,程序循环点亮熄灭(S2按下)LED1,单片机频率高,所以看到的是LED1会暗一点;松开S2后,程序进不了if(s2==0),不能熄灭,所以LED1常亮;在if(S2==)中加个延时,LED1灭的时间长点,人眼容易分别。在case 1中开头点亮LED1,紧接着用按键熄灭LED1,松开按键后第二次循环运行,进入程序就又把LED1点亮了,应该把LED1初始化移出循环,再在循环中改变LED状态 |
我猜是他逻辑有问题,S2按键按下会不会改变cnt_2的值? |
上全代码别人才好分析 |
没有人说说了吗,还没有解开我心里的疑团呢呢 |
我感觉和case后面的语句矛盾了,因为case让LED1=0,而下面我又让LED1=1, |
while里面清空,就留一个灭灯函数,看看能不能灭 |
您可以根据测试结果更改代码。 这是一个简单的代码,应该很容易调试。 |
jianuli 发表于 2020-9-3 18:20 你的按键弹起算一次与按键按下去的时候LED1点亮矛盾了,你必须把按键弹起算一次改为按键按下去算一次才行 |
大家帮忙分析下咯 |
Roy-2010 发表于 2020-9-3 19:15 想知道什么原因 |
jianuli 发表于 2020-9-3 12:52 看样子是 cnt_2 一直是 1 或者变成 2 的时间不够, cnt_2 相关的逻辑问题。 |
无需单片机,你做个非门电路就好了。LED短路了之后通过电阻防止电源短路就好了。 |
是不是case后面的所有语句只受switch判断控制? |
心有浮生 发表于 2020-9-3 16:37 是的,帮忙分析下咯,谢谢 |
#include51.h 发表于 2020-9-3 15:03 您好,cnt_2不受影响的了,按键都有消抖处理,我感觉是case后面的语句只受switch判断控制的了? |
山水间 发表于 2020-9-3 14:09 您好,按键按下弹起时后算一次,也就是松开按键后算一次 |
梁廷明 发表于 2020-9-3 16:33 他的扫描函数叫an_jian()吧 |
程序里面怎么还扫描按键? |
你好 你看看是不是if(S2==0){}与break之间没有加分号; 如果改良还有问题的话 那就好好看一下硬件 |
本帖最后由 #include51.h 于 2020-9-3 15:13 编辑 你这是逻辑上有问题,case 1:后面应用if........else来写,还有你那cnt_2值是不是不受影响的变化,这都能导致你得不到你想要的结果,可以用单步查一下你值的变化,要养成用调试查结果的习惯,你现在代码还少,到你代码多了出现错误时,别人也会看得头大!说不定就不拱理你了 |
cnt_2是怎么算的,按下去算一次还是按下去弹起算一次,如果按下去弹起算一次,就不可能出现S2=0的情况,键没有消抖,不知道你的按键函数中执行了没? |
用程序检测 LED 灯能否正常亮灭,能的话就是你写的程序有问题,不能就是你电路有问题 |
jianuli 发表于 2020-9-3 12:52 查下电路吧,会暗估计有用,但是哪里出问题了 不会太清楚 |
大家帮忙分析下咯, |
烈火 发表于 2020-9-3 11:16 图中就是这样写的呀,但LED不为1啊 |
wps10025 发表于 2020-9-3 12:10 写啦,再下面呢,就是按键的函数 |
心有浮生 发表于 2020-9-3 11:15 您好,可以运行到的,S2按下时,LED1会暗一点,松开S2后,LED1恢复正常亮度, |
山水间 发表于 2020-9-3 10:55 cnt_2是表示按键按下的次数,按第1次时,LED1亮,按第2次时,LED灯亮 |