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

求程序解釋

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
. S7 F( w) b* Q" _/ T2 b
/* 名称:K1-K4 分组控制LED  r% Y. Q9 x# C7 w) T4 `% m
说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,0 ]/ K2 }3 K* c! V( k$ G
K2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED0 |6 X2 i! V  B; i" B( u& o' h
*/
4 b3 k' E( A) M1 R! S#include<reg51.h>
1 l, A( S' ^6 T( Y#define uchar unsigned char
  n# N2 l7 e& t' K0 \7 L4 V#define uint unsigned int" o) I6 j; M' U5 `* i
//延时6 G. x( n3 e8 i$ E- O
void DelayMS(uint x)
5 S" o  ~+ s* d; r" X8 L3 s{& n3 v2 X8 u2 ^7 K8 {7 ?2 @9 s
uchar i;/ k0 x. k, ^, w3 c
while(x--) for(i=0;i<120;i++);; U  x8 h- q! ?# s# ?
}
6 r7 p; C- T1 w' J0 Z//主程序: g7 j  B7 C$ ]% B5 v
void main()4 r7 D3 X" A% \- C  x& I/ H5 s' X
{
9 Y3 ^3 f+ I' {uchar k,t,Key_State;
7 _+ J# s: U- z5 k1 K. wP0=0xff;: m. ?/ o! ]! H+ p8 _
P1=0xff;
3 |# ?8 l* Z% cwhile(1)
4 P, \4 @2 t# ~{1 p' z: V0 r) g& A' }6 Z( Q2 p
t=P1;
0 @7 ?' a4 \7 l( Gif(t!=0xff)& c. {, N" \: c5 `
{& k% b4 I2 P  R) @% x9 i/ n1 }8 A! B
DelayMS(10);
" t0 p: g( h/ o& W& k4 Zif(t!=P1) continue;2 J% U, M+ ~/ B. n" w9 W# C
//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1)
6 u7 e# V# B2 B7 [+ l6 z//变为模式0000XXXX(X 中有一位为1,其他均为0)
/ h" G2 I) H' x! S5 zKey_State=~t>>4;
2 K5 K8 {9 ~3 p+ D9 W& D0 mk=0;
4 s/ i- M( N4 g* S2 @//检查1 所在位置,累加获取按键号k
% P# Y0 T4 `" D7 x, L- F8 Twhile(Key_State!=0)
* R- z/ p6 F! p0 W7 k. |9 V{* @; O( T. j9 T6 a/ `
k++;
; g( @# B+ t0 \9 b& R( SKey_State>>=1;
4 V- r# Y; s" M+ J}
! a! E! h1 D+ w/ f1 x/ g) G0 U//根据按键号k 进行4 种处理0 u6 e0 y& u4 @. k! u
switch(k)* M" y8 g, B* N4 a3 f
{# y! ]! p( {% M3 ?: _
case 1: if(P0==0x00) P0=0xff;
; M9 U" d: N( L- U& CP0<<=1;
7 P/ Z) g# T' A2 R7 O% z( q' XDelayMS(200);
6 {/ n  E& R9 L! c0 sbreak;9 A8 F# x4 r" n* Z% H' I4 P1 B9 ?; A
case 2: P0=0xf0;break;: Y, g! s- n# E+ m. C
case 3: P0=0x0f;break;
3 y2 g! t) O; k% Dcase 4: P0=0xff;
& S& x1 S5 ]5 Y5 I( E& l% |- R: M2 V* Z}
2 \3 K5 z% j1 ?5 n' [7 ~}) Y; [6 c/ I* g  R% J. Y7 \( {6 V, K' I
}
( W; H- I' T, x6 b}. y1 V/ R( ]0 @6 J, Q

- H8 o* X4 s/ H/ F. d, l$ O2 [: Z小弟初學單片機   當switch k = 1或2或3或4 會自動執行case' X: m( C" A. P" b1 w" J3 u
但是看不懂k++何時變成1或2或3或4
1 j) K8 {! X. P請問各位先進們 可否解釋一下這程序
3 p6 b+ [- o. X& E, [  I6 t0 j; U9 c$ x9 ?" X& ~% y

该用户从未签到

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

评分

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

查看全部评分

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-5 07:30 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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