标题: 可以将一个现成的单片机LED流水灯程序扩展赋值到所有I/O口吗? [打印本页]

作者: 白水大虾2016    时间: 2024-5-6 09:53
标题: 可以将一个现成的单片机LED流水灯程序扩展赋值到所有I/O口吗?
求大侠指教:可以将一个现成的单片机LED流水灯程序扩展赋值到所有I/O口吗?是不是将原有(比如P1口)指向移植到其它(P2、P3、P4......)口就可以了?
作者: xiaobendan001    时间: 2024-5-6 11:22
应该可以把
作者: Hephaestus    时间: 2024-5-6 13:26
当然可以了,修改IO口置位复位指令就行。
作者: Kxuan163    时间: 2024-5-6 14:20
在原程序中修改I/O口, 例如将P1 改为P2 .P3,P4,...
作者: 白水大虾2016    时间: 2024-5-6 14:44
Kxuan163 发表于 2024-5-6 14:20
在原程序中修改I/O口, 例如将P1 改为P2 .P3,P4,...

你好!我说的是同时赋值到所有的I/O口。
作者: zt2010    时间: 2024-5-6 14:46
代码中可以修改I/O口, 将P1 改为P2 .P3,P4,...
作者: Hephaestus    时间: 2024-5-6 15:39
白水大虾2016 发表于 2024-5-6 14:44
你好!我说的是同时赋值到所有的I/O口。

显然是不可能的,8051就没有这种指令。
作者: mtt661    时间: 2024-5-6 23:27
P1=......
P2=......
P3=......
P4=......
......是相同的数值  复制一下不就行了 4个口同时流水
作者: npn    时间: 2024-5-6 23:49
白水大虾2016 发表于 2024-5-6 14:44
你好!我说的是同时赋值到所有的I/O口。

单片机是8位1组并行IO口,一条指令最多传送8位,要么加74HC273或74HC595锁存,FPGA可以无限位并行传送。
作者: 明日之星8    时间: 2024-5-7 00:00
白水大虾2016 发表于 2024-5-6 14:44
你好!我说的是同时赋值到所有的I/O口。

虽然不能同时赋值到所有的I/O口,但可以紧跟着赋值到其它的I/O口,
中间的时间间隔很短,从宏观上看我们感觉是“同时”的。
作者: wulin    时间: 2024-5-7 06:27
白水大虾2016 发表于 2024-5-6 14:44
你好!我说的是同时赋值到所有的I/O口。

绝对同时不可能,相对同时(相差几us秒)可以。
#include <reg51.h>

void Delay_ms(unsigned int t)
{
        unsigned int i,j;
        for(i=t;i>0;i--)
                for(j=120;j>0;j--);
}

void main(void)
{
        unsigned long temp=0xfffffffe;
        while(1)
        {
                P0=temp;
                P1=temp>>8;
                P2=temp>>16;
                P3=temp>>24;
                Delay_ms(1000);
                temp=temp<<1|1;
                if(temp==0xffffffff)
                        temp=0xfffffffe;
        }
}

作者: 白水大虾2016    时间: 2024-5-7 11:46
wulin 发表于 2024-5-7 06:27
绝对同时不可能,相对同时(相差几us秒)可以。
#include

明白了,谢谢哈!
作者: 白水大虾2016    时间: 2024-5-7 12:17
npn 发表于 2024-5-6 23:49
单片机是8位1组并行IO口,一条指令最多传送8位,要么加74HC273或74HC595锁存,FPGA可以无限位并行传送。

这我就明白了,谢谢大侠!
作者: 白水大虾2016    时间: 2024-5-7 12:18
明日之星8 发表于 2024-5-7 00:00
虽然不能同时赋值到所有的I/O口,但可以紧跟着赋值到其它的I/O口,
中间的时间间隔很短,从宏观上看我们 ...

明白了,谢谢大侠!
作者: 白水大虾2016    时间: 2024-5-7 12:20
wulin 发表于 2024-5-7 06:27
绝对同时不可能,相对同时(相差几us秒)可以。
#include

学习了,谢谢大侠!无限感谢!
作者: 白水大虾2016    时间: 2024-5-7 12:25
wulin 发表于 2024-5-7 06:27
绝对同时不可能,相对同时(相差几us秒)可以。
#include

请教大侠:流水灯语句放在此语句的什么位置?前端、中端还是终端?
作者: wulin    时间: 2024-5-7 16:14
白水大虾2016 发表于 2024-5-7 12:25
请教大侠:流水灯语句放在此语句的什么位置?前端、中端还是终端?

temp=temp<<1|1;这就是流水
作者: STC庄伟    时间: 2024-5-7 17:03
为啥会有如此奇怪的问题,初学者就先学习范例程序啊
作者: 白水大虾2016    时间: 2024-5-8 10:58
npn 发表于 2024-5-6 23:49
单片机是8位1组并行IO口,一条指令最多传送8位,要么加74HC273或74HC595锁存,FPGA可以无限位并行传送。

明白,谢谢哈!
作者: 白水大虾2016    时间: 2024-5-8 10:59
wulin 发表于 2024-5-7 06:27
绝对同时不可能,相对同时(相差几us秒)可以。
#include

学习了,谢谢哈!
作者: 白水大虾2016    时间: 2024-5-8 11:00
wulin 发表于 2024-5-7 06:27
绝对同时不可能,相对同时(相差几us秒)可以。
#include

请教大侠:流水灯语句放在此语句的什么位置?前端、中端还是终端?
作者: 白水大虾2016    时间: 2024-5-8 11:02
STC庄伟 发表于 2024-5-7 17:03
为啥会有如此奇怪的问题,初学者就先学习范例程序啊

就是个菜鸟呀
作者: 白水大虾2016    时间: 2024-5-8 12:15
wulin 发表于 2024-5-7 16:14
temp=temp

老师你好!是全亮,将Delay_ms(1000)数值修改没用,什么原因呢?
作者: wulin    时间: 2024-5-8 13:42
白水大虾2016 发表于 2024-5-8 12:15
老师你好!是全亮,将Delay_ms(1000)数值修改没用,什么原因呢?

这个简单程序是基于51单片机,12M晶振验证过的。改延时只能改变流水快慢。原代码延时是1秒。
作者: 白水大虾2016    时间: 2024-5-9 12:09
wulin 发表于 2024-5-8 13:42
这个简单程序是基于51单片机,12M晶振验证过的。改延时只能改变流水快慢。原代码延时是1秒。

谢谢!





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1