找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

求程序解釋

[复制链接]

122

主题

613

帖子

2317

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x

+ ]& y5 N' \7 E& e8 j$ j  h: b- V/* 名称:K1-K4 分组控制LED
! T' b4 S+ S" a# T5 k; u) |0 `5 q7 @说明:每次按下 K1 时递增点亮一只LED,全亮时再次按下则再次循环开始,
+ r6 `  q& S, e% iK2按下后点亮上面4 只LED,K3 按下后点亮下面4 只LED,K4 按下后关闭所有LED' n9 q$ z" i, i( Y  T' {; L
*/
" g% L4 M2 A) O' J- |) A) Y#include<reg51.h>* A- Q. v1 ]. A5 e
#define uchar unsigned char
3 H" M8 |1 k' X9 Z6 o6 @9 H- x#define uint unsigned int
0 I- ?( l( o9 m. E, B2 M- L# e//延时! |& g- Y7 E4 Z9 o2 N+ f
void DelayMS(uint x)
+ X& f1 P1 e5 _{5 `% i; d+ W7 O! R/ q; ~& t4 V! q
uchar i;
# i* L1 e4 l* W+ j- Pwhile(x--) for(i=0;i<120;i++);
( h4 o/ _% c; H+ }% ?4 a}2 J/ Y, N. Z4 R$ S
//主程序  Z) x+ H+ @+ n7 _
void main()
! x) i. O* K) p/ u& s$ z) A! |{7 R9 B/ S' z, R
uchar k,t,Key_State;
, E: R4 U& q5 MP0=0xff;
% c' Z* v# L8 M, BP1=0xff;) u$ J" q5 V/ O0 c" @! J
while(1)
; Q( {) H0 W9 u4 m; I. N5 a9 p{0 P2 B$ g5 M" T: R$ H% T
t=P1;
: {$ q* B8 |1 Q2 tif(t!=0xff)
6 b2 Q4 t6 q3 ~, V{
) l/ B" `8 U" L# L1 l/ ADelayMS(10);
0 |( W* M) G* t, y& m' f  S4 X' T' Xif(t!=P1) continue;6 s0 p/ h$ H0 C5 K' m  J7 p5 o/ W
//取得4 位按键值,由模式XXXX1111(X 中有一位为0,其他均为1)
# W( Z# y* |) V4 c9 p//变为模式0000XXXX(X 中有一位为1,其他均为0)5 Y* k7 ~% [& w  u/ b8 ]& |
Key_State=~t>>4;1 L7 I8 V1 {/ v
k=0;- B+ B1 A  ~  {: R
//检查1 所在位置,累加获取按键号k
" t# r# b5 @" o/ O# \while(Key_State!=0)
. Y2 R: x# {1 W! N{
# d/ ?6 L! D+ [5 [: v, J: _k++;
* M9 `- D' Z3 g0 ]% NKey_State>>=1;
* G+ G, d% y( g& a7 _9 a% U% M# u}1 a9 P4 n; L; |: {
//根据按键号k 进行4 种处理
6 x  o' O8 ], m0 D( d) Tswitch(k)' f# h# x) J/ x4 [; e, n/ q
{
5 L4 o" F6 H& A3 Ccase 1: if(P0==0x00) P0=0xff;8 x1 T) v" T; Q3 S/ A
P0<<=1;
' {1 d* @9 g$ U. K4 w% X" m% Q" l6 Q2 ADelayMS(200);
! \7 t' Q' x) R  {- c7 l* `break;$ S4 [8 B% ^; Z; G6 U
case 2: P0=0xf0;break;/ i, F0 c; t3 G5 P" M; j2 r
case 3: P0=0x0f;break;# {1 C  S% j1 S9 ~) d6 T# a0 q' C; g
case 4: P0=0xff;
; L* A, o/ j2 ]}: U# j0 C$ j% }2 L( V: K- k
}, i$ H3 R5 v7 J! U, m5 i! f& R
}) \! P- [5 [; t# \6 U& ^
}
$ g; {4 o  r5 f& s4 o; e# j0 m
小弟初學單片機   當switch k = 1或2或3或4 會自動執行case
2 B4 K" f% f  k2 N但是看不懂k++何時變成1或2或3或4
/ D: s5 t3 f' ~請問各位先進們 可否解釋一下這程序
- X4 \  h1 B( ], v6 g+ U, z8 p+ w% t" T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

13

主题

120

帖子

1219

积分

四级会员(40)

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

积分
1219
2#
发表于 2012-6-5 10:26 | 只看该作者
偶也是初学者~偶的理解是这样的:
3 c1 Q( y$ g; r: h 以Key_State=~t>>4后=00001000为例:
" |( z  J) s6 ^7 ]  此时,Key_State!=0为真,执行while语句内容,即K=1,并将Key_State右移一位;2 ?7 d1 Q6 j  r. ^% \
再判断Key_State!=0仍为真,则继续执行while语句内容,直至Key_State==00000000,则跳出while语句。此时K也加至相应数值~

评分

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

查看全部评分

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

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-9-17 04:33 , Processed in 0.060716 second(s), 38 queries , Gzip On.

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

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

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