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

求程序解釋

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

5 y4 R: K7 [+ R% t- _/* 名称:K1-K4 分组控制LED
5 z! N1 B* G0 G; N0 x+ L说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,2 D& v8 f/ O( S& m9 W& m8 a  h0 t" ?
K2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED1 H% B0 G% X, W6 M; o" x" p
*/9 y3 v0 @6 z: K0 U$ f) b/ T
#include<reg51.h>
" a9 t' @0 R" P4 x#define uchar unsigned char
7 p% X( P1 N2 s+ ]) n; r- l) E( L#define uint unsigned int. s/ O# [0 ?' F/ D3 S; T+ ~" c
//延时
: ~6 M" O) t  x+ Pvoid DelayMS(uint x)
8 c5 _- K" a1 s) ^5 B1 z; |1 q{
, k0 e; l6 `3 {1 E0 i! L1 I) Euchar i;
0 T9 Z2 u3 c2 |$ X& H; M3 ~while(x--) for(i=0;i<120;i++);4 Y- d' o, |  L$ }0 x0 z" @
}1 c: i+ V$ o) Z. b: M0 f
//主程序4 H- U# y3 {) _! n1 e
void main()
  x% Z5 C* V& ~4 Q{7 p2 \% m9 }) a1 M& N
uchar k,t,Key_State;
, H0 M; q9 }. r. p( v$ W, PP0=0xff;7 Z3 d" X8 P' z9 H
P1=0xff;  K  Y. b( n4 N) b
while(1)6 }) [7 n0 y2 f) L1 ~
{' }$ z+ k: L6 z$ [
t=P1;
+ u3 A0 ^+ }  I7 `3 \if(t!=0xff)& Z( z5 o2 W. L! u, u6 b; P: z9 j
{3 D2 t! z/ N0 h% f: H
DelayMS(10);
: A6 E6 l8 ~5 V, S1 T. ^% y5 x; tif(t!=P1) continue;
7 @; p7 T4 s8 A# ^: J//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1)* H% R1 S3 e. \2 c* I( N
//变为模式0000XXXX(X 中有一位为1,其他均为0)4 o: `& o7 v5 F5 ]2 E" ^
Key_State=~t>>4;
# W, O6 T- _+ A5 F0 g/ H8 }; Jk=0;
+ B! C& [: s- d' ]2 ^//检查1 所在位置,累加获取按键号k
) W) L" z! f3 R/ p% S8 Z8 L6 Iwhile(Key_State!=0)
* o9 a/ F; }: H7 H( Q{* p& [' |( Y2 S/ b+ G2 ]  x
k++;
  ~" z4 p0 U3 v2 [6 VKey_State>>=1;
* g( V! M- U# ~6 P4 m4 |}1 `. Q8 |, M( V8 |
//根据按键号k 进行4 种处理; h; n5 V0 p/ Q7 K1 s% w" u
switch(k)/ q$ W4 I7 m6 D, K/ Q% S. z
{
. `' \' {2 _6 D% V" k& kcase 1: if(P0==0x00) P0=0xff;* u! B  `# H4 b
P0<<=1;
8 T% \; k4 R4 B- hDelayMS(200);
& _+ B& B% W9 H- jbreak;6 ?0 E. j( r/ E1 Z( N
case 2: P0=0xf0;break;7 ]/ o/ Z; Q% d( c& @' E+ i+ W
case 3: P0=0x0f;break;" u/ E6 G8 \7 L0 A1 G
case 4: P0=0xff;/ K; Z8 Q; r) E- c3 Y3 j
}
% L" u# q3 D+ ?' N$ d}
& T' i! d2 T( l5 M}
8 S/ i  b5 O: e  Q) U}3 S/ e0 E/ a; y6 M! C& f& U! {+ i9 u

8 P" ?5 |  Z5 K9 t小弟初學單片機   當switch k = 1或2或3或4 會自動執行case+ A, p6 P3 Q; \* C$ u6 r, n
但是看不懂k++何時變成1或2或3或4
6 }, X3 f- Z' V: W3 Q$ ]- `請問各位先進們 可否解釋一下這程序1 O. o* b" M- M" C) N

- R) ]( a3 j  D6 D* s9 r) X9 K

该用户从未签到

2#
发表于 2012-6-5 10:26 | 只看该作者
偶也是初学者~偶的理解是这样的:
  [9 q2 K, e' n5 ^5 J" m# w 以Key_State=~t>>4后=00001000为例:8 \' v% R$ E& l  O
  此时,Key_State!=0为真,执行while语句内容,即K=1,并将Key_State右移一位;5 d) w7 k' c( T$ [% t& J
再判断Key_State!=0仍为真,则继续执行while语句内容,直至Key_State==00000000,则跳出while语句。此时K也加至相应数值~

评分

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

查看全部评分

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-27 16:45 , Processed in 0.078125 second(s), 27 queries , Gzip On.

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

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

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