找回密码
 注册
关于网站域名变更的通知
查看: 332|回复: 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);是啥意思啊刚学看不明白​! V: U) M5 @& {7 o7 n+ s2 f
: u5 p, M7 c1 Z/ i5 T
void move_to_m(unsigned char p)​
! M8 w* ~/ f& }) M6 V{​: M% X" {2 }" {, |! S
    unsigned char i;​
3 [+ ~/ ?/ _1 g9 j! z6 U/ h; `) i3 ]0 Z    for(i=0;i<4;i++)​
7 f$ d. p  @7 Z  E    {​
9 |, O. `; @5 l( i/ T        P0=((p<<i)&0x0F)|(0xF0&(p>>i));​+ f- X4 K8 X& f7 Y
        delay(20000);      ​
) F. }2 P% v' ^: |& c% L    }​
" J9 N6 F. g, E5 l* H+ j}​% G: t: z5 d2 }0 o& x8 {3 V) m

9 u- h9 g4 R- \' Lvoid move_from_m(unsigned char p)​* @7 p  V) t8 P" H) x5 d
{​9 R" I+ z- Q& p) G! O
    unsigned char i;​7 R3 @( u2 r( W  j0 l1 W
    for(i=0;i<4;i++)​
2 M1 j1 }1 d& l& \3 J, ^+ X    {​
! w7 z+ A8 d; \4 M* a# s) S        P0=((p&0xF0)<<i)|((p&0x0F)>>i);​0 A4 x% K# w2 j  A7 K
        delay(20000);​
4 D; r  X+ a4 D3 D. ~% s6 S    }​6 [& p* G& B! Y0 T2 g0 `$ ?* C6 E
}: C3 y' o1 z/ g/ g

( c! w" ]+ a) ~( C5 `4 j

该用户从未签到

2#
发表于 2022-3-29 10:06 | 只看该作者
2 I% r$ L+ q' @
' Y. [& V, b8 ]; q& U
P0=P左移i位后的低四位(&0x0F)+P右移i位后的高四位(0xF0&)

该用户从未签到

3#
发表于 2022-3-29 13:32 | 只看该作者

/ X8 I+ O7 Q) q. T( S$ t# k5 t总共八个灯,两种流水方式,第一个函数是两边往中间移动;第二个是从中间往两边移动。

该用户从未签到

4#
发表于 2022-3-29 14:25 | 只看该作者
你好, 这个是我的练习, 看看能帮到你吗2 {% s6 V' E" w0 p* H
/**********************************************  x( N( Y! r7 U
** 文件名:   广告灯.c                                               **
9 p3 r3 ?4 _+ O3 d6 k$ J** 晶振频率: 11.0592MHZ                                              **6 h+ p, J! X7 @* ]4 \0 w
** 日  期:   2022年03月28日                                      **
" E6 \( C7 x9 V4 i1 X** 程  序:   利用移位指令实现拉幕闭幕式                      **: _% P6 H' i9 I* _* D0 q8 J
**********************************************/1 H0 q- F: q$ T6 u4 f
1 y3 e7 X" @, k6 Z: ~" B; B5 e
#include <reg52.h>- ?* _3 d0 R+ G/ o& ~2 Z8 m3 `: D; b
#define uchar unsigned char
) o$ b) ^# n* A8 X7 p#define uint unsigned int
% A# B: D- y. g1 ?: G+ X" i. L" J#define LED P0
* ~1 _. y2 `) y! y+ g8 {0 q* n& i2 _$ H9 ~- V7 s9 Y
/********* 时间延时程序 *********/
: ^% G4 H) T* H$ L9 @: o- o4 n8 M9 N0 j* g) y* e! u
void delayms(uint ms)
6 o! b/ P, j: N, N$ _0 s# N1 e& N, }{
' K1 }7 P* |" U3 ?         uint t;
1 D. v  _- p2 x- w" X7 C) R        while(ms--)
$ O$ |: X/ J) `1 Z6 Q3 D        {* ~0 E: A( u, q  b
                for(t=0; t<100; t++);% h* i! F  \% ?4 L$ D
        }
5 E. O; O3 u- u( f}
! S9 l( t/ w5 n/ ^  n' A! b5 W: l0 M
/ f; o2 E$ C$ ?$ S1 y/************ 主程序 ************/6 U$ a5 O1 T  S3 ?

6 D6 ]6 f; y. }) C- `, v2 Ivoid main(void)
9 f7 p0 K: C! `) [1 n3 m{
0 w6 ^, r& [  _         uchar i, HW, LW;                                                        //HW 高4位  LW 低4位
' ~; o, S+ Q; S. z+ q0 a        while(1); L+ g7 c% T/ H& f; B5 J
        {8 P& o2 z% z5 ?
                LW = 0x08;                                                        //LW=0000 10000 {7 U& b5 D, z+ x$ }# L! K! Y
                HW = 0x10;                                                        //HW=0001 00007 t2 |7 g6 f" Z$ Z) X% `
$ [% _; e$ T' ^3 B8 ]# ]0 q
                for(i=0; i<4; i++)                                                //由於 8个LED, 中间作拉开及向中关闭 所以只需要移动 4次                                                           
7 ~& N, z+ S) f  k3 e                {
' ~8 p! w3 a8 J' ?                        LED = ~(HW|LW)        ;                                //HW|LW = 0001 0000 | 0000 1000 = 0001 1000 ~反相= 1110 0111
, N& x  W5 \' U/ w* N$ D                        delayms(250);
1 W! ~( t% |* ~; j                        LW=(LW>>1)|0x08;                                        //LW移位後补1  LW原 0000 1000 >>移位 0000 0100 || 0000 1000 = 0000 1100
* `/ o2 ^2 o# U/ h$ d; M                        HW=(HW<<1)|0x10;                                        //HW移位後补1  HW原 0001 0000 >>移位 0010 0000 || 0001 0000 = 0011 0000
& y+ ~; F" ?, d& f! c5 g2 z& ]5 Z                }                                                                        //HW|LW 0011 0000 || 0000 1100 = 0011 1100 ~反相 1100 0011                                                           ; _- U$ O% ^! O* m+ e
# Z! Y* i' Z; j  W+ a
                LW = 0x01;                                                        //LW=0000 00014 [, }6 D0 C# F3 M. p
                HW = 0x80;                                                        //HW=1000 0000) z) W8 j8 L  T1 U: d
                                                                                                2 }4 D5 C3 P$ o
                for(i=0; i<4; i++)                                                //由於 8个LED, 中间作拉开及向中关闭 所以只需要移动 4次
1 S+ @$ x) S6 {  I8 c3 F. _                {
! H$ ^" [9 B6 \4 Z9 Q1 a( R                        LED = HW|LW        ;                                        //HW|LW = 1000 0000 | 0000 0001 = 1000 0001
6 ~: k" ]: Y/ }% D# b/ k9 {                        delayms(250);
0 ^; Q# j. [: c: `8 e' ]                        LW=(LW<<1)|0x01;                                        //LW移位後补1  LW原 0000 0001 >>移位 0000 0010 || 0000 0001 = 0000 0011# I1 t1 @+ A/ B4 J3 L
                        HW=(HW>>1)|0x80;                                        //HW移位後补1  HW原 1000 0000 >>移位 0100 0000 || 1000 0000 = 1100 0000
' d; |( [( r9 l% v                }                                                                        //HW|LW 1100 0000 || 0000 0011 = 1100 0011                                                           
  J6 t# Q1 A5 y& b5 A& Y        }
( [! G3 p6 L) G8 Q! y}2 i% H  x( W2 Y3 S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-12 03:43 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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