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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
麻烦各位大佬帮忙看下哪里有问题,LED的呼吸子程序不能用按键切换$ @3 f- V3 S; C; P; [- _9 p. I
& V, q" {* P7 F5 e$ L$ i2 _  K
单片机C语言源程序如下:9 y, G  h, M# n
#include <reg52.h>
- a/ L9 Q7 h7 w- V7 m% r: Z$ p% k
- U5 B* x0 f% w1 Uunsigned int mode;) E( X) d2 ]8 Q5 m' Y" Z* ~/ ?

$ g( G+ Z$ |, z# D2 c' u! i+ rvoid DelayXms(unsigned int xms); 5 w- u) ^1 v2 i7 e( a/ a% o
void Delayus(int us);
  E5 m( {4 O1 \3 }void LED_R();
. o1 I0 t' Q( ~void LED_G();' }1 O( Y+ R5 O7 r- W$ o3 v: r* Z
void LED();
% `7 y) @/ P) c4 n  d/ @* h' S1 M) F9 n! S4 ?+ u) K! E
sbit key=P3^4;( J; v; }" @- i$ D' n9 |9 w

1 c  B9 I0 I! ovoid main()                          //主程序
( c# t" f9 c6 q' q( c: W8 U; z+ e{/ ^% m5 Y  U/ Z! k4 y( Y
        while(1); F* ]- a5 h  r+ l1 ^
        {2 d/ r( b3 h+ W7 l: H4 s% d
                LED();# ?. |! i. R' H; t9 f% \" n( e
                if(!key)
; A6 c- j5 G/ u3 Q. B# }; y2 ]% N                {+ g, P! X; `, Z
                        DelayXms(50);. N: G( ~: g3 F/ k
                        if(!key)
- f$ f  d3 T* O# z                        {                7 f7 C' t' O9 E4 _; y, |; ^
                                mode++;+ L3 \8 I8 D$ U$ ?
                                if(mode>=10)                                1 a' H# f+ g  q3 H
                                mode=0;                                
' a& v2 ]6 ?( ?                        }  while(!key);
  _) \; K) c% M! L2 \' z                }0 e8 k# Y% s2 @1 F) `
        }& A: Q0 K8 D4 B. ]4 P  k
}
- w3 b1 M4 q% R) w5 O
) K2 X& d1 p2 x; o, r. }, J, mvoid DelayXms(unsigned int xms)                 //延迟函数4 h! g& W4 a) c# j
{
" z1 ^, l; G2 ]" D4 k        unsigned i,j;7 ^4 b5 [- H: h! C3 v1 L
        for(i=xms;i>0;i--)
0 A( C$ b! d, e. X- `        {4 H) u4 _: H2 `' r! R
                for(j=124;j>0;j--);
' I4 R+ @1 Q0 Q! h' ]        }        
" V8 c! ?6 F: T$ \& x) x}5 p9 p0 d5 g( o4 S+ w+ K2 O' Y

3 r/ E9 i# e- U( v4 {+ Gvoid Delayus(int us)                //10us
- h+ y0 s( |) a% H; d{
0 h' l  o8 B2 P! J2 a        unsigned char i;+ z( i7 {  h- D
        while(us)0 J0 \$ g7 x0 w0 F# F3 c& x
        {' d2 x: n+ {. I" y  d
                i = 2;
3 A+ o1 _6 r8 c3 g: j3 M! k* J                while (--i);7 a; P, m6 B5 u% j% n8 s
                us--;
1 H9 C/ A( I& X0 h        }
! I- b% i  }- _}
3 Z9 P& a2 D' b; `& O  B- {2 O5 R. F* a4 W$ h3 K1 P0 W
void LED_R()                         //LED呼吸
. {, M  r1 n' H" \- p{
* O9 f  g$ U2 W. V1 I# H        int i;+ v0 K' v& D+ S6 u. a: d& V
        
# }, z9 x# C- l* i  Z; ]/ s        for(i=1;i<300;i++)//由暗变亮
( u+ t* P3 O2 B$ S* [, |        {( U0 @0 Z# R4 J3 \9 Z! y
                P1=0x00;
2 i6 l, n' g  l' Y6 Z+ r                Delayus(i);
, D8 S( c) L, m1 x% \                P1=0x01;& ]6 w' X% t- U3 @: F
                Delayus(300-i);8 M1 Z9 [7 h# r# C5 b6 D' w2 w
        }
& s* Z% L) l1 u% I9 f) C        for(i=1;i<300;i++)//由亮变暗
  E4 n6 V8 h$ ~4 e        {: l( z/ {' E, t
                P1=0x01;
% K' o/ `+ H  F' E- h5 i; w5 l, W                Delayus(i);, o: k: ?/ m/ ]. L  N& g
                P1=0x00;
" C$ I% ]5 X- S  o                Delayus(300-i);
) x/ o/ Q: V" a5 J( L4 Z        }        
+ Z) x, @. n8 i8 t# C$ k}
  H( i# W1 u6 q' L2 z! m1 D8 @4 q& [1 a
void LED_G()                                //LED呼吸- e8 G& `6 H" p9 r7 O1 @7 P
{
* ^/ }4 j) `) d% |+ E  w, U        int i;0 S0 r* T1 Y- Y3 _( p$ B
        
. y* i' Y, z  m  V/ A9 q        for(i=1;i<300;i++)//由暗变亮
7 h5 m( Q. h7 V5 W1 ]        {% q& n. N/ a5 v1 S
                P1=0x00;
2 m, Z0 M! v# `3 i$ M2 h0 d: N                Delayus(i);. T/ ?/ k5 c# r" A( t7 v
                P1=0x02;
( }6 J0 U' R  X: p4 u                Delayus(300-i);  v4 ~- ]8 h) ^: {/ \
        }
* z1 W( a+ R7 u        for(i=1;i<300;i++)//由亮变暗# z, _( J5 H' W6 R# K& O* v
        {# M( j. E" f6 d! Z4 @
                P1=0x02;
% G% S# r1 S* j' F; w, ~                Delayus(i);* e$ P. A% r" }
                P1=0x00;
8 y, _4 O# [) K& v: x                Delayus(300-i);" p4 o( @5 ?5 n/ F; G$ Q8 g
        }        ; l2 v; R+ |: ^0 Q
}9 A0 }3 L( c: L- A. d

  k- j- `0 U/ @: zvoid LED()) Z" D: z  y3 K. b' U$ m5 J$ q- c
{
' x' T  V* `' Z) b6 A! t6 K; V        switch(mode)4 d! f5 A+ J1 Z$ i  [& b8 k6 y
        {! }& k8 N! m: w: y1 Y0 ~* H1 `$ U  D
                case 0: P1 = 0x00;break;          //上电默认所有的LED都不亮$ d3 l: ^" Y4 x
                case 1: P1 = 0x01;break;          //按键按下,第一个LED亮: m) C  x# a( }
                case 2: P1 = 0x02;break;          //按键按下,第二个LED亮
2 c) y4 s2 B& k$ A, V+ }, a                case 3: P1 = 0x04;break;          //按键按下,第三个LED亮$ ?% J  O' ?3 j  g( ~; W1 I0 t
                case 4: P1 = 0x05;break;          //按键按下,第一第三个LED亮9 a  [" ?; M& z! H
                case 5: P1 = 0x03;break;          //按键按下,第一第二个LED亮8 o! ]; G# a# b: ?9 Z) k
                case 6: P1 = 0x06;break;          //按键按下,第二第三个LED亮
# `# Y* m2 S: c" I, G2 [                case 7: P1 = 0x07;break;          //按键按下,LED全亮
  c4 P0 Y$ m. Q  |! ]) A                case 8: LED_R();break;
4 l# b! q3 ~, }' @' Y/ u                case 9: LED_G();break;1 x& }& W0 L  V  {, T8 k
                default: break;
4 a/ w- }- Z: }        }
4 d5 I3 ]$ M5 G, ]+ l9 e- d}8 R& a/ B1 @1 u5 r) G
  • 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-7-26 14:20 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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