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

求程序解釋

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
# Q' g* e/ \# u! [: D
/* 名称:K1-K4 分组控制LED
" X3 W! J; ^# A说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,
6 h! ~$ G1 _9 XK2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED
8 _/ S3 b& x' K( A6 r$ R! I# b*/
9 |* Y% I2 ]/ ^. l' y8 W5 Q#include<reg51.h>
, u- f3 K4 r5 v) D4 Q2 D#define uchar unsigned char, B/ X2 L' i9 g: x2 h0 J1 p9 g$ K: h
#define uint unsigned int
! m  F0 U5 A9 n- H! p& _//延时
) _9 Q2 f5 G2 I" R( a% F0 T$ u; Gvoid DelayMS(uint x)0 {/ F% o/ u" J8 B& c+ X
{7 ?: P; Y# z. k
uchar i;$ _) @. m5 }* B# {# k
while(x--) for(i=0;i<120;i++);& B% a/ V( r" {* }* E# K
}
, U. C$ w0 ^+ ^. a, B' A//主程序
) \* R5 p% q8 q9 @void main()  _- p* l/ R4 ^) r4 R$ X$ C" p
{  v. M" U9 b: D3 b9 w
uchar k,t,Key_State;
! W) R+ B- {3 V+ M: F3 xP0=0xff;
' Y: @1 M3 V* jP1=0xff;: ]4 w6 M2 ~/ J% w. Z
while(1)
! G. f" B+ U2 J; S/ J/ V{
3 Y5 Z; j! v- ^; t- c& d/ p. ?t=P1;
) ?& d( y- s4 Y# g" v7 r5 Bif(t!=0xff)9 \. \* a+ e$ h0 E8 ?
{
  u, A& {) L9 Q3 l$ \4 j2 BDelayMS(10);
  d( g; [4 O  I6 rif(t!=P1) continue;) p" Z9 S7 E, @# p% O
//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1)6 [  f3 G$ x9 q$ A/ b6 C
//变为模式0000XXXX(X 中有一位为1,其他均为0)
+ y$ ?' K3 c8 A$ K/ `9 \9 uKey_State=~t>>4;
2 Z$ v# i( `: M! uk=0;
: F5 v( Z* y1 ~% U//检查1 所在位置,累加获取按键号k
+ R& ~7 a2 c7 i0 K6 B/ |while(Key_State!=0)1 R2 m" k+ y2 m4 m& ?( Y
{
% e0 i; r5 v7 c# g, h  E! bk++;
6 z& |) E  R4 s' A$ ~% [2 LKey_State>>=1;
8 e: t& n# A1 k9 z) ]0 h0 x* J}# v2 M. m: s' S, C1 K3 @/ d" x% j
//根据按键号k 进行4 种处理
8 S7 J: S) x: D+ ~switch(k)
4 g" `$ x4 G( x2 ~+ p6 t{
+ F  E; T* ^- ~. x; |- Ncase 1: if(P0==0x00) P0=0xff;& u7 x6 r  f0 L1 z
P0<<=1;9 \; C; ^# @* J) z3 Z
DelayMS(200);7 r  M! Q0 |! b0 I+ E9 J. u5 O
break;* p& G6 V2 P( l. z
case 2: P0=0xf0;break;! a9 l5 e3 P+ j( [  K/ B% {4 \( k
case 3: P0=0x0f;break;
  l& y" U+ H: r1 [case 4: P0=0xff;
  R# D2 ]" Z9 O: C  \# K$ s}
6 [. s% U9 N7 n0 b9 u) `& N}5 ?6 T/ h! m% m6 f% M% \8 h2 @3 p
}0 f7 ~+ u* C' H+ j5 ~/ n
}
, d+ ~( o  w- Y/ {9 U
" P  p/ M3 O+ h5 G1 n小弟初學單片機   當switch k = 1或2或3或4 會自動執行case
2 ?. S) `1 j+ R( Y1 {) ]但是看不懂k++何時變成1或2或3或4; t# _: T; `# i% f' |2 X
請問各位先進們 可否解釋一下這程序4 |4 o( ]: K3 g" h. G* k

/ y; R6 E+ J4 ^1 s, w

该用户从未签到

2#
发表于 2012-6-5 10:26 | 只看该作者
偶也是初学者~偶的理解是这样的:  N* o" T( r4 P, @
以Key_State=~t>>4后=00001000为例:' r1 r! P( E- |5 Y6 [) j! j& B" [
  此时,Key_State!=0为真,执行while语句内容,即K=1,并将Key_State右移一位;3 u: s# X4 P. d! n
再判断Key_State!=0仍为真,则继续执行while语句内容,直至Key_State==00000000,则跳出while语句。此时K也加至相应数值~

评分

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

查看全部评分

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-28 13:43 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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