|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
) d4 l' p3 k+ B) G/* 名称:K1-K4 分组控制LED5 e) j$ c* V+ m) r/ X1 V2 o
说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,$ \! x0 y, L8 q* ^* k* N' j
K2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED B2 l3 i, d5 ~
*/9 \' a. E9 ], K, E# m9 m) I- X
#include<reg51.h>9 _* n- ^6 V" o1 I; @6 b" k6 G; R. Z
#define uchar unsigned char
% n% ^ x4 U' Z& d; A. s+ R2 O#define uint unsigned int
* T* A; e) b3 ]$ I//延时
6 n, L4 J8 Z6 j- q# Svoid DelayMS(uint x)* @, L! p& g- u
{
, l& r2 m6 @0 K2 A% u9 `$ u6 w8 fuchar i;
& c/ U& l+ b8 V+ N" g9 y- Q* Nwhile(x--) for(i=0;i<120;i++);
- c y# v J. a) |& h0 R2 Z" s5 N}
' d+ v' u9 l3 m" b3 P//主程序
; l0 w0 p5 W! f3 J2 Y! A s7 @void main()
4 P+ ^* ?$ e t! n0 I* m, s# ^4 Y2 u0 P' G{* H5 B. ?0 C1 O5 e0 h E, c
uchar k,t,Key_State;" B+ |2 d: {9 _* [. m" Z9 m
P0=0xff;$ v5 R X+ a$ l) |0 k% x# z/ ]
P1=0xff;
3 Q* ?, V' k5 Z) J/ y, Dwhile(1)
6 L1 T8 m% u+ i) m$ u/ `* t1 r' u{+ K, \# C- H E" N+ |9 b: h
t=P1;
: r1 i- M, @; e9 u! f) b t) ~if(t!=0xff)
- t" `& K+ F* D7 r* b/ o{" y5 K; Q, t; z. d/ M
DelayMS(10);
; c1 I2 x0 M! v. Kif(t!=P1) continue;: T* {: ^1 t' B! L: s2 ]
//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1)2 r5 i8 Z% d' H4 M0 ^, l
//变为模式0000XXXX(X 中有一位为1,其他均为0)
% O! g6 l) y4 y$ D: @% G* z5 @+ W6 Z: dKey_State=~t>>4;
( @6 K$ I. E& @6 ok=0;7 O: }& Q. u: G4 A V
//检查1 所在位置,累加获取按键号k) J0 T6 m( R" G9 t- b k
while(Key_State!=0)
2 m( E8 h$ }& u6 E0 ^& c9 B6 w# F{
6 n {4 n5 r9 ~k++;
& O+ r9 i6 K. x- [: S CKey_State>>=1;
, ?; f C! G; H9 Z2 P) z# u}
' v; \* P* n' T. {% M//根据按键号k 进行4 种处理
0 w7 s% q' ~# y( b) N& eswitch(k)! Y% ]. j% G5 g% l
{; ^2 Z3 z# z) _9 }- V( w
case 1: if(P0==0x00) P0=0xff;
3 R' ~/ t3 P8 a" L3 ~: ~! SP0<<=1;
# l2 ~: V6 H; i; y& a' ^DelayMS(200);! S; T" t2 f& P$ E( y2 J
break;( \; G5 p' ^6 @% t* Z
case 2: P0=0xf0;break;
) V o/ X9 T5 J6 I) ]; f* Pcase 3: P0=0x0f;break;' V5 x p0 |6 O! c0 \ ^
case 4: P0=0xff;, h! Z: M5 J& B6 Q' w
}
4 f* p8 v4 @ _2 ] K* P/ H" `; s}# ?$ a7 Z* U8 f0 \& h
}
( ^5 T1 ?5 B( _. A% G/ n}
9 i( F/ t- Q5 v% n( U- `$ G5 W6 S, o1 Z, G! f
小弟初學單片機 當switch k = 1或2或3或4 會自動執行case: |( x+ x6 }/ y& {( Y$ a, i# }
但是看不懂k++何時變成1或2或3或46 E% ^' b- J* u$ h6 _( j! z) t
請問各位先進們 可否解釋一下這程序
) I1 p- ?5 N3 }1 U# \ w1 h6 x& W' Q: h$ Z2 Q3 z, B4 R/ h
|
|