找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6352|回复: 44
打印 上一主题 下一主题
收起左侧

关于C语言switch语句

  [复制链接]
跳转到指定楼层
楼主
ID:777834 发表于 2020-9-3 09:49 来自触屏版 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
大家好呀,这个程序那里有问题,如果想让S2按下时,怎样能让LED1灭呢,新手,谢谢大家啦

IMG_20200903_094833.jpg (1.45 MB, 下载次数: 105)

IMG_20200903_094833.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:540927 发表于 2020-9-3 10:55 | 只看该作者
程序不完整,cnt_2是什么也不知道,无法判断呢
回复

使用道具 举报

板凳
ID:654028 发表于 2020-9-3 11:15 | 只看该作者
调试,看看能不能运行到LED=1这句话,如果不能,则表明S2 !=0
回复

使用道具 举报

地板
ID:744327 发表于 2020-9-3 11:16 | 只看该作者
当S2按下时,让LED1=1,灯灭
回复

使用道具 举报

5#
ID:578842 发表于 2020-9-3 12:10 | 只看该作者
子函数你前面声明了,主程序之后没写吧。
回复

使用道具 举报

6#
ID:777834 发表于 2020-9-3 12:49 来自触屏版 | 只看该作者
山水间 发表于 2020-9-3 10:55
程序不完整,cnt_2是什么也不知道,无法判断呢

cnt_2是表示按键按下的次数,按第1次时,LED1亮,按第2次时,LED灯亮
回复

使用道具 举报

7#
ID:777834 发表于 2020-9-3 12:52 来自触屏版 | 只看该作者
心有浮生 发表于 2020-9-3 11:15
调试,看看能不能运行到LED=1这句话,如果不能,则表明S2 !=0

您好,可以运行到的,S2按下时,LED1会暗一点,松开S2后,LED1恢复正常亮度,
回复

使用道具 举报

8#
ID:777834 发表于 2020-9-3 12:53 来自触屏版 | 只看该作者
wps10025 发表于 2020-9-3 12:10
子函数你前面声明了,主程序之后没写吧。

写啦,再下面呢,就是按键的函数
回复

使用道具 举报

9#
ID:777834 发表于 2020-9-3 12:54 来自触屏版 | 只看该作者
烈火 发表于 2020-9-3 11:16
当S2按下时,让LED1=1,灯灭

图中就是这样写的呀,但LED不为1啊
回复

使用道具 举报

10#
ID:777834 发表于 2020-9-3 12:55 来自触屏版 | 只看该作者
大家帮忙分析下咯,
回复

使用道具 举报

11#
ID:654028 发表于 2020-9-3 13:06 | 只看该作者
jianuli 发表于 2020-9-3 12:52
您好,可以运行到的,S2按下时,LED1会暗一点,松开S2后,LED1恢复正常亮度,

查下电路吧,会暗估计有用,但是哪里出问题了 不会太清楚
回复

使用道具 举报

12#
ID:412523 发表于 2020-9-3 13:24 | 只看该作者
用程序检测 LED 灯能否正常亮灭,能的话就是你写的程序有问题,不能就是你电路有问题
回复

使用道具 举报

13#
ID:540927 发表于 2020-9-3 14:09 | 只看该作者
cnt_2是怎么算的,按下去算一次还是按下去弹起算一次,如果按下去弹起算一次,就不可能出现S2=0的情况,键没有消抖,不知道你的按键函数中执行了没?
回复

使用道具 举报

14#
ID:471066 发表于 2020-9-3 15:03 | 只看该作者
本帖最后由 #include51.h 于 2020-9-3 15:13 编辑

你这是逻辑上有问题,case 1:后面应用if........else来写,还有你那cnt_2值是不是不受影响的变化,这都能导致你得不到你想要的结果,可以用单步查一下你值的变化,要养成用调试查结果的习惯,你现在代码还少,到你代码多了出现错误时,别人也会看得头大!说不定就不拱理你了
回复

使用道具 举报

15#
ID:416287 发表于 2020-9-3 15:52 | 只看该作者
你好  你看看是不是if(S2==0){}与break之间没有加分号; 如果改良还有问题的话 那就好好看一下硬件
回复

使用道具 举报

16#
ID:235954 发表于 2020-9-3 16:33 | 只看该作者
程序里面怎么还扫描按键?
回复

使用道具 举报

17#
ID:654028 发表于 2020-9-3 16:37 | 只看该作者
梁廷明 发表于 2020-9-3 16:33
程序里面怎么还扫描按键?

他的扫描函数叫an_jian()吧
回复

使用道具 举报

18#
ID:777834 发表于 2020-9-3 18:20 来自触屏版 | 只看该作者
山水间 发表于 2020-9-3 14:09
cnt_2是怎么算的,按下去算一次还是按下去弹起算一次,如果按下去弹起算一次,就不可能出现S2=0的情况,键 ...

您好,按键按下弹起时后算一次,也就是松开按键后算一次
回复

使用道具 举报

19#
ID:777834 发表于 2020-9-3 18:23 来自触屏版 | 只看该作者
#include51.h 发表于 2020-9-3 15:03
你这是逻辑上有问题,case 1:后面应用if........else来写,还有你那cnt_2值是不是不受影响的变化,这都能导 ...

您好,cnt_2不受影响的了,按键都有消抖处理,我感觉是case后面的语句只受switch判断控制的了?
回复

使用道具 举报

20#
ID:777834 发表于 2020-9-3 18:25 来自触屏版 | 只看该作者
心有浮生 发表于 2020-9-3 16:37
他的扫描函数叫an_jian()吧

是的,帮忙分析下咯,谢谢
回复

使用道具 举报

21#
ID:777834 发表于 2020-9-3 18:26 来自触屏版 | 只看该作者
是不是case后面的所有语句只受switch判断控制?
回复

使用道具 举报

22#
ID:809311 发表于 2020-9-3 19:15 | 只看该作者
无需单片机,你做个非门电路就好了。LED短路了之后通过电阻防止电源短路就好了。
回复

使用道具 举报

23#
ID:84652 发表于 2020-9-3 22:11 | 只看该作者
jianuli 发表于 2020-9-3 12:52
您好,可以运行到的,S2按下时,LED1会暗一点,松开S2后,LED1恢复正常亮度,

看样子是 cnt_2 一直是 1 或者变成 2 的时间不够, cnt_2 相关的逻辑问题。
回复

使用道具 举报

24#
ID:777834 发表于 2020-9-3 23:28 来自触屏版 | 只看该作者
Roy-2010 发表于 2020-9-3 19:15
无需单片机,你做个非门电路就好了。LED短路了之后通过电阻防止电源短路就好了。

想知道什么原因
回复

使用道具 举报

25#
ID:777834 发表于 2020-9-3 23:29 来自触屏版 | 只看该作者
大家帮忙分析下咯
回复

使用道具 举报

26#
ID:540927 发表于 2020-9-4 08:17 | 只看该作者
jianuli 发表于 2020-9-3 18:20
您好,按键按下弹起时后算一次,也就是松开按键后算一次

你的按键弹起算一次与按键按下去的时候LED1点亮矛盾了,你必须把按键弹起算一次改为按键按下去算一次才行
回复

使用道具 举报

27#
ID:420836 发表于 2020-9-4 08:34 | 只看该作者
您可以根据测试结果更改代码。 这是一个简单的代码,应该很容易调试。
回复

使用道具 举报

28#
ID:654028 发表于 2020-9-4 09:22 | 只看该作者
while里面清空,就留一个灭灯函数,看看能不能灭
回复

使用道具 举报

29#
ID:777834 发表于 2020-9-4 10:58 来自触屏版 | 只看该作者
我感觉和case后面的语句矛盾了,因为case让LED1=0,而下面我又让LED1=1,
回复

使用道具 举报

30#
ID:777834 发表于 2020-9-7 21:35 来自触屏版 | 只看该作者
没有人说说了吗,还没有解开我心里的疑团呢呢
回复

使用道具 举报

31#
ID:378732 发表于 2020-9-8 03:05 | 只看该作者
上全代码别人才好分析
回复

使用道具 举报

32#
ID:311846 发表于 2020-9-8 09:26 | 只看该作者
我猜是他逻辑有问题,S2按键按下会不会改变cnt_2的值?
回复

使用道具 举报

33#
ID:380037 发表于 2020-9-8 10:27 | 只看该作者
本帖最后由 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状态
回复

使用道具 举报

34#
ID:613800 发表于 2020-9-8 11:45 | 只看该作者
不给延时怎么看的出来
回复

使用道具 举报

35#
ID:777834 发表于 2020-9-9 08:45 来自触屏版 | 只看该作者
wlefa 发表于 2020-9-8 10:27
恐怕cnt_2值都是1吧,所以程序重复运行在在case 1;当S2按下时,程序循环点亮熄灭(S2按下)LED1,单片机频 ...

您好,首先谢谢你的回复,我刚才按你的方法加了延时,真的可以了耶,真是像你说的这样,反复循环点亮与关断LED1了,还有个最后问题,哈哈,就是case1:在执行后面语句的时候,是不是类似有{}加在LED1与LED8之间呢,像这样case1:{LED1=0;LED2=1;LED3=1;LED4=1;LED=1;LED6=1;LED7=1;LE D8=1;}break;
回复

使用道具 举报

36#
ID:817836 发表于 2020-9-11 10:56 | 只看该作者
连个防抖设计都没有,直接判断s2==0??!!
回复

使用道具 举报

37#
ID:775776 发表于 2020-9-11 11:44 | 只看该作者
只测led1看能亮灭吗,因该是硬件问题或者io选择的问题
回复

使用道具 举报

38#
ID:817933 发表于 2020-9-11 15:44 | 只看该作者
把if(S2==0){}这段话写到按键函数里面去处理
回复

使用道具 举报

39#
ID:106821 发表于 2020-9-15 14:00 | 只看该作者
cnt_2是怎么算的,按下去算一次还是按下去弹起算一次,如果按下去弹起算一次,就不可能出现S2=0的情况;前面的条件不满足,下面的程序是不可能执行的
回复

使用道具 举报

40#
ID:607312 发表于 2020-9-26 08:47 | 只看该作者
条件不对啊,尝试声明一个全局变量,用变量来记录按键
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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