完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
新手请教:
初学单片机C语言。有个小问题请教高手! 怎么实现按一个键使一个数码管在两种状态下来回切换呢?按一下显示一个状态,再按一下显示显示原来状态! 我定义了一个变量,不知道为什么程序运行后,能实现一次切换,切换后就不能要切换到原状态了! |
|
相关推荐
14个回答
|
|
|
假如数码管与P0相连,P2.0连接开关且开关另一端接地。P2.0初始为1,用一个while循环不断判断P2.0的值当值为0时,就改变P0的值,当P2.0为1时,P0的值不变。。
你学了中断的话,就用中断来做。我也是刚学51单片机,前2天被这最小系统搞得很伤。。 评分
|
||
|
|
||
|
本帖最后由 ntmk 于 2013-6-17 07:55 编辑
我定义了一个变量,当做状态转化开关,P1_4 脚接独立按键,通过判断此按键,确定数码管状态,判断代码如下,请帮忙看看有什么错误么? if(P1_4==0) { delay(50); //延时消抖 if(P1_4==0) { bai++; if(bai>1) { bai==0; } } while(P1_4==0); } |
|
|
|
|
|
虽然几年不写程序了,但感觉你的程序写的好怪怪的,最后为什么要while(P1_4==0)
|
|
|
|
|
|
|
|
|
|
|
|
学习学习学习学习
|
|
|
|
|
|
|
|
|
是赋值!这里应该是用错了! 嘿嘿,马虎了,我说怎么就只能管一次呢!一会修改下试试! |
|
|
|
|
|
|
|
|
|
|
|
嗯……是这里错了,改过来以后, bai 的值就在0和1之间转换了,搞定!!!! ![]() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while 语句的一般形式为: while(表达式)语句 其中表达式是循环条件,语句为循环体。 while 语句的语义是:计算表达式的值,当值为真(非 0)时, 执行循环体语句。其执行 过程可用下图表示。
do-while 语句的一般形式为: do 语句 while(表达式); 这个循环与 while 循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为 真, 如果为真则继续循环;如果为假, 则终止循环。因此, do-while 循环至少要执行一次 循环语句。其执行过程可用下图表示。
在 C 语言中,for 语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为: for(表达式 1;表达式 2;表达式 3) 语句 它的执行过程如下: 1) 先求解表达式 1。 2) 求解表达式 2,若其值为真(非 0),则执行 for 语句中指定的内嵌语句,然后执行下面 第 3)步;若其值为假(0),则结束循环,转到第 5)步。 3) 求解表达式 3。 4) 转回上面第 2)步继续执行。 5) 循环结束,执行 for 语句下面的一个语句。 其执行过程可用下图表示。
for 语句最简单的应用形式也是最容易理解的形式如下: for(循环变量赋初值;循环条件;循环变量增量) 语句 循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值; 循环条件是一个 关系表达式,它决定什么时候退出循环;循环变量增量,定义循环控制变量每循环一次后 按什么方式变化。这三个部分之间用“;”分开。 例如: for(i=1; i<=100; i++)sum=sum+i; 先给 i 赋初值 1,判断 i 是否小于等于 100, 若是则执行语句,之后值增加 1。再重新判断, 直到条件为假,即 i>100 时,结束循环。 相当于: i=1; while(i<=100) { sum=sum+i; i++; } 对于 for 循环中语句的一般形式,就是如下的 while 循环形式: 表达式 1; while(表达式 2) {语句 表达式 3; } 注意: 1) for 循环中的“表达式 1(循环变量赋初值)”、“表达式 2(循环条件)”和“表达式 3(循 环变量增量)”都是选择项, 即可以缺省,但“;”不能缺省。 2) 省略了“表达式 1(循环变量赋初值)”, 表示不对循环控制变量赋初值。 3) 省略了“表达式 2(循环条件)”, 则不做其它处理时便成为死循环。 例如: for(i=1;;i++)sum=sum+i; 相当于: i=1; while(1) {sum=sum+i; i++;} 4) 省略了“表达式 3(循环变量增量)”, 则不对循环控制变量进行操作,这时可在语句体中 加入修改循环控制变量的语句。 例如: for(i=1;i<=100;) {sum=sum+i; i++;} 5) 省略了“表达式 1(循环变量赋初值)”和“表达式 3(循环变量增量)”。 例如: for(;i<=100;) {sum=sum+i; i++;} 相当于: while(i<=100) {sum=sum+i; i++;} 6) 3 个表达式都可以省略。 例如: for(;;)语句 相当于: while(1)语句 7) 表达式 1 可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。 例如: for(sum=0;i<=100;i++)sum=sum+i; 8) 表达式 1 和表达式 3 可以是一个简单表达式也可以是逗号表达式。 for(sum=0,i=1;i<=100;i++)sum=sum+i; 或: for(i=0,j=100;i<=100;i++,j--)k=i+j; 9) 表达式 2 一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其 值非零,就执行循环体。 例如: for(i=0;(c=getchar())!=’n’;i+=c); 又如: for(;(c=getchar())!=’n’;) printf(“%c”,c); 几种循环的比较 1) 四种循环都可以用来处理同一个问题,一般可以互相代替。但一般不提倡用goto型循 环。 2) while和do-while循环,循环体中应包括使循环趋于结束的语句。for语句功能最强。 3) 用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完 成,而for语句可以在表达式1中实现循环变量的初始化。 授之以鱼不如授之以渔 ![]() ![]() 相信你应该知道该怎么改了吧。 {:12:}
|
|
|
|
|
|
while(P1_4==0);是用来防止按着不放的那种情况出现的,个人意见 支持这种用方法,我以前就是这样用的,不知道哪位大神有木有更好的用法
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16901 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 04:54 , Processed in 1.185474 second(s), Total 113, Slave 88 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
8362