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

求程序解釋

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

# d  _( [/ U" i- E9 Y/* 名称:K1-K4 分组控制LED# `% _1 g# `' f8 q. l8 j
说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,7 ]2 r7 A5 m! C
K2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED
4 E2 g6 n# s7 ]( M+ x, W*/) Z$ q6 C* c* c' b" q
#include<reg51.h>; }2 I% k/ N. e& @+ P8 }- x
#define uchar unsigned char
+ Q: }. o5 d, c, d#define uint unsigned int' C* f1 g! [0 f6 I! U2 z2 a7 G
//延时
: X& ~3 q! `+ I3 x4 }void DelayMS(uint x)- B( d4 n! N, t1 k' j% p0 k4 a/ p
{
; _! y0 B+ P9 D0 `- m; W! U0 ~8 H( buchar i;: V' R7 t) p, w- {: d
while(x--) for(i=0;i<120;i++);
+ L+ |/ R9 `6 ^# x+ K" H' l}+ A7 K. u5 r+ H6 [% \0 R
//主程序
: L; W6 C: d- J+ @; [void main()
; ]9 t7 E- R; s  u! h& L3 x* U{
: V) i( v- e8 `' P+ C: t& @uchar k,t,Key_State;' X% w- \* r: B' j2 t
P0=0xff;) d, N# T+ a; `2 L; c% _5 D
P1=0xff;5 Q3 @* c: C5 o4 t, j3 C1 Z& r
while(1)
  J5 M( ]9 s2 N8 ^+ Y{& s+ A, N  J  a7 X+ b
t=P1;4 q8 A6 Z! z! ?9 ~4 D/ z8 M
if(t!=0xff)2 o( d9 k8 U. j) D
{" V- z/ i! w) ^0 k8 y
DelayMS(10);, Z& }2 S, L8 F, `
if(t!=P1) continue;* j2 l' R( ~) o! k" b- G
//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1)
- \9 r+ n9 ~# A. m% r( s//变为模式0000XXXX(X 中有一位为1,其他均为0)
8 ?6 X- l3 ]/ A: F3 E( r0 @  ]Key_State=~t>>4;
% U% ]; P2 b: i9 _# V! Y5 }k=0;' S" y$ i! U4 j8 V% ^) j9 _
//检查1 所在位置,累加获取按键号k! @* m( p: Q5 S3 L- P
while(Key_State!=0)
. V! t6 V( G( s- r0 y% a+ u{* ]9 u% J' e4 {1 Q1 k6 _
k++;, [2 u9 F7 _4 {! F
Key_State>>=1;- H! @2 y$ J. j: e! \: b$ K/ D
}
9 P/ Z! T3 f( i% y0 ?1 U/ b% ^3 z* ]//根据按键号k 进行4 种处理
9 l( t7 h& b! e, T. G- ^switch(k)/ ?# [7 G/ f; W( W4 Q: \3 o
{, v: h0 G- c8 f: ~
case 1: if(P0==0x00) P0=0xff;
# n) B: h7 ], X1 A3 D" K) UP0<<=1;4 t% ^; ]- Z3 v  f& F8 n: A, g' K
DelayMS(200);$ K* |- x, \& \. R# B" u4 P
break;
8 Z+ {7 t) Q5 Z* V! [0 n, f' vcase 2: P0=0xf0;break;
, u8 H# w$ l0 a% lcase 3: P0=0x0f;break;4 u, l! r9 g& l: V
case 4: P0=0xff;2 L7 M  v& M/ [- s7 ?8 r
}' {3 T& |5 c1 i2 O  M
}( T8 ?0 U, m7 Q; T. G" W# ]
}  |' Z) j  G9 K7 J3 |
}) f5 I( u5 O: v) u" C
2 u" S7 f5 d2 ]1 P! G
小弟初學單片機   當switch k = 1或2或3或4 會自動執行case
' l9 T. D/ u+ ]  R8 y0 c) e" ^但是看不懂k++何時變成1或2或3或4/ B0 S# g- \- I
請問各位先進們 可否解釋一下這程序
+ ]' \6 ?& l8 b4 y/ h6 ~, r6 p. S- t, F

该用户从未签到

2#
发表于 2012-6-5 10:26 | 只看该作者
偶也是初学者~偶的理解是这样的:7 M3 r( M7 ]6 N9 t9 l2 b  Q
以Key_State=~t>>4后=00001000为例:6 {' @3 y, d4 z. ?
  此时,Key_State!=0为真,执行while语句内容,即K=1,并将Key_State右移一位;6 n; A9 ^/ r! l; |" ^" U" K0 X
再判断Key_State!=0仍为真,则继续执行while语句内容,直至Key_State==00000000,则跳出while语句。此时K也加至相应数值~

评分

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

查看全部评分

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-10 20:27 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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