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

请教一个单片机Keil uVision4流水灯编程问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-3-29 09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
P0=((p<<i)&0x0F)|(0xF0&(p>>i));和  P0=((p&0xF0)<<i)|((p&0x0F)>>i);是啥意思啊刚学看不明白​$ H  q! ?: H, x4 V) \4 p' n

: I- q* Y, t" xvoid move_to_m(unsigned char p)​/ k4 H  n% N2 E; T7 J
{​
3 R% L( S" n; X. m    unsigned char i;​' t$ A$ E: }" K: y) q% X9 e4 a5 b
    for(i=0;i<4;i++)​) [$ ^, X2 D* F6 |+ v
    {​
; T3 I; e/ i* x7 Y        P0=((p<<i)&0x0F)|(0xF0&(p>>i));​' m, l- t# t# p9 s
        delay(20000);      ​; f; p; h" S& R3 i0 Y5 g' g
    }​, M: _' k" ~9 I" N! d
}​
7 c  Q. `* {/ t' e9 W" D: F
  m3 |: G: y) Tvoid move_from_m(unsigned char p)​
6 ]( X" ?8 @% {: c{​
$ K$ p: X  h" e5 r2 z! a    unsigned char i;​; l5 a3 A2 J8 x
    for(i=0;i<4;i++)​
7 v7 \/ t. m' r1 a" A3 Q& g' k1 k    {​
4 w$ K! i; C  V) z4 L" ?: f        P0=((p&0xF0)<<i)|((p&0x0F)>>i);​
' ~* W' }6 ^* v, n0 A4 I        delay(20000);​
8 t1 L, W5 l- g, L3 P% q/ W; _    }​
& M; ~5 f/ j8 C2 w0 \' Y}3 ]+ z# j( c: Y
% {; G  z5 c" |1 s0 r' t, s& e

该用户从未签到

2#
发表于 2022-3-29 10:06 | 只看该作者

) X* g7 p: _: V; o
4 ?4 @# x  Y8 v+ W% YP0=P左移i位后的低四位(&0x0F)+P右移i位后的高四位(0xF0&)

该用户从未签到

3#
发表于 2022-3-29 13:32 | 只看该作者
- |+ N9 \7 r0 c9 A$ e) K$ P
总共八个灯,两种流水方式,第一个函数是两边往中间移动;第二个是从中间往两边移动。

该用户从未签到

4#
发表于 2022-3-29 14:25 | 只看该作者
你好, 这个是我的练习, 看看能帮到你吗
& D" q$ ?& a2 U* n8 T& l; ?" [/**********************************************
1 M% Z6 b1 L' y8 m6 j. f. S0 _0 T** 文件名:   广告灯.c                                               **- p3 T/ R$ ^! z2 X: R, w
** 晶振频率: 11.0592MHZ                                              **8 _& X" Y' j5 g6 S4 g' a: y
** 日  期:   2022年03月28日                                      **
6 f' ~# q, z- N* e) P9 ]; Q** 程  序:   利用移位指令实现拉幕闭幕式                      **
1 J) B" L/ ~) M# M# `% n/ _, T9 D**********************************************/( E6 e- q  O, M

, G/ P$ ?# H% ?3 B- p#include <reg52.h>/ Q6 T; W5 E- |! L
#define uchar unsigned char
; D) P0 [9 w) I$ A/ ^4 H1 B  ]0 M#define uint unsigned int1 X7 r. X% O2 a1 o: t7 i' f+ y4 J$ e
#define LED P0: E! P  ]; g* _- ]/ A) u" O

# v3 b: r4 t/ Y4 f- n) z3 T/********* 时间延时程序 *********/
$ R- l( F  F% p  B9 s5 M! ?
7 V' p# t0 a% k8 j9 J6 Vvoid delayms(uint ms); P* ?$ X3 {4 M0 r; h
{* B: ?: S( U% h5 Q- r
         uint t;, U- ]; m! I7 z6 X+ c
        while(ms--)! u, ~: P6 G, O" y
        {
' R' O* Y& f0 q- C, U3 W                for(t=0; t<100; t++);
$ w) X2 {% v/ g        }  z; z$ f6 u* C# ^( p
}3 X. J8 A2 T' F" w& ~
5 C& H' Q( i3 x0 ?9 k
/************ 主程序 ************/  L. m- z$ G8 j6 X

2 T$ z- n8 n. [void main(void)( \+ z% Y: y/ G  r" O7 c
{. x1 ]/ T  A+ Y4 e
         uchar i, HW, LW;                                                        //HW 高4位  LW 低4位6 t- D( [. q5 `) {' G: ?
        while(1)2 C  m6 T: Z- F8 s+ K
        {
9 m, Q) G) p( U3 V8 T- p9 k2 h7 M                LW = 0x08;                                                        //LW=0000 1000
# v& z' b0 X1 ?) Z8 J                HW = 0x10;                                                        //HW=0001 0000
4 Y( W, k1 s: B) Q" A+ |- Q/ N( T' P. R
                for(i=0; i<4; i++)                                                //由於 8个LED, 中间作拉开及向中关闭 所以只需要移动 4次                                                           % u9 r6 w' Q  b8 C
                {9 k) m7 Z' F; H( w
                        LED = ~(HW|LW)        ;                                //HW|LW = 0001 0000 | 0000 1000 = 0001 1000 ~反相= 1110 0111& O" t# C; p; ^' s
                        delayms(250);4 e$ M5 y& V9 P8 d! \
                        LW=(LW>>1)|0x08;                                        //LW移位後补1  LW原 0000 1000 >>移位 0000 0100 || 0000 1000 = 0000 1100
) E8 q9 ?6 M' X& U1 E                        HW=(HW<<1)|0x10;                                        //HW移位後补1  HW原 0001 0000 >>移位 0010 0000 || 0001 0000 = 0011 0000
- A/ D! k& m: |                }                                                                        //HW|LW 0011 0000 || 0000 1100 = 0011 1100 ~反相 1100 0011                                                           
! M% p3 Y3 z5 ~- j+ p+ Z$ W/ i) E! V& a  U2 h' k* \* C) T& e" c, \, G% u
                LW = 0x01;                                                        //LW=0000 0001
1 M0 }7 }1 \2 B% m$ m% A3 u                HW = 0x80;                                                        //HW=1000 0000
5 B$ A( M$ z% H3 ^% d                                                                                                
, T1 m$ z+ N3 k0 T                for(i=0; i<4; i++)                                                //由於 8个LED, 中间作拉开及向中关闭 所以只需要移动 4次
3 V: T4 s; `! A0 G1 q) T4 ]! r9 o                {: |7 B( t+ r/ w* A
                        LED = HW|LW        ;                                        //HW|LW = 1000 0000 | 0000 0001 = 1000 0001
/ H" W2 s6 C  D6 }                        delayms(250);
; P5 w: L* _9 V: i  F% l8 }                        LW=(LW<<1)|0x01;                                        //LW移位後补1  LW原 0000 0001 >>移位 0000 0010 || 0000 0001 = 0000 0011
. |2 v2 F- C* \. c. W) D                        HW=(HW>>1)|0x80;                                        //HW移位後补1  HW原 1000 0000 >>移位 0100 0000 || 1000 0000 = 1100 0000
) m2 Z, D! S/ C- Q                }                                                                        //HW|LW 1100 0000 || 0000 0011 = 1100 0011                                                           
  |* Y+ b% z* ~6 Q, _! G$ x4 S3 N        }" f  z2 p7 i5 n  m! @% Y
}
" C" Z: F' _2 q5 S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 11:00 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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