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

求程序解釋

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
, R' p4 Y5 n) ^3 C
/* 名称:K1-K4 分组控制LED
7 x# y9 F" V! G/ Z& U9 f* [( d说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,
% u' g# n: Z% @; j8 ]) f  ?K2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED) e$ x" s) A7 s7 f- L  q
*/1 v3 g+ X6 E3 }* t
#include<reg51.h>
* i4 b+ ]' H/ F" o2 V" J2 L& R#define uchar unsigned char
$ s9 b, Y3 A2 m  ~# g" G/ P0 R( ~6 [#define uint unsigned int
! X4 s9 a3 _3 y1 z# Q. H" y* H0 y//延时
, K' O! k6 o- Hvoid DelayMS(uint x)% S* U# p/ r' S
{
. U) d# i7 E0 R- d  c2 tuchar i;
- ?9 \8 ^. K9 S6 d1 Q: a( @0 wwhile(x--) for(i=0;i<120;i++);
5 H$ c% Y( W$ Q' t, \" G}
1 s! V) G$ u8 Z6 c0 x0 h//主程序
8 N. q$ H% V0 k; Z. _; xvoid main()
5 d" y: n; X( u) v" I. L4 P9 e% M{
) r8 \' a" b% U- ~# q/ suchar k,t,Key_State;% F0 W" V. j: Z; f0 }9 V$ L
P0=0xff;
; P% f* w+ {. M0 D& h( n4 K$ fP1=0xff;) G* w1 k' k) I3 W' m" Q
while(1): V6 W/ n. P- n7 y7 R& p  @
{
6 N; C- n) ~2 f: q, vt=P1;
9 J) e5 q2 e7 x' r4 r6 T0 pif(t!=0xff)7 K3 `  ^+ t/ A9 }
{" r) [( S! g2 x- R/ G' q) ]5 g
DelayMS(10);* c/ w/ C3 l) z  O
if(t!=P1) continue;
7 E' T+ w7 W2 `2 k//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1)8 ?/ u4 w8 ]$ O7 P: _
//变为模式0000XXXX(X 中有一位为1,其他均为0)
% `' {5 g& A$ [Key_State=~t>>4;: E$ {3 K  V% Y/ ^. G  v: V; z
k=0;
  d8 u7 Z! [/ [  D! u//检查1 所在位置,累加获取按键号k
' F" y) S( m# n9 jwhile(Key_State!=0)
& Y9 g& f8 i+ p* r/ ^0 Z/ K. F{
' F# J" t1 y$ t; \: M5 |1 D9 rk++;
8 v4 B3 M6 {% ]8 fKey_State>>=1;
. s4 N6 v2 f+ G; M8 `, w# d/ k}
' I/ X" D; M; ~: `4 i+ F//根据按键号k 进行4 种处理
$ T3 M& P$ w+ f4 ]switch(k)* q% u! R( @" [9 l* N2 T" d: }
{
# C6 q/ b, e: t" w& wcase 1: if(P0==0x00) P0=0xff;4 L5 {, e2 C$ Y. K" T' b. q. J
P0<<=1;% x0 E4 R! K. k, Q  K/ c. L3 r9 _
DelayMS(200);/ ~. M( {. k, ]3 }
break;
! v! b/ c% W* D, \+ Hcase 2: P0=0xf0;break;; f1 V3 B' _1 H
case 3: P0=0x0f;break;
0 H' F/ {% J1 I0 l( i. d2 ycase 4: P0=0xff;
% E* N; b) v. \) \2 [1 n, l}
2 }$ p7 C0 g% M+ ]& s6 A- ^}7 {8 `0 O' f1 l$ L# u1 w4 e& u, E
}
, H' ~8 L' I) G. o}4 o& P5 N$ F/ b2 I( ~

% l. v; e  \: I* e- h8 \) V小弟初學單片機   當switch k = 1或2或3或4 會自動執行case
: o, ~; w* ^7 `$ Z+ r, m, Y/ }但是看不懂k++何時變成1或2或3或46 I+ J9 L. V  p/ l- J1 R) `& d
請問各位先進們 可否解釋一下這程序" h6 E+ s5 B4 n  [
8 I0 I; C, l9 ^8 S

该用户从未签到

2#
发表于 2012-6-5 10:26 | 只看该作者
偶也是初学者~偶的理解是这样的:0 @( s9 _6 x/ g0 m( d2 a. K
以Key_State=~t>>4后=00001000为例:* ?" B9 j- x* c* E4 _
  此时,Key_State!=0为真,执行while语句内容,即K=1,并将Key_State右移一位;
/ D9 ~& U' A& }8 X7 R( U 再判断Key_State!=0仍为真,则继续执行while语句内容,直至Key_State==00000000,则跳出while语句。此时K也加至相应数值~

评分

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

查看全部评分

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 14:29 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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