|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
: _2 p8 F) { Y* M6 j/ v- A/* 名称:K1-K4 分组控制LED- M$ \( `( Q, f$ Z% P# @
说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,
; C# J+ f- I; |3 Q- [K2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED6 V8 M, T3 D* D7 D4 v7 b# d
*/+ d k$ {% p. }
#include<reg51.h>
0 @: k9 X3 W3 b* B! \3 g/ c" j#define uchar unsigned char7 p) ^4 t* G8 N7 Y8 S/ k; o+ i9 E/ I
#define uint unsigned int$ I, m4 l+ @1 ~) i0 _% F! a7 b
//延时- z% s# c4 r. V( G& a8 I" B
void DelayMS(uint x)
) M9 j* L) \5 z9 x$ i8 T- Y$ O* G{5 R! }! [$ C$ X, v5 A! Z
uchar i;2 k/ t+ W0 a$ K* D) r+ R2 k
while(x--) for(i=0;i<120;i++);
" |" o2 |, }# |/ D8 A- k3 ^: ]}
6 x* B7 \+ h* w8 H, F8 ?! N//主程序
6 e2 O0 @( u& Q! S( evoid main()
3 L: i' c) `' b+ F0 [{) V: S5 z- [% t) o
uchar k,t,Key_State;" s ]) ~: B3 K% o. Z6 S
P0=0xff;
( v8 K9 U8 e2 T3 H2 E: D3 i0 w" NP1=0xff;1 s1 _+ L! e1 b! w# P4 J5 m
while(1). |" V' q# f b0 Y. P$ n
{
* B( r, }$ W+ p. c" O( Vt=P1;4 n5 R) K. f3 {& Q3 u w
if(t!=0xff)$ b F; d2 g9 W9 N
{
9 r; B+ K7 D! `4 W+ l8 H# PDelayMS(10);
3 q" f9 K$ j' H3 jif(t!=P1) continue;" N) W" M( X/ v6 n$ r, ]
//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1), g8 h7 e. v+ J$ r# ]" o* R
//变为模式0000XXXX(X 中有一位为1,其他均为0)+ x4 N% L* Y* L7 K8 }
Key_State=~t>>4;# C- s6 C0 r- i$ i4 ]: {
k=0;2 e( e4 k1 z2 u6 r
//检查1 所在位置,累加获取按键号k6 |. u4 H4 _/ ~& Y' k; L
while(Key_State!=0)! n. f1 O$ W7 ^0 Z6 p
{
! u5 j2 h3 E5 E: pk++;
1 L4 J( O, I! v9 a; p [6 u9 VKey_State>>=1;. m: _& `/ n- O+ U F
}- y _( |0 I6 W8 O! A, h
//根据按键号k 进行4 种处理/ L6 @# c" {2 U4 P/ ^
switch(k)* x/ F6 _& {- }2 D3 A( ]9 k
{& s9 t( [6 ^9 P/ i# [+ J! Y! x
case 1: if(P0==0x00) P0=0xff;
5 a; q8 S5 f, `( ^- }P0<<=1;
* Z' E! _9 s& S& C6 c2 DDelayMS(200);% a' o) C- o: G0 A; x ^! u' a
break;$ N( y, V0 u6 R& ~9 `3 O
case 2: P0=0xf0;break;
?$ y. A* l, o; P4 ycase 3: P0=0x0f;break;# W; ~% U" P: @' g5 ]; s6 _
case 4: P0=0xff;5 R B% |. |, n/ ^
}) ~, e. A& }6 g2 m( H
}" `/ D6 C" e* o6 {; X- j
}
3 B B. c9 \3 U}1 n7 k) i" }- W" `; ^1 r; X0 q8 s( m
% K) c3 W, Y* z5 h+ U& P8 g小弟初學單片機 當switch k = 1或2或3或4 會自動執行case
* b2 Y* V5 Y' a3 w6 A8 |但是看不懂k++何時變成1或2或3或4- E! M F+ y3 W0 Z; [2 V$ l
請問各位先進們 可否解釋一下這程序
& |) q, q( { w; t( m
/ P2 o/ W9 {6 ?/ x |
|