找回密码
 注册
关于网站域名变更的通知
查看: 326|回复: 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);是啥意思啊刚学看不明白​/ r+ C1 P; Q4 e( R& o

3 Q: T7 W( ?' F3 N: svoid move_to_m(unsigned char p)​( v6 Q( L0 l4 Q
{​4 [# M4 x% n/ G' i, W& g+ p3 w
    unsigned char i;​
% g8 g. `, e' J8 _/ C, S    for(i=0;i<4;i++)​& ^9 ?% B; W8 L- \1 |. ~
    {​
5 _+ g2 N. X% P1 |  B        P0=((p<<i)&0x0F)|(0xF0&(p>>i));​
% J3 o: T5 m. g: e6 R& K7 Q        delay(20000);      ​( x% P, V* S# M
    }​( t5 @& V/ ]) C( i# h$ m; p
}​
1 }0 m& c; V) g' F6 ~* Z
- M2 @- W( T& q4 D7 M2 W8 U6 E3 ]void move_from_m(unsigned char p)​
( ?6 p1 g8 V, U$ o{​
! j, K. p* d6 e3 n# d8 x# U    unsigned char i;​
, C* s6 q5 U  r    for(i=0;i<4;i++)​- y* h3 V, ]" h" Y) U+ Y6 @
    {​5 A8 [- J  K* {' G- E% a
        P0=((p&0xF0)<<i)|((p&0x0F)>>i);​2 q2 z/ h4 `. P
        delay(20000);​" m& |, g& T: h2 M5 \6 D
    }​
2 k4 Z" f6 q6 J! ]}+ n8 y) N2 o, z* ~; Q

" y0 W. _. G1 ]8 R

该用户从未签到

2#
发表于 2022-3-29 10:06 | 只看该作者
' l" a. x0 u8 N+ [) c: H

9 ^2 c$ e4 F  M2 z+ RP0=P左移i位后的低四位(&0x0F)+P右移i位后的高四位(0xF0&)

该用户从未签到

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

) Z/ l  A# L* a- n2 E总共八个灯,两种流水方式,第一个函数是两边往中间移动;第二个是从中间往两边移动。

该用户从未签到

4#
发表于 2022-3-29 14:25 | 只看该作者
你好, 这个是我的练习, 看看能帮到你吗! m" u0 m# U) K% {
/**********************************************
; w# h& _6 u2 e; B- {** 文件名:   广告灯.c                                               **
6 t: f3 X! W$ f  Y5 p2 ]** 晶振频率: 11.0592MHZ                                              **
* f$ Y! O! U' ~" }# N, n** 日  期:   2022年03月28日                                      **
, `  |# y. o/ g9 Y; S* K' e** 程  序:   利用移位指令实现拉幕闭幕式                      **3 X- v9 P1 l, X2 W
**********************************************/3 ^( v' k) g0 j' d; ^

: q9 A0 L" P  t, \6 c/ U- g#include <reg52.h>
6 k: X. y& H/ K9 D; s#define uchar unsigned char! \! @7 Q% k  A0 P; V8 M( C4 x
#define uint unsigned int
! ~6 Y  _* [5 o#define LED P0; i2 `* M+ j0 K

4 |' l" _: |0 V/ v3 X/********* 时间延时程序 *********/9 E0 X, ~% t& }% g

1 I! \. X! d1 c9 Xvoid delayms(uint ms)
" _; Y: l/ z4 c{
8 X: ]  ~6 a. T' j7 n2 F* s# n5 k! F2 N         uint t;% I% j( ^0 a' v, v2 s% ]0 j) a& ?
        while(ms--)
  [9 j+ c& D4 }& M  S/ m8 r6 }% u        {; \( Q, Z% \% ]/ K
                for(t=0; t<100; t++);! t( V+ m1 q" U3 x* K. ^
        }
- M3 \, s% ^+ X3 H8 N}7 S- R" ~0 A% C& i% q# p+ q1 Y
+ e3 x/ a$ h7 W3 Z! Z% L
/************ 主程序 ************/  O' ^* Y0 N4 w; m4 C) g- z: l
/ J# @3 D& g+ r2 O
void main(void)
/ o$ Q5 ^3 w2 V{
5 @' F6 g5 S. ], K# q/ ^' I         uchar i, HW, LW;                                                        //HW 高4位  LW 低4位/ V/ {' w6 |4 Z/ ?! A7 ]1 o. ^
        while(1)
# ~+ v; i: p/ s' Q+ x        {' `2 h: [2 N1 n3 R
                LW = 0x08;                                                        //LW=0000 1000! X% f* v$ K7 S  r/ n
                HW = 0x10;                                                        //HW=0001 0000* L  K: t2 Z$ N7 N3 w1 C7 R- M# g# b
' U6 s; c4 j3 Y& P4 Y/ H  A
                for(i=0; i<4; i++)                                                //由於 8个LED, 中间作拉开及向中关闭 所以只需要移动 4次                                                           
' L6 p' S2 r  v( j                {" b4 H) b  c4 m0 q
                        LED = ~(HW|LW)        ;                                //HW|LW = 0001 0000 | 0000 1000 = 0001 1000 ~反相= 1110 0111
9 m5 a6 d! C# q+ ~% d$ f                        delayms(250);
' d- K5 S% @* `7 d+ f8 @                        LW=(LW>>1)|0x08;                                        //LW移位後补1  LW原 0000 1000 >>移位 0000 0100 || 0000 1000 = 0000 1100! ^* @; I* Y" k; |: @9 K+ f
                        HW=(HW<<1)|0x10;                                        //HW移位後补1  HW原 0001 0000 >>移位 0010 0000 || 0001 0000 = 0011 0000
1 U6 f) a* k. u3 Q0 R9 ^2 t) i                }                                                                        //HW|LW 0011 0000 || 0000 1100 = 0011 1100 ~反相 1100 0011                                                           5 v. l4 X1 }& I) e6 Y4 o

2 S. q0 Z) g$ u5 x8 [                LW = 0x01;                                                        //LW=0000 0001
) o, s- c* V; j' H5 W* o" A                HW = 0x80;                                                        //HW=1000 0000
" q) j3 t) |7 `1 P$ r                                                                                                  {: M* U- H( N, T
                for(i=0; i<4; i++)                                                //由於 8个LED, 中间作拉开及向中关闭 所以只需要移动 4次( P# a. x9 V) D' I5 H" M; e0 v
                {* Z8 \2 n0 {5 a: j+ v7 A3 s$ X
                        LED = HW|LW        ;                                        //HW|LW = 1000 0000 | 0000 0001 = 1000 0001
" V1 Q5 D/ B# k# t# F/ ~; G9 J! L                        delayms(250);
8 ^( T% z/ }4 a5 V; U* c                        LW=(LW<<1)|0x01;                                        //LW移位後补1  LW原 0000 0001 >>移位 0000 0010 || 0000 0001 = 0000 0011
9 c% n4 H5 J% n                        HW=(HW>>1)|0x80;                                        //HW移位後补1  HW原 1000 0000 >>移位 0100 0000 || 1000 0000 = 1100 0000/ G9 U* N" T* Q9 o
                }                                                                        //HW|LW 1100 0000 || 0000 0011 = 1100 0011                                                           : s* U' _5 K- K( Z, J  J8 k9 l
        }9 X4 r4 n% {! J% I! S# X/ G
}
8 H+ n% Y3 I$ g1 j
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 07:26 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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