找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 781|回复: 1
打印 上一主题 下一主题

求程序解釋

[复制链接]

122

主题

613

帖子

2317

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

EDA365欢迎您!

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

x

1 A$ O) h* s. K  L. U! N/* 名称:K1-K4 分组控制LED
3 w- s4 s# `) L说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,1 K' c# Y6 u% X
K2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED
2 }: o) r9 R. F4 s/ ~# y! R/ ]9 K*/
$ w& [5 K' w& E#include<reg51.h>: i* [. Y+ }/ S/ t- a% l
#define uchar unsigned char
. `* C# c. H! q, l+ V#define uint unsigned int
( G* T% |: A: j2 B$ a, h//延时9 t0 c& p+ x! `& u0 {' {
void DelayMS(uint x)
- c% Z) Z  {- x: [7 e5 V{
; U# G2 p( u; @+ w( l. u0 tuchar i;
5 W) s7 [. p+ d& C1 Dwhile(x--) for(i=0;i<120;i++);
+ `' y; e% ~  |/ m! Z}% I/ \& E$ z* N2 }; F: r
//主程序
. c6 I* D  }# M0 t5 W0 c! J* Avoid main()
) ]) o; G* C6 Z8 c{( T, n& F& T9 ~" N, J: O! b7 L
uchar k,t,Key_State;
2 J* ~9 m) u, ?8 C4 SP0=0xff;9 {/ r( y9 {; u1 q4 V5 @
P1=0xff;
: T. s2 ~* S- K* o* u/ G( Awhile(1)# Z: t& C% Y) i4 A7 H
{0 ]. L# G1 C) S' m
t=P1;
1 ~; g, E, a3 b3 Iif(t!=0xff)
8 R* V3 I$ f- E' I7 g. g7 O{
* }" d! \5 N0 \! |DelayMS(10);
5 O+ C" w' o: g2 }* h' }if(t!=P1) continue;
7 y! s. N: }8 d3 h# w//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1)
! m8 }4 v9 q1 S3 E//变为模式0000XXXX(X 中有一位为1,其他均为0)' k& ]5 n! R) [# u: Y8 F
Key_State=~t>>4;3 z, v1 k/ c& ~2 K: p/ u: {) v7 u
k=0;
& I0 u6 p% N3 q1 W% z" Y0 Q% H, N//检查1 所在位置,累加获取按键号k. V% m: j) A5 [
while(Key_State!=0)
4 V- t) `4 @2 U" Z! t! k- A{
+ h3 x# }5 J! e6 P4 B1 hk++;% R0 l9 p  r0 D4 j
Key_State>>=1;( z) q" v1 I% D( Y4 @2 m; W/ X
}: }% M- E' |, g4 I
//根据按键号k 进行4 种处理! x5 C7 B( P; Z* g- L
switch(k)
/ @, Z$ f2 M# @& c- P+ C4 ?$ u! [/ h{( d2 |& l" K! w& F2 |+ I( h: o1 E1 s
case 1: if(P0==0x00) P0=0xff;
4 X$ p( x& `0 E# L. dP0<<=1;
) X. \+ C5 G: o& qDelayMS(200);
5 f9 U7 W) d$ Pbreak;/ S* i7 t9 @4 o0 H
case 2: P0=0xf0;break;
: ~5 V7 k, K* Y) g3 i' ncase 3: P0=0x0f;break;
3 Q: L3 g) C4 acase 4: P0=0xff;$ U$ j% f# o) O2 z& R- |8 D, W( {
}
* J9 f: z6 C$ O}
) ~7 Y/ W8 u! D, x! |}
4 a7 i; b2 i$ ~/ i}: j4 I4 L' E; Z; N. X. \  t! U

) Z4 h$ i- R3 L% v5 M- z小弟初學單片機   當switch k = 1或2或3或4 會自動執行case" [! C" v, W1 Q# q
但是看不懂k++何時變成1或2或3或4
% ^5 u- {  I6 d5 e請問各位先進們 可否解釋一下這程序
7 Z  v8 C' m; q0 h' ]
9 y3 ]" E9 N+ F4 }0 H7 v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

13

主题

120

帖子

1219

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1219
2#
发表于 2012-6-5 10:26 | 只看该作者
偶也是初学者~偶的理解是这样的:. {( L( E! n6 B% |& i( c
以Key_State=~t>>4后=00001000为例:
# B0 C" G2 R: `  此时,Key_State!=0为真,执行while语句内容,即K=1,并将Key_State右移一位;
: _" P2 i- V/ G7 v; a 再判断Key_State!=0仍为真,则继续执行while语句内容,直至Key_State==00000000,则跳出while语句。此时K也加至相应数值~

评分

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

查看全部评分

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

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-9-19 09:50 , Processed in 0.065003 second(s), 39 queries , Gzip On.

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

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

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