找回密码
 注册
关于网站域名变更的通知
查看: 150|回复: 3
打印 上一主题 下一主题

C语言程序case跑到8之后按键就跳不出去了?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-8 11:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
麻烦各位大佬帮忙看下哪里有问题,LED的呼吸子程序不能用按键切换
% t9 r% Y8 S& t" [2 i7 r: b# f5 \" k) g7 v
单片机C语言源程序如下:+ {# g* _$ J+ @8 Y1 h% F
#include <reg52.h>
# a1 d% g1 W0 Z% O- n
9 @" f  M# h! Q& r9 R' N; k3 ~  Dunsigned int mode;9 U% l6 r( `/ d9 e% j
/ s6 H4 `  C2 ~: E
void DelayXms(unsigned int xms);
4 j) s2 k) u- ^8 evoid Delayus(int us);* E) h1 \& o. D# e
void LED_R();. `6 p$ J1 R! ~5 `
void LED_G();% C- Y5 O/ {0 W4 w$ S
void LED();
/ `0 Z, h3 y5 D7 @/ U) M; C( V( _( I4 d$ m
sbit key=P3^4;3 Q% z$ G3 ^7 c: @( n% E. P( s
. P4 i4 ?) r8 ?4 U3 I
void main()                          //主程序- Z/ N& L$ D; M# q5 m& j) @
{
5 G$ \6 R" X  L0 ]" p        while(1)0 B! C0 F3 s4 I
        {
! Q8 i  V2 B" `9 G) U0 E! J                LED();
% o  {! U* y; W3 q3 Z6 z                if(!key)
6 \0 x0 |# {7 t3 _$ \3 U! x' r                {
0 P# N# H3 ^5 O! T% u                        DelayXms(50);
' X$ p9 w6 m- f9 M, n4 s3 l                        if(!key)# w: J' c/ Z5 S$ H; b" f( ?
                        {                3 h+ k8 a" q5 g
                                mode++;
0 }3 @, X$ ~, E& r; Y                                if(mode>=10)                                8 J2 O  Q: g" m
                                mode=0;                                7 J. M& [: A: ^# [
                        }  while(!key);
9 a; }" m8 S6 h* ]5 Y                }$ D8 M) ?& K/ b5 v, L# i- W
        }
7 b7 j6 B/ }. }6 {7 N- X+ o" S2 a7 b}. p. _$ Z" c  H% z
4 L  @* i7 Z! a4 o" ~+ [$ u
void DelayXms(unsigned int xms)                 //延迟函数
4 m- j6 h7 R. ~{& X1 z( V- y8 Z; u
        unsigned i,j;
1 i" U# ?, B6 P7 {% j* u5 X; s9 K        for(i=xms;i>0;i--)' r3 N" b2 [4 x- Q/ N+ S
        {
% N' U# t0 g- b1 [* {6 ]                for(j=124;j>0;j--);1 N- d% _) l5 g2 B+ Y1 o
        }        2 s  T; b( o- ~; G; s0 y/ a
}
8 H# N" C5 g8 a/ j" ^5 T: s" m" g. J
1 }; A& p2 j* c+ x& U; qvoid Delayus(int us)                //10us
% |5 L4 G/ t5 T$ p# E8 e{  F+ ~" l9 y! d+ H
        unsigned char i;) F  }- {9 i( h' C% e
        while(us)
1 H& D# O; W" {& j        {7 h3 c' m" e1 L7 [
                i = 2;4 C# }5 R# F5 [5 s+ Y% J
                while (--i);; o' I7 \7 D7 {4 Z
                us--;# Z1 C# Y" L9 O, G4 l
        }& l" f1 A2 Q" A9 _3 |, Z
}: [1 ?! C$ Y' }' R
6 j2 S7 X) n  O, n" w
void LED_R()                         //LED呼吸
5 `, O- l4 L; X# t  p{$ U' E6 p% Y- W! F
        int i;
4 [% H5 C& s7 G- u. H6 t) R        
3 Y5 e+ }# O1 }" {+ |        for(i=1;i<300;i++)//由暗变亮
- s* L8 [9 V  Y6 G        {
% U9 G' `. }9 t" m2 _, F0 [: e: d9 B                P1=0x00;+ S" w' h+ C7 q4 e6 j1 d
                Delayus(i);1 o: m# A5 s- W! Q& `/ ]" h
                P1=0x01;
( G" ?1 b, c  Q2 ?+ l# E- \                Delayus(300-i);
& j, m+ D( E3 ]2 R( Z4 _        }
7 b/ b: v! Q  f+ `+ e  V$ S        for(i=1;i<300;i++)//由亮变暗
7 V( l/ b  Q) T: P/ R& Y* }        {5 V5 |. V. N0 r4 l' S
                P1=0x01;  J1 p+ P. p) i$ y# k% k7 P
                Delayus(i);  M  C! t5 e8 R: k
                P1=0x00;3 N- ?4 i7 u3 r
                Delayus(300-i);7 a* t( O3 `" v
        }        
2 d+ w8 T; D  _! u- r}
# L4 T1 r! _; a0 I5 g9 m5 k
8 w4 q' t. v  z4 O6 g& _1 G% ivoid LED_G()                                //LED呼吸
. d! Z, m5 l) h: w{
# a  q2 [! `4 _4 s7 G        int i;. m! y) \7 D( x9 i
        
# E+ L( X2 o1 ^! D; l& H        for(i=1;i<300;i++)//由暗变亮& H9 G+ q# o. ^& ~) b8 a
        {' J: E3 C, j+ O7 ^
                P1=0x00;
! Q8 F( k9 j, z- D9 I7 S                Delayus(i);. t4 L0 q& F) v4 k9 A
                P1=0x02;$ ?; k& }) f6 j! r& ?* k
                Delayus(300-i);. g- _5 k! Z1 }2 X" @. L! O% X/ }
        }
* r' P/ P5 a( Z" O        for(i=1;i<300;i++)//由亮变暗8 p; B& _. R1 o1 u2 J
        {( H* `7 B$ l+ c
                P1=0x02;0 {+ e- i. m8 Z* `
                Delayus(i);% r: S8 b, i: F. Z; a$ o5 A
                P1=0x00;: X$ k/ q! D+ h/ w4 g
                Delayus(300-i);
. A* k7 s. H7 T' h- i4 _4 G        }        3 A9 Z! Y* d* w) @# S
}
/ O; Q9 F, ]# a& z/ l0 [$ O9 _- ~9 d. ?- k+ ^* ^9 Q5 C
void LED()
1 {0 B$ k+ p6 k* Y1 f4 B( _{+ D7 e$ l  {+ T+ o4 G
        switch(mode)& J: o% S4 s+ f8 s* v
        {0 |0 v1 X- F: @# A0 v, J; \
                case 0: P1 = 0x00;break;          //上电默认所有的LED都不亮
2 J- P  d; e/ u0 o/ |/ f3 S, U                case 1: P1 = 0x01;break;          //按键按下,第一个LED亮
' q7 S* N4 s' m' p                case 2: P1 = 0x02;break;          //按键按下,第二个LED亮) t* l9 z! ]7 Q1 Y$ B
                case 3: P1 = 0x04;break;          //按键按下,第三个LED亮
- |& }! ], \6 W% O                case 4: P1 = 0x05;break;          //按键按下,第一第三个LED亮0 w6 Y7 E* \, x( V( j
                case 5: P1 = 0x03;break;          //按键按下,第一第二个LED亮5 B2 [/ f4 S2 f3 P5 H' b
                case 6: P1 = 0x06;break;          //按键按下,第二第三个LED亮# z' x2 T5 m4 f. g& V6 R
                case 7: P1 = 0x07;break;          //按键按下,LED全亮! K: p1 {: S! A% @+ F/ @
                case 8: LED_R();break;# f+ y# ^* c' j6 j. z
                case 9: LED_G();break;
* Y3 a2 D7 l$ I8 E" C7 `$ _+ g7 N                default: break;
6 Q6 P* s( m* t& {6 S( |2 N7 _4 P) ?        }1 B% F( Z( k" p1 i4 |3 N- y
}4 r0 q7 ~0 Z: x8 C
  • TA的每日心情
    开心
    2022-1-29 15:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-6-8 13:09 | 只看该作者
    前面的case 0 - case 7 都能正常,但是到了case 8 之后就不行了。按键按好多次才能跳出去。就是呼吸灯的子程序都不能用按键切换模式
  • TA的每日心情
    开心
    2022-1-24 15:10
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2022-6-8 13:16 | 只看该作者
    当达到最后一次的时候,如果程序在执行当前程序,按键无法被检测到,建议使用外部中断控制按键,会十分灵敏。
  • TA的每日心情
    开心
    2022-1-21 15:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2022-6-8 13:28 | 只看该作者
    void DelayXms(unsigned int xms) 函数里面定义的变量 unsigned i,j; 是错误的,正确的是unsigned int i,j;
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-4 10:22 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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