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

求程序解釋

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

2 v' C- }, `' k9 M- _/* 名称:K1-K4 分组控制LED! g) }# k9 j! R2 M2 i! P' l* u
说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,
" W- R) A. m) `1 \K2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED! z7 ~* G' \* E  a/ V) s
*/( V2 g# O6 m  {+ A4 D2 S
#include<reg51.h>* d: Q8 K% Q5 S( u  K8 K
#define uchar unsigned char8 u7 L0 S3 Q# B4 d+ u
#define uint unsigned int4 b, ]8 m- M5 g5 ^- K" p
//延时% H0 C1 g% G& q: I  G2 J
void DelayMS(uint x)
! b& P. S; M) v/ x# [{
7 J# s& m! [2 s& V. muchar i;
0 a2 Y/ L4 \/ o5 Z2 F/ u" M+ y* o% P5 mwhile(x--) for(i=0;i<120;i++);
' M* Z% A7 V2 Q}/ x& \* o  u) y
//主程序
+ n( l. Y& J' @/ O# d, S- svoid main()
0 y5 x: {$ z# J, B' L{6 u8 j; A9 k( n1 A. `+ b/ E% Y
uchar k,t,Key_State;
8 s9 c# W$ o' c3 b3 _# @% jP0=0xff;! b: _4 z- Z7 _8 R: Z
P1=0xff;
" T1 }! n! ?% @5 c. S! Y2 Ywhile(1)
0 X+ O# Z2 F5 M+ a- L{
6 O- l: c+ e% p  g! t& D; i: F  Pt=P1;
" l& g+ M$ N% u- fif(t!=0xff)
2 G* X  M, w) b7 z& d- z, \! `{
. i, [4 l  l# o% `& e3 a. kDelayMS(10);
8 ?; |& X7 I, vif(t!=P1) continue;
1 L  p- B) y0 G: M5 G- `//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1)3 N5 ]/ }! g( K  s
//变为模式0000XXXX(X 中有一位为1,其他均为0)
  J! j1 W) u/ b3 SKey_State=~t>>4;
+ `/ j/ o7 Q2 Q6 Kk=0;/ u9 j: Z) A- n* ~: {! V8 S- [! ]
//检查1 所在位置,累加获取按键号k& Z9 b  A( W. O
while(Key_State!=0)" ]0 u& a% _1 I
{( v' E/ C! ~4 X$ m+ v& s& Y
k++;
) g7 g1 U4 d/ |  t2 \  l  `Key_State>>=1;
# s7 }% W+ c& t; D& i}
7 g4 A  R6 w: R; K2 @1 C6 f//根据按键号k 进行4 种处理- I( W" U( ]) {2 D
switch(k). t4 Y4 ?9 n' Z; i3 u. j
{8 \7 W* X' W7 L' J3 E! ]4 B% s, G
case 1: if(P0==0x00) P0=0xff;, |4 B& L" T$ c' w6 a
P0<<=1;
; n5 ?6 X7 d7 q. k$ L) |. RDelayMS(200);
3 G% ~3 Y2 u0 U2 g. }break;" Z& _/ W7 O# `  I: b) ?
case 2: P0=0xf0;break;- m  e$ g. [/ T: E7 b
case 3: P0=0x0f;break;
$ m8 t7 C6 I4 ~- I; ^7 y0 @case 4: P0=0xff;
) |: w) `0 t) Y5 w: Y1 s}/ [0 G# G8 ?3 ]/ i3 \0 T) P
}
4 L# v$ ]5 X0 |9 r6 E0 P}/ z( `; q0 e& u% u( n0 v
}  k7 V1 d7 \$ K

8 r; [& `0 p" s2 N: Q, F小弟初學單片機   當switch k = 1或2或3或4 會自動執行case
2 B7 _0 W. u4 m+ i: r% r6 ^但是看不懂k++何時變成1或2或3或45 F! p6 j$ _$ Z9 c9 i
請問各位先進們 可否解釋一下這程序
  u. l( w0 o/ O# ^) d* h/ x
# \% E+ X" J5 F( R6 |

该用户从未签到

2#
发表于 2012-6-5 10:26 | 只看该作者
偶也是初学者~偶的理解是这样的:
5 e9 n, E9 Q" p% O" I. z. `: }% T 以Key_State=~t>>4后=00001000为例:
! {" S/ |3 u( D  此时,Key_State!=0为真,执行while语句内容,即K=1,并将Key_State右移一位;
& M, o: f. W) K 再判断Key_State!=0仍为真,则继续执行while语句内容,直至Key_State==00000000,则跳出while语句。此时K也加至相应数值~

评分

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

查看全部评分

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-20 08:58 , Processed in 0.140625 second(s), 30 queries , Gzip On.

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

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

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