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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
8 r2 j5 H  v5 t0 a! N1 O) O8 z
为什么只能右移不能左移啊,暂停也有用,但不能切换方向这是为什么?难道和定时器有关?
' N7 P7 _# m: Y+ T' A  E
( }  x# D# K! X  m单片机源程序如下:
- a/ J9 L' U* U1 l9 m#include <reg52.h>' ~& A% x8 Z2 V) k
#include "intrins.h"
: u4 ]! U$ y1 {! H- P, ~! C5 a4 N8 z
typedef unsigned char uchar;
' R% X" K% L; Y# F. U# ]6 e" O" btypedef unsigned int uint;  v/ k$ Z2 `% H. p1 V

  D6 l5 w  t1 g' x$ O4 y' auint i = 0;6 b& L1 a4 C: o
uchar led = 0x01;; L# H. h% V5 f' W/ e
int flag = 1;4 t3 d6 d4 x( |; `* f

4 X# v- y1 g, r* a5 Ssbit key1 = P1^0;  4 {3 ^+ O) v7 o) n
sbit key2 = P1^1;0 F9 J/ ]4 e$ ~1 [9 M2 l. Y9 w
sbit key3 = P1^2;
% W+ h9 b  b- Z5 b# W+ T5 D3 o
! J* I0 ]2 R; C& z0 rvoid delay(uint z) {  //1ms0 z2 S9 X1 ?% l8 ~
        uint y;
) c  T- {* G/ _4 j9 y        for (;z > 0; z--) {
9 x% D  w2 z# Y( [4 i                for (y = 0; y < 110; y++){4 [; @; F# \+ H8 ^/ }
                }
( s, X; Z" u5 K5 w4 c/ L' y; m        }
0 j! V" ]1 p; U}
8 D8 N' b4 s% g
, P" V3 k+ T( `; bvoid DelayInit() {! r/ ~# E$ W1 X& w
         EA = 1;               
: A. P6 a0 x! i; ]6 M' t        ET0 = 1;   //开定时器/计数器T0中断        EX0 外部中断0;EX1 外部中断1;ET1 定时器/计数器1;ES 串行口中断;
; q8 L  U$ V4 @4 s% `; F        TMOD = 0x01;          //Gate = 0, C/T = 0(定时模式) ,M1M0 = 01 方式一16位定时
9 H7 Q5 N' I/ X8 b  N% \; V* z        TH0 = 60;  //初值高八位    (65536 - N) / 256
0 F5 x/ U% p( [, T! {+ H0 A        TL0 = 176;        //初值低八位    (65536 - N) % 256   N = 50000时 50ms 12Mhz时 计数一下正好1us* U: l* f3 `( S9 f
        TR0 = 1;   //开启定时器/计数器0" r+ D5 W2 g4 q
}0 [( l4 k4 k9 O" {! r+ C% V6 D7 I
: W/ r2 [7 K2 ?# `' w5 [1 }
void Delay50ms() interrupt 1 {4 Y- u( u( {4 L6 |4 N, O: M
        TH0 = 60;
* y$ ^4 j( N7 W0 H3 j8 k        TL0 = 176;7 A- Q, n. w: B& P2 }
  j' l" r$ W* `5 u/ x' e
        i++;; ]  `1 k; k- B, q% |
        if (i >= 20) {9 x! i, f; ^! S8 \" T2 r
                i = 0;
( ~1 r' i7 ]- R) D/ Q' S( ?! K6 L                if (flag == 1) {        
, P# j6 X) ?3 \( F$ @                        led = _crol_(led,1);! I+ F- x) n! T0 n& Z
                }
8 B4 n8 D- s8 K! Z                if (flag == 0) {
- R2 D4 p- A' B& H  v$ ^! N                        led = _cror_(led,1);5 Z1 D- w3 M8 P: n- z# D
                }                 " ~8 e* a5 O4 S6 \2 f/ r
        }
# Y5 y9 B0 m  b- a. t# d8 O" y5 F}' B9 F! _! K; }) i- \3 ?
5 m, p5 g$ b8 X
void keypros() {
) q/ E# n" X- B& `. d' C7 v        if (key1 == 0) {
. d7 c  A# S5 g5 \; J                delay (10);   //消抖10ms& t2 X: a. a2 v& t
                if (key1 == 0) {5 ?8 j  X  k8 }9 |! ^
                        flag = 1;        1 z* M: t- B. A4 P5 Y
                }        4 [$ c3 H' ^! _2 [( H2 h
                //while (!key1);' n8 h- d; _- T0 O1 e, Y
        }6 L& _; n3 r* ]" ^
        if (key2 == 0) {
* ]# z9 D3 C. s. I" w0 T+ Y                delay (10);   //消抖10ms
- |" }8 S* m% t2 n9 \                if (key2 == 0) {% b2 b9 Q. q, @+ W8 a( T9 I
                        flag = 0;        5 s* z4 ]6 _% A1 w- A
                }        
8 f- `& f# U0 C6 v                //while (!key2);
; _# x8 L9 h2 Y1 r. L+ O5 u* z        }
) u5 `1 e. t8 u: q/ D# m* Q2 }        if (key3 == 0) {7 ]$ W, d/ }* ~$ T# j" H' t, k9 Q
                delay (10);   //消抖10ms* X: D2 o( e$ r& R; }" |# q( b
                if (key3 == 0) {
" |2 Z; b2 u: w5 l( l: `. L9 E% G- [                        flag = -1;          a2 z" \$ m: R% `0 M# |- L* f3 K
                }        . x) B+ j( V8 l
                //while (!key3);
+ d# O4 A" m" X3 C% `$ ^        }; s6 K  l; W+ q2 h
}
0 z( I6 n' g! O9 G; _7 q- Z' n8 w" A4 D% L! W
void main () {
+ g* ?* V' N& b        DelayInit();
/ p/ }/ |! [, J) b+ V        while (1) {2 ]4 ]+ k4 Q1 ]: C
                P0 = led;# Q, g8 \1 [8 e3 ^$ F2 l( r( n2 m
                keypros();
3 x- ^, K1 x0 B; e8 t        }
& k- f- F8 f& `* {. N& u, t: s$ o! }( `% Y4 E

该用户从未签到

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

该用户从未签到

3#
发表于 2022-3-8 09:22 | 只看该作者
! X2 B* Y) S7 c) L! Z# h8 Y
取消循环里面的语句:P0=led;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-12 12:32 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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