找回密码
 注册
关于网站域名变更的通知
查看: 314|回复: 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);是啥意思啊刚学看不明白​
  J- q, c1 e& A3 J- t: h
8 H4 a: ~7 }& t9 _) V* xvoid move_to_m(unsigned char p)​
6 [7 p- k, l# H, ?0 B* ^{​5 Z" k4 Z. I4 @/ F; h9 u
    unsigned char i;​
; V2 _- a! }" ~    for(i=0;i<4;i++)​
* ]6 N. C  `9 K) ^: U( \, \  u7 R    {​
# @; N& J  U# f0 g8 Z2 ~, p        P0=((p<<i)&0x0F)|(0xF0&(p>>i));​
2 Q6 K" _% F; w& P2 n        delay(20000);      ​3 C6 _, B& ]/ F8 W1 M- B. _
    }​
3 z; {/ U: @7 k) r" d) a}​6 `0 J1 q# ], ~

' X0 p& F2 v5 @5 _4 r$ f2 K) Tvoid move_from_m(unsigned char p)​
' G0 L+ n, E3 K% G# r4 Y{​
( [0 A! d6 h- W8 p+ k4 |2 y    unsigned char i;​% t5 \- B! h9 y8 w. L- m4 }
    for(i=0;i<4;i++)​
4 `1 I! }7 p3 @' B& |$ C! X  @    {​5 F4 D' J- D4 i1 e2 ~, T3 H2 B0 F
        P0=((p&0xF0)<<i)|((p&0x0F)>>i);​3 M# r- @* X2 ^  r, c
        delay(20000);​% d0 N, N7 q8 C+ E
    }​
8 {4 Q2 Y9 u; W$ D* m$ Z/ L}
! l! G/ S% F  b% k! |
- j3 q3 @2 ]/ s. C% T) x

该用户从未签到

2#
发表于 2022-3-29 10:06 | 只看该作者
4 ^# T7 z) k6 y! Z" K
# h3 u# ]3 g2 v1 e  |
P0=P左移i位后的低四位(&0x0F)+P右移i位后的高四位(0xF0&)

该用户从未签到

3#
发表于 2022-3-29 13:32 | 只看该作者
! C; F* u6 N/ F
总共八个灯,两种流水方式,第一个函数是两边往中间移动;第二个是从中间往两边移动。

该用户从未签到

4#
发表于 2022-3-29 14:25 | 只看该作者
你好, 这个是我的练习, 看看能帮到你吗
" l- J9 o" \$ b/**********************************************0 Q6 R9 I; Y% U1 l$ ~
** 文件名:   广告灯.c                                               **
8 x4 i  E9 G: L4 C3 R7 y# p** 晶振频率: 11.0592MHZ                                              **; `1 F; W( P4 }. G8 F' H
** 日  期:   2022年03月28日                                      **6 J" |3 [" i6 z2 r) d
** 程  序:   利用移位指令实现拉幕闭幕式                      **& e1 U5 v. v& m" C
**********************************************/
8 E; R8 D9 Y7 F3 l3 q& x& J, B, }- @# n6 Z
#include <reg52.h>
  E; w8 `% O- b6 y& N# U#define uchar unsigned char7 H0 H! @) F: v) u
#define uint unsigned int
' `) W5 h5 i2 m5 H& R8 ~/ W' p- F& a#define LED P0
0 R8 ~) i) Y8 o/ o, [' }2 s$ b! _+ N0 g: Y( r9 l
/********* 时间延时程序 *********/9 b, Q. U  d6 b: A; H
. N; Y: B/ v; X" y3 ]
void delayms(uint ms)
. d3 ?3 O9 o0 b{+ U0 t8 y( A1 C. G& ^) L( h7 {
         uint t;0 J6 O; E: X4 ^0 S7 t& S
        while(ms--)
5 ]3 `9 l1 a$ ?        {
8 q: @* i1 s1 s& n$ k8 Z# j                for(t=0; t<100; t++);
2 t8 U, T" F( a. a        }; {) ^+ P3 M" n2 h
}' b# a/ }; Z, G4 }% o9 b; Y0 F$ s

; D/ Y5 {9 A) r" h* K/************ 主程序 ************/; g3 W  U8 c$ L

  P. z4 A) N5 P% C! `3 A( S; ^4 }4 Lvoid main(void)) n& {* {+ \0 `4 P6 N4 M
{
2 O. O5 K8 Y! b' I0 L; e: w         uchar i, HW, LW;                                                        //HW 高4位  LW 低4位; F) l6 x% ]& n6 I
        while(1)
% x- V9 w$ C  G% i$ P6 ?* d        {) R! q+ u- W* R% D
                LW = 0x08;                                                        //LW=0000 1000' C- {# E5 N& }2 S  [* R6 w! ^
                HW = 0x10;                                                        //HW=0001 0000
; m0 M3 o, F1 e* f; e$ r4 ^0 k' A% U+ L: s( D3 g! @" q. K
                for(i=0; i<4; i++)                                                //由於 8个LED, 中间作拉开及向中关闭 所以只需要移动 4次                                                           
9 d* _$ z- r4 D' w- [+ ~1 t                {( l) @$ o0 f. _, ~. l
                        LED = ~(HW|LW)        ;                                //HW|LW = 0001 0000 | 0000 1000 = 0001 1000 ~反相= 1110 0111
* r# [+ W# W/ e7 Q                        delayms(250);
: z/ H5 c+ b2 a                        LW=(LW>>1)|0x08;                                        //LW移位後补1  LW原 0000 1000 >>移位 0000 0100 || 0000 1000 = 0000 1100
5 V5 A+ x9 C; I                        HW=(HW<<1)|0x10;                                        //HW移位後补1  HW原 0001 0000 >>移位 0010 0000 || 0001 0000 = 0011 0000
  M5 L7 R4 y8 ]3 e* u( \                }                                                                        //HW|LW 0011 0000 || 0000 1100 = 0011 1100 ~反相 1100 0011                                                           2 i7 N; D* x, ]$ H/ M5 y' F- Z
: E6 i4 L+ E6 R% P
                LW = 0x01;                                                        //LW=0000 0001
% Z. M+ s4 h' k1 C                HW = 0x80;                                                        //HW=1000 0000
# N6 F4 Z3 e6 U* V                                                                                                
; v3 Z5 P% T! s                for(i=0; i<4; i++)                                                //由於 8个LED, 中间作拉开及向中关闭 所以只需要移动 4次. o( F0 h' g8 e. l3 @1 V, E. ]# o: I6 s
                {
6 q& o: P6 `: T: Z                        LED = HW|LW        ;                                        //HW|LW = 1000 0000 | 0000 0001 = 1000 00016 f9 t% e" N) ]+ p, Z7 A9 @
                        delayms(250);9 z( A' Z' j$ Y- T8 L; _
                        LW=(LW<<1)|0x01;                                        //LW移位後补1  LW原 0000 0001 >>移位 0000 0010 || 0000 0001 = 0000 0011
  z1 d! b  P1 f0 a4 h" n7 i) K                        HW=(HW>>1)|0x80;                                        //HW移位後补1  HW原 1000 0000 >>移位 0100 0000 || 1000 0000 = 1100 0000
8 q0 R: Y) N: G3 k# x& T8 v' j                }                                                                        //HW|LW 1100 0000 || 0000 0011 = 1100 0011                                                           
+ o8 e3 D0 H3 o! A! ^  F        }0 S, N4 d) \2 A& U  Q# s
}
( I, k* V3 `6 t% m% p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-22 02:57 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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