找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1792|回复: 12
收起左侧

关于单片机流水灯程序的流动方向修改

[复制链接]
ID:1028260 发表于 2022-5-27 19:59 | 显示全部楼层 |阅读模式
xy.png xz.png
板子倒过来看是符合要求的,请各位指点一下,程序对吗?
回复

使用道具 举报

ID:385830 发表于 2022-5-28 07:05 | 显示全部楼层
你这两个程序写的不错,关键就在第 26 行语句,要想实现你的想法只要将这条语句相互交换一下即可实现你的想法了。再或是把两段程序里的第 26 条语句里的【 << 和 >> 】相互交换也可以!
回复

使用道具 举报

ID:1012735 发表于 2022-5-28 07:27 | 显示全部楼层
P2口的排列顺序是反着的,与其它的三个口不一样
回复

使用道具 举报

ID:96682 发表于 2022-5-28 09:02 来自手机 | 显示全部楼层
这个么其实也不用改的只需改变板的方位上下左右移不就变了嘛,又不是显示文字数字区别明显
回复

使用道具 举报

ID:1028260 发表于 2022-5-28 09:03 | 显示全部楼层
谢谢各位的指点,也谢谢版主对主题的编辑,“关于单片机流水灯程序的流动方向修改”,使其更有可读性,目的更明确。
回复

使用道具 举报

ID:99525 发表于 2022-5-28 09:28 | 显示全部楼层
左和右是相对于你板子上的LED排列而言的,默认是从左到右依次P20~P27
回复

使用道具 举报

ID:979299 发表于 2022-5-28 10:32 | 显示全部楼层
<< 左移 高位丢弃,低位补0
>> 右移低位丢弃。对正数左补0,负数左补1
两个符号定义是不一样,不能换一符号就能达到你想要的效果
还是用“_crol_” 与“_cror_”实现左右循环吧
回复

使用道具 举报

ID:624769 发表于 2022-5-28 11:52 | 显示全部楼层
流水灯,一般这么写:

#include <reg52.h>
#include <INTRINS.H>

void main()
{
        unsigned int i;
        P2 = 0xfe;
        while(1)
        {
              P2 = _crol_(P2,1);   //左移
//              P2 = _cror_(P2,1);   //右移
             for(i=0;i<30000;i++); 延时
         }
}
回复

使用道具 举报

ID:1028260 发表于 2022-5-28 17:43 | 显示全部楼层
188610329 发表于 2022-5-28 11:52
流水灯,一般这么写:

#include

谢谢您的帮助,也验证了程序。用库函数很简洁,我想将他改成从右移到左,然后从左往右移动,但总是解决不了,要么不动,要么就一个方向移动。应该如何写。谢谢。
回复

使用道具 举报

ID:624769 发表于 2022-5-28 18:12 | 显示全部楼层
本帖最后由 188610329 于 2022-5-28 18:21 编辑
ccczzzyy 发表于 2022-5-28 17:43
谢谢您的帮助,也验证了程序。用库函数很简洁,我想将他改成从右移到左,然后从左往右移动,但总是解决不 ...

左右往复,一般这么写:

#include <reg52.h>
#include <INTRINS.H>

bit  way;
void main()
{
        unsigned int i;
        P2 = 0xfe;
        while(1)
        {
            if(P2 == 0xfe)            way = 1; //在右端,进入左移模式                  if(P2 == 0x7f)            way = 0;//在左端,进入右移模式   
             if(way)       P2 = _crol_(P2,1);   //左移
             else     P2 = _cror_(P2,1);   //右移
             for(i=0;i<30000;i++); 延时
         }
}







回复

使用道具 举报

ID:624769 发表于 2022-5-28 18:18 | 显示全部楼层
左右往复,一般这么写:

#include <reg52.h>
#include <INTRINS.H>

bit  way;
void main()
{
        unsigned int i;
        P2 = 0xfe;
        while(1)
        {
            if(P2 == 0xfe)            way = 1;          //在右端,进入左移模式            if(P2 == 0x7f)            way = 0;         //在左端,进入右移模式
             if(way)       P2 = _crol_(P2,1);   //左移
             else     P2 = _cror_(P2,1);   //右移
             for(i=0;i<30000;i++); 延时
         }
}



回复

使用道具 举报

ID:979299 发表于 2022-5-28 18:24 | 显示全部楼层
#include <reg52.h>
#include<intrins.h>
unsigned int j,temp,temp1;
void delay(t)
{
        while(t--);
}

void main()
{
       
    temp=0xfe;
        temp1=0x7f;
        while(1)
        {

                for(j=0;j<8;j++)
                {
                        P1=temp;
                        delay(10000);
                        temp=_crol_(temp,1);  //左移
                       
                }
                for(j=0;j<16;j++) //循环右移点亮16次,即两轮,改次数即可改轮数
                {
                        P1=temp1;
                        temp1=_cror_(temp1,1);  //右移
                        delay(10000);
                }
        }
}
回复

使用道具 举报

ID:1028260 发表于 2022-5-29 07:57 | 显示全部楼层
谢谢各位指点。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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