|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, R' p4 Y5 n) ^3 C
/* 名称:K1-K4 分组控制LED
7 x# y9 F" V! G/ Z& U9 f* [( d说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,
% u' g# n: Z% @; j8 ]) f ?K2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED) e$ x" s) A7 s7 f- L q
*/1 v3 g+ X6 E3 }* t
#include<reg51.h>
* i4 b+ ]' H/ F" o2 V" J2 L& R#define uchar unsigned char
$ s9 b, Y3 A2 m ~# g" G/ P0 R( ~6 [#define uint unsigned int
! X4 s9 a3 _3 y1 z# Q. H" y* H0 y//延时
, K' O! k6 o- Hvoid DelayMS(uint x)% S* U# p/ r' S
{
. U) d# i7 E0 R- d c2 tuchar i;
- ?9 \8 ^. K9 S6 d1 Q: a( @0 wwhile(x--) for(i=0;i<120;i++);
5 H$ c% Y( W$ Q' t, \" G}
1 s! V) G$ u8 Z6 c0 x0 h//主程序
8 N. q$ H% V0 k; Z. _; xvoid main()
5 d" y: n; X( u) v" I. L4 P9 e% M{
) r8 \' a" b% U- ~# q/ suchar k,t,Key_State;% F0 W" V. j: Z; f0 }9 V$ L
P0=0xff;
; P% f* w+ {. M0 D& h( n4 K$ fP1=0xff;) G* w1 k' k) I3 W' m" Q
while(1): V6 W/ n. P- n7 y7 R& p @
{
6 N; C- n) ~2 f: q, vt=P1;
9 J) e5 q2 e7 x' r4 r6 T0 pif(t!=0xff)7 K3 ` ^+ t/ A9 }
{" r) [( S! g2 x- R/ G' q) ]5 g
DelayMS(10);* c/ w/ C3 l) z O
if(t!=P1) continue;
7 E' T+ w7 W2 `2 k//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1)8 ?/ u4 w8 ]$ O7 P: _
//变为模式0000XXXX(X 中有一位为1,其他均为0)
% `' {5 g& A$ [Key_State=~t>>4;: E$ {3 K V% Y/ ^. G v: V; z
k=0;
d8 u7 Z! [/ [ D! u//检查1 所在位置,累加获取按键号k
' F" y) S( m# n9 jwhile(Key_State!=0)
& Y9 g& f8 i+ p* r/ ^0 Z/ K. F{
' F# J" t1 y$ t; \: M5 |1 D9 rk++;
8 v4 B3 M6 {% ]8 fKey_State>>=1;
. s4 N6 v2 f+ G; M8 `, w# d/ k}
' I/ X" D; M; ~: `4 i+ F//根据按键号k 进行4 种处理
$ T3 M& P$ w+ f4 ]switch(k)* q% u! R( @" [9 l* N2 T" d: }
{
# C6 q/ b, e: t" w& wcase 1: if(P0==0x00) P0=0xff;4 L5 {, e2 C$ Y. K" T' b. q. J
P0<<=1;% x0 E4 R! K. k, Q K/ c. L3 r9 _
DelayMS(200);/ ~. M( {. k, ]3 }
break;
! v! b/ c% W* D, \+ Hcase 2: P0=0xf0;break;; f1 V3 B' _1 H
case 3: P0=0x0f;break;
0 H' F/ {% J1 I0 l( i. d2 ycase 4: P0=0xff;
% E* N; b) v. \) \2 [1 n, l}
2 }$ p7 C0 g% M+ ]& s6 A- ^}7 {8 `0 O' f1 l$ L# u1 w4 e& u, E
}
, H' ~8 L' I) G. o}4 o& P5 N$ F/ b2 I( ~
% l. v; e \: I* e- h8 \) V小弟初學單片機 當switch k = 1或2或3或4 會自動執行case
: o, ~; w* ^7 `$ Z+ r, m, Y/ }但是看不懂k++何時變成1或2或3或46 I+ J9 L. V p/ l- J1 R) `& d
請問各位先進們 可否解釋一下這程序" h6 E+ s5 B4 n [
8 I0 I; C, l9 ^8 S
|
|