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

单片机按键控制流水灯程序 不能切换方向的问题

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
( A- O7 p, T4 F- e  e  R$ V* h% D
为什么只能右移不能左移啊,暂停也有用,但不能切换方向这是为什么?难道和定时器有关?
; K9 Z8 t! H4 e9 u# Y
, J9 P$ I- ?0 P  K* u& w  t; C单片机源程序如下:
. k, ?# `1 d' H9 ?#include <reg52.h>
+ |' r" T6 g- Q- [& d; n8 u#include "intrins.h"# H1 d0 c. x9 _
3 @; k$ M2 G  K" J! b; g
typedef unsigned char uchar;
1 A) F3 b7 N# K; g/ m% P9 w- _typedef unsigned int uint;
6 g/ W1 I; {# Y5 r& h
. U6 e/ O1 }2 H! Nuint i = 0;4 u4 C7 p1 K/ r7 k3 S3 ~: P# _
uchar led = 0x01;
7 [' D, P0 W9 A1 ~. d( U4 P( Eint flag = 1;
, r/ m! R& Z- P* }( @( e$ s7 W) l4 ?9 @  K* L
sbit key1 = P1^0;  
' U9 N; L; U1 H* Q% X" lsbit key2 = P1^1;) a- C  a. j9 I9 u7 Y  e- b+ u
sbit key3 = P1^2;
6 `) C1 t' H: |! d* V9 \% o
' x1 y+ C" P( A* b$ X" Dvoid delay(uint z) {  //1ms% f1 z+ V8 v# s
        uint y;' [/ Y0 R( ?( j% g- q# R% Y/ C
        for (;z > 0; z--) {" m- Y: T3 l% i. l& v/ {
                for (y = 0; y < 110; y++){( l- k; J8 A0 R4 k$ q  K, V. ]" i) g
                }+ J6 H) ?7 z: |& w! G# K" _
        }! {. w1 g: `: L" f6 q$ u: e
}( p! P3 z# ], Q% o; y+ e

( V" R: w6 W7 u7 N. @/ u. ?void DelayInit() {
9 d% w8 d/ n0 b4 z! @         EA = 1;               
  n* Z7 U- N2 E6 f        ET0 = 1;   //开定时器/计数器T0中断        EX0 外部中断0;EX1 外部中断1;ET1 定时器/计数器1;ES 串行口中断;
5 h! f: F" L2 I! Q& A4 r# o1 v        TMOD = 0x01;          //Gate = 0, C/T = 0(定时模式) ,M1M0 = 01 方式一16位定时
* U  L# {" y/ ^$ j# [+ e9 y        TH0 = 60;  //初值高八位    (65536 - N) / 256
* `' f/ [% _0 i5 r$ m9 H* c        TL0 = 176;        //初值低八位    (65536 - N) % 256   N = 50000时 50ms 12Mhz时 计数一下正好1us
* D! }# L+ T9 T8 v( z        TR0 = 1;   //开启定时器/计数器04 t+ j6 D/ `' Y7 I1 K9 W4 N
}5 |- \, N8 ?$ h* W3 g  T; A3 W7 }, ^

) k% k$ ]( q' @4 {! Q' [void Delay50ms() interrupt 1 {
# E, C& f1 y# v" `$ i0 u4 J        TH0 = 60;
* A' A. y3 J% [, f+ I+ Y) F2 [        TL0 = 176;" Q1 {# ^# l( I6 `* U: [. ^1 t

# g! L# {( L5 j! b$ \+ X& @; l- X2 l2 h        i++;
6 v  b+ x  ~' S7 ]; W+ p        if (i >= 20) {1 P' p5 s  g" p* z* `  s& t
                i = 0;
; x' }4 k$ A7 u                if (flag == 1) {        8 f" a* H3 r5 @: B, N6 f5 C
                        led = _crol_(led,1);& z. p* z# j: N( o3 l
                }" G: O  ~. l9 [* J7 n* [
                if (flag == 0) {. Y. J+ u" _# n
                        led = _cror_(led,1);/ r4 G9 ~7 s9 [2 a; s9 k; ]3 X$ c
                }                 ; a% _# M2 f# ~+ w( f+ g; s
        }
- [. E5 u6 a8 v1 G0 \4 v}
  o3 ]3 s  ~; \; E  v8 T: p( p* `5 n4 j: c& [8 ^
void keypros() {
6 {, ]# `8 p9 F8 s4 v! {        if (key1 == 0) {0 c: a  p4 W' x! W" f6 J, G; b
                delay (10);   //消抖10ms
& d& v) P* ?* y* v8 }$ z                if (key1 == 0) {
! n  t$ b$ J! d1 s' d                        flag = 1;        ( a% \6 }/ o! _* t: j3 d
                }        
' \% W: h4 {* X2 e                //while (!key1);
# u0 \. a$ @+ e3 K  `  q4 L. E        }) x* F& K/ ]# |9 P2 V; S' [% }' O
        if (key2 == 0) {
: H% K- s# h% b7 c1 a                delay (10);   //消抖10ms( g  F% x: d+ k
                if (key2 == 0) {2 p; a. x8 e5 I4 \# q
                        flag = 0;        / P1 ?& X5 t3 `
                }        & D& u, n+ {3 O. H& |/ L
                //while (!key2);
9 Z: W# k* ~! D- D7 m+ @        }" O& \' y8 |/ n! m6 L0 N% W. L7 p
        if (key3 == 0) {4 s/ q* u0 U( A7 ^  D/ k" v
                delay (10);   //消抖10ms9 C: x. b$ l) E$ O( B9 h; D1 {
                if (key3 == 0) {
1 j( _6 h, z# T0 O" ^, z) c2 U                        flag = -1;        1 l1 q- F/ D! ~+ U- A) @
                }        ( K6 H  V  t# l
                //while (!key3);
2 \* h( A( T8 _        }" A. d! M; I: O. _5 T
}
9 w% v! b; s% F* o) s: a6 q; m
+ ~% _1 G1 E2 m3 a7 Q9 v5 M( u& ivoid main () {7 X3 X& _/ y) o7 ~7 Q
        DelayInit();
3 I7 d4 J" g7 i7 k9 E        while (1) {
+ \/ l/ S9 U( o1 R                P0 = led;0 R$ A9 _5 @0 i. |- U; Y) `
                keypros();0 a- `" O8 I! t; L- t7 K# ~
        }$ i1 R9 e* g! h8 r+ f7 s

1 q2 M: c5 G7 O4 F! c' T2 w

该用户从未签到

2#
发表于 2022-3-8 09:14 | 只看该作者
while(1)循环里面的语句P0=led;取消就可以了。

该用户从未签到

3#
发表于 2022-3-8 09:22 | 只看该作者

5 Z& r3 A' c! C. o+ F5 K5 i: F: E" @取消循环里面的语句:P0=led;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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