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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
- C' U$ o& e' L
为什么只能右移不能左移啊,暂停也有用,但不能切换方向这是为什么?难道和定时器有关?! h9 R9 |# S8 }) @
$ U$ K/ e6 `" y3 [
单片机源程序如下:
( u& [( A+ S+ {  S, ^, W6 O. u# s#include <reg52.h>! ^+ ]7 U- K" P4 U9 ^. S9 i
#include "intrins.h"
: r9 S" P8 Y5 n2 i
0 t7 x. S5 j2 R4 O5 ^typedef unsigned char uchar;
0 y% r9 Q! u3 B/ e9 H& Htypedef unsigned int uint;4 V! R. p$ p4 R- q
3 w1 u* o7 c' w1 `
uint i = 0;
4 D' E9 [- a4 U& f4 ?1 Q3 |( Q- O8 uuchar led = 0x01;
$ U. m3 h) g1 I- k. J1 [int flag = 1;9 p! }8 L% f% }# e5 l
1 V3 b8 b: z3 h
sbit key1 = P1^0;  
. E) S& ^) H" {$ N9 Psbit key2 = P1^1;! ]; _4 ~7 C4 ]! o7 E6 T
sbit key3 = P1^2;1 K2 p! e6 |3 S0 \" O
1 U: B% ]. ^7 ^( H. i0 Q
void delay(uint z) {  //1ms% I+ I7 r  ~2 r7 ^; L7 }
        uint y;$ q6 G  [4 O+ T
        for (;z > 0; z--) {
; J' ~" U1 g1 G                for (y = 0; y < 110; y++){. E8 O# V& n/ i9 b; I8 T
                }* U$ m! V- S( @# d! Q/ x! |+ O! l" l
        }
0 X; H, ^+ A% A2 V1 E7 y  N$ r) V! [}0 P8 R% X* V. y* Z! I

, e0 }3 b* I; w* M( v9 Rvoid DelayInit() {( J5 v# k# e* @! }5 j% M
         EA = 1;               
3 [1 K4 G) O8 C# t9 \        ET0 = 1;   //开定时器/计数器T0中断        EX0 外部中断0;EX1 外部中断1;ET1 定时器/计数器1;ES 串行口中断;3 u9 X' K/ Y- `( I) W% z: q
        TMOD = 0x01;          //Gate = 0, C/T = 0(定时模式) ,M1M0 = 01 方式一16位定时
8 l7 r9 K8 B6 u+ M1 a8 R5 j# r        TH0 = 60;  //初值高八位    (65536 - N) / 256
* g9 y0 W) L  |) z  T        TL0 = 176;        //初值低八位    (65536 - N) % 256   N = 50000时 50ms 12Mhz时 计数一下正好1us$ z( o: X! L  R8 ~& v
        TR0 = 1;   //开启定时器/计数器0
0 ~) R. ^8 K2 ~% x# R) m- G- J}
# V6 G" R& c. P, H' _
  }% ?0 m1 L+ p7 b1 yvoid Delay50ms() interrupt 1 {6 _" R) `% Z! y' e6 k
        TH0 = 60;
/ S& L/ \: e0 L. ]/ j9 S5 I        TL0 = 176;, Z: r3 L8 E0 @' x
8 W% U" \! o' S; U5 G) t
        i++;+ q3 P. \* _. p0 l& _* U8 Q
        if (i >= 20) {" i- l- I7 U" }- O  i
                i = 0;; Z; R& W, X" j. t/ Z
                if (flag == 1) {        
: {  ~6 H# U) u                        led = _crol_(led,1);# U9 H, V" @! c( Y- G
                }
; s4 q: Q, ?7 i- \, a                if (flag == 0) {
" \( [) ?/ \" R# o                        led = _cror_(led,1);. P2 y" |* I; J: K+ E
                }                 
7 X: }2 u/ I5 m        }% {" A/ n$ j9 |  A; d, f
}
) [. z9 {! i: x, w  ^2 W4 U
9 t* ?: \& H" ?) d! Dvoid keypros() {" z4 k+ n7 u0 B8 [8 p6 }; |
        if (key1 == 0) {
7 R9 h5 n; P9 w( k( m2 A0 t                delay (10);   //消抖10ms) h' t! M6 k% p$ ?
                if (key1 == 0) {4 ]$ n, v' j+ `2 L  [( ~
                        flag = 1;        - U# h/ h) K4 G8 q  j. a
                }        ( n+ Y% U0 a  c: x) y
                //while (!key1);+ z6 c/ X: p6 B  m5 r3 ?( T6 I
        }7 _+ V( T4 H+ \; y
        if (key2 == 0) {
  k1 @) a7 I1 g' s$ S; ~                delay (10);   //消抖10ms- k" e) n/ k4 M, Y, }* E; q
                if (key2 == 0) {
" S) Z2 l- X3 K/ Y4 J# |4 v) |, Y                        flag = 0;        * U( t9 u, q3 k3 T
                }        & z! ?- L6 d% B
                //while (!key2);
3 r8 k1 }) o& G$ ?3 a        }' u9 p% E, a7 O& R0 @
        if (key3 == 0) {
! F7 k1 {: @3 B9 @# R                delay (10);   //消抖10ms
  x+ T+ G+ [) e" m7 i                if (key3 == 0) {" h7 g* V- l5 a. s# n0 z( r) R
                        flag = -1;        ( j. Q- ^; [' \' @. |# q1 @0 d
                }        
& D1 f2 H) l5 h$ d! q1 o  S- G                //while (!key3);& W. Z! V, z4 {1 a! A, B
        }
% t* T. p: e* r. e) }}
0 g: `+ f  [& [' w, z+ |! Q; o, O5 D6 E4 Q
void main () {" E' H( H0 c( i9 r
        DelayInit();* h# \' t7 t2 h7 z# g3 k
        while (1) {! A/ v2 I) D; G* p0 b) m% {: T
                P0 = led;, F( ?, Q! H% T3 G  V8 i
                keypros();
' J/ t8 {" u% _; `$ s/ `  ]  v7 D        }& p# S6 B9 z# z0 |- f7 d' Y

  `) S# N! W1 p

该用户从未签到

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

该用户从未签到

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

, Y( O# k: A2 @6 O! S+ v1 x& \& r$ b取消循环里面的语句:P0=led;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-22 10:50 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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