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

求程序解釋

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-5-17 11:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

该用户从未签到

2#
发表于 2012-6-5 10:26 | 只看该作者
偶也是初学者~偶的理解是这样的:
( e. G$ f  |, U1 n: Y5 v6 K0 f 以Key_State=~t>>4后=00001000为例:
* E. ?1 Z- h, K8 u/ s  此时,Key_State!=0为真,执行while语句内容,即K=1,并将Key_State右移一位;
1 q4 X3 F" V2 f) Q 再判断Key_State!=0仍为真,则继续执行while语句内容,直至Key_State==00000000,则跳出while语句。此时K也加至相应数值~

评分

参与人数 1贡献 +5 收起 理由
Apple0988 + 5

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-10 10:20 , Processed in 0.171875 second(s), 30 queries , Gzip On.

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

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

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