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

单片机程序程序问题,请大神指点

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机程序只能顺序点亮LED,不能关闭?怎样能够完成?. I, ^3 O! T0 b7 u
#include<reg51.h>  //包含单片机寄存器的头文件5 B( c# j, l2 L* ~4 Y
sbit S1=P1^0;     //将S1位定义为P1.0  p5 t4 G( ^; s3 p+ p

  ~4 D) B4 I# f4 J5 {" H/************延时us函数************************/! ?* u# O/ `& W, _( B  _: R
void delayus(unsigned int j )
/ h" S: G4 _( ]3 U* W/ H{  b* {, {1 `3 z
* L& t' h/ `4 o
    while(j--);
3 A6 L3 X3 h7 ]}
8 A! {9 J, v' n, x3 _6 z
0 l* D. c% ?  S$ E3 e/*********************************************/
" u# s7 H+ R8 R3 ?6 A2 k2 t/*****************************
* P& F. q. C+ M$ p# X* \) f/ m函数功能:主函数
+ g7 C6 B3 M  ~*****************************/
; Z: |4 W% K* H) W% q9 Xvoid main(void)+ X: }4 O& n2 K* Q. c% H. a
{  & U! Y9 g* F+ Q% F* t0 }5 Z: J( [3 o
   unsigned char i ;
' {3 T- l; v/ A% F, w        i=0;                 //将i初始化为0: J( M: B- ~& I! k7 z% u
         
* E  p% G/ c" T% l8 k5 z        while(1)
+ Z% j7 @$ d) a- n: U5 Q- A         {9 q. S. L% r! p
                  if(S1==0)     //如果S1键按下
1 w/ O4 X! X: Q                   {
. P4 I# E& I3 v, M' b5 [7 N* H( e                          delayus(5);  //延时一段时间2 P4 |6 d2 Q5 |3 \3 N
                          if(S1==0) //如果再次检测到S1键按下
$ \; o0 c' s' z                            i++;    //i自增16 R/ _3 _' a  o9 V2 e# Q

' D5 T/ a3 |! w" p  I- S                if(i==5)  //如果i=5,重新将其置为4
) O' E9 v3 c4 u                           i=4;6 f3 z4 A, Q' ^+ }3 O# T6 N# }
                                ( W5 `4 Y; F4 y. J
                   }
) _# ~$ b8 P5 W* u% D5 R                 switch(i)   //使用多分支选择语句
- q; s5 a$ O; }+ _  @. f                                 {
% m; p2 Z) O) Z2 x                                   case 1: P0=0xfe;  //第一个LED亮/ n" e( p5 u- V/ i
                                          delayus(600);8 F" K1 M: @+ e- q+ @4 A+ N
                                                 break;) c  s7 y: s! X1 |2 x" g  e6 k
                                        case 2: P0=0xfc;  //第二个LED亮5 n' `0 t8 t! O3 ?% a! n; H1 b
                                        delayus(800);
$ ~' c+ w# ?2 q" d: T7 `7 Z. j                             break;# Z; P, M6 M* I8 ~! V
                                        case 30=0xf8;   //第三个LED亮& l! z3 \  g) U9 b0 ]4 j! e
                                      delayus(1000);
2 t: ?; l! y9 [* g2 \: d8 v                                  break;4 ^- p( `4 Q0 y6 ^/ U: f1 k
                                        case 40=0xf0;   //第四个LED亮) `8 o% [: a3 D
                                      delayus(1200);0 Q( f8 Z3 o- l* T
                                          break;
6 U  u7 P% L$ u  n# _3 ^6 O$ b0 v' h                                
: i. @9 h( o$ `& t: A6 jdefault:break;
! s& `- _3 x8 f; W+ N# \, I) M2 }                                  }& Z' ~: N, m7 I, m5 n+ q1 R
( H( p) s( m# K5 G
        
) R9 ^4 l) P6 G9 E/ f( e& Y                                    }
7 O4 g& g+ y- G                                 }0 G' \0 L/ g: R! b
- P) Y4 J+ T8 p2 g8 I0 i9 \3 S

# s8 _$ _7 L+ c; E$ ~* _# A1 a4 m, A5 V) a4 e. L# E' P  y5 }
, a# D4 `! u: B+ M
按住S1=0键点亮:第一个LED亮,第二个LED亮,第三个LED亮,第四个LED亮 ,可以。# Z1 D9 U# o5 }2 K! J
* k2 d8 n3 ~( {% S# j; u! ~
# {1 U: Q/ A) |+ }
" ^0 X( C1 H0 p9 \' l
放开S1=1键关闭:第四个LED灭,第三个LED灭,第二个LED灭,第一个LED灭,加上什么程序,弄了好久不能完成。* B, D" ?9 p8 O& E7 i  y7 Q
- e6 n+ Z) J4 ]; b# |0 Y
5 i( z, i# P* D6 \9 H1 [9 |+ `: ~
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-8-28 11:22 | 只看该作者
    放开后i延时自减

    该用户从未签到

    3#
    发表于 2020-8-28 13:22 | 只看该作者
    ( H8 A* L; ]8 o* w; A
    只要了解其工作原理,你就可以随心所欲地控制IO口输出任意高低点平点亮和关闭。
  • TA的每日心情
    开心
    2020-8-6 15:38
  • 签到天数: 2 天

    [LV.1]初来乍到

    4#
    发表于 2020-8-28 16:27 | 只看该作者
    switch前面加一段松开检测: ]- R' z8 z) O- D
    if(S1==1)
    7 L* ?. y& o& I; D* Y{
    / ]# ^2 @' U8 M9 S    delayus(5);
    5 ~& g7 P) q# w! A& x0 Q- t    if(S1==1)
    7 v8 H, ]! }8 V; r  t; k    {& [6 T9 T) E( S3 ?+ K
            i--;
    - s* p6 A) q5 w2 y5 J    }2 u2 ]0 ]% H( Z/ t
        if(i<0); y4 {- B4 A5 t
           i=0;
    , s$ D7 ]- e3 R  p9 |5 ~}) i2 ~$ W0 P4 N4 o2 N
    switch中加一个case0
      ^8 j& R- v1 T, D6 vcase 0: P0=0xff;
    ; y# @3 a0 y  b2 dbreak;
      W5 d2 b3 W# m" b0 ?
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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