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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

; I! F/ m. L8 V9 K1 |- v为什么只能右移不能左移啊,暂停也有用,但不能切换方向这是为什么?难道和定时器有关?, g' u6 `5 s' ?; a- W; e1 g6 x

" l! P. S! p8 D1 A/ [单片机源程序如下:
- H( v' t0 I4 y0 f+ [#include <reg52.h>
" T& f5 B5 Y- H* F& K: S5 N! [#include "intrins.h"3 \. e7 l; h/ p2 m* s, n4 d
% s2 k  I# }+ u/ Y/ }8 T
typedef unsigned char uchar;! V! l2 k8 J( a4 B+ |
typedef unsigned int uint;; X( f7 H! R, S& }' |* G

' q+ m  F) o' v$ c2 N- R6 Ouint i = 0;1 Y8 P6 z2 o$ g& t4 \2 L1 m
uchar led = 0x01;# N3 |1 k5 d  r
int flag = 1;
9 a% d6 N2 |- e& A# ?* ~0 c. Z) x1 `& w2 `8 |$ e" F
sbit key1 = P1^0;  $ E' I0 X5 C* U! f8 x" k
sbit key2 = P1^1;
- y$ |9 m1 F" M$ _5 vsbit key3 = P1^2;
4 O/ l4 q+ T/ r& H3 F6 B  y
9 Q2 t: O9 S, hvoid delay(uint z) {  //1ms& Q1 n8 v! G. |0 K( t# m4 A
        uint y;. q6 ?+ z1 i" `
        for (;z > 0; z--) {
% p  N1 }; N9 o& E                for (y = 0; y < 110; y++){7 y1 V" B! ^* g" O# N
                }& a6 [5 R; {. t* p  R' {# ~
        }8 S' v, Y" X9 W
}3 x4 I9 T) j& Q' \' I
/ K& R! g8 t1 e6 _2 U" \: B
void DelayInit() {
+ c& @4 ^  N: t         EA = 1;               / Z0 e3 c- g. |; y
        ET0 = 1;   //开定时器/计数器T0中断        EX0 外部中断0;EX1 外部中断1;ET1 定时器/计数器1;ES 串行口中断;
* }  l$ T8 ^, _0 F        TMOD = 0x01;          //Gate = 0, C/T = 0(定时模式) ,M1M0 = 01 方式一16位定时
2 U; [3 ^8 u  E        TH0 = 60;  //初值高八位    (65536 - N) / 256
$ H' v: }4 ]- w& e' p- s, i        TL0 = 176;        //初值低八位    (65536 - N) % 256   N = 50000时 50ms 12Mhz时 计数一下正好1us
) I, P% P8 H9 r. Y/ H+ g" b        TR0 = 1;   //开启定时器/计数器0& i" X# `% z/ ^' Q
}6 \$ o, M  O$ _# |

; q0 n: X' g2 [9 Lvoid Delay50ms() interrupt 1 {) A- ~6 H" q/ |0 K1 V
        TH0 = 60;! e: b, K3 a/ e' t8 o
        TL0 = 176;4 M3 Y' B, w% c" t2 {. {( j
5 X+ _8 P4 s# Q3 X, I) m
        i++;( w  S8 m6 x. A' l3 q' D
        if (i >= 20) {8 i7 p% z( y0 r) S! w: l
                i = 0;) s0 m7 q. p) o; ~" m4 |: M' \& Q
                if (flag == 1) {        $ c$ V/ {+ v1 u" L5 j; f4 E7 {
                        led = _crol_(led,1);4 H! f8 X, \, M  G- p
                }! I: Z" _3 e' w6 n: R8 Q
                if (flag == 0) {
9 l1 `2 m. u: l# ?                        led = _cror_(led,1);
5 q/ Y& [5 ^7 C3 C& ]" o/ c                }                   g+ `4 J. e, h( g$ T2 W" H. }* w
        }
1 {( J. H% Z  U+ h}
( I3 E% E2 l5 W( T  ]" z
/ l2 G' W5 S2 i, {3 B: evoid keypros() {: U7 v4 @9 U) ^% a+ P) H8 V
        if (key1 == 0) {
3 J  `% `9 \; L& I) O( e+ m% D                delay (10);   //消抖10ms. ?8 P) r/ O; N* E, [& \8 x+ a
                if (key1 == 0) {* U0 d) M5 t! z' @
                        flag = 1;        
7 H# C- V6 F+ p; M/ z" y( H- [# |                }        0 D, h) a6 a$ y' _
                //while (!key1);/ Z9 [3 n; y. l& d: F
        }( U& p. {- v  M/ M
        if (key2 == 0) {
. G. \" t1 Q) G2 L. f4 r                delay (10);   //消抖10ms! D7 E) c/ P9 u9 g& p/ j# H4 s
                if (key2 == 0) {9 Z- M% n- [# E! M5 M- M8 i$ `; R
                        flag = 0;        # I% V) R) y- M1 q" d; E
                }        5 x; P; }% c2 {
                //while (!key2);
0 M  Y: f3 h, r; W8 |        }
- j. `1 B) F; Q5 D        if (key3 == 0) {
) C5 v9 v) l3 p9 E# v5 ~                delay (10);   //消抖10ms+ Q1 V/ O0 p5 T4 s
                if (key3 == 0) {) K* w, c! W, Z4 L
                        flag = -1;        
; f/ f) |2 u4 h) h, E% t  ~                }        
. _- ]  I8 l  M                //while (!key3);4 F; d% C1 I) [4 k0 f& _
        }3 V) ]7 T, t' ^9 b1 G+ w8 z
}
4 m+ ]3 b5 C7 x# X2 e; P7 _, T" R1 {" W  A7 h* a. c3 [. r. h# M
void main () {' n1 z, r& @: f7 I2 N
        DelayInit();
7 ?& ^3 L% V' v! R" N; J4 Q        while (1) {
$ @- B  J4 i; x; ?                P0 = led;! h8 R) x% H5 z% e/ A
                keypros();5 R0 h+ T6 ]" h+ V
        }, F% n/ o. ?. t7 {2 ~6 o

& |2 b! r* V. i/ w( v+ R

该用户从未签到

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

该用户从未签到

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

3 c- u7 ]: r) q; m取消循环里面的语句:P0=led;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 09:13 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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