标题:
请教单片机流水灯程序问题
[打印本页]
作者:
xxx1949
时间:
2021-3-14 21:37
标题:
请教单片机流水灯程序问题
源码如下:
#include"reg52.h"
#include<intrins.h>
typedef unsigned long u32;
typedef unsigned char u8;
void delay(u32 i)
{
while(i--);
}
u8 led,j;
void main()
{
while(1)
{
P0=0xfe;
for(led=0;led<8;led++)
{
delay(10000);
j=~P0<<1;
P0=~j;
//delay(1000);
}
}
}
分析后发现:
1、第七灯如不加注释掉的语句应该根本看不到亮就会转至第一灯,但下载后它却能正常工作。
如果减少循环次数可以和分析的一样,最后的灯看不到亮就转第一灯。
2、软件模拟时parallel port 0会有多灯同时亮的情况。
用的是普中双核a6开发板
请问这是哪有问题?
先谢了
作者:
mffhxa
时间:
2021-3-15 01:31
软件仿真只能参考,与实际运行有时是有差异的,而且这种差异往往很难解释原因,还是以实际运行为准,不必纠结仿真差异。
作者:
wulin
时间:
2021-3-15 06:17
首位也得延时,循环只能移位7次。
#include"reg52.h"
#include<intrins.h>
typedef unsigned long u32;
typedef unsigned char u8;
void delay(u32 i)
{
while(i--);
}
u8 led,j;
void main()
{
while(1)
{
P0=0xfe;
delay(10000);
for(led=7;led>0;led--)
{
j=~P0<<1;
P0=~j;
delay(10000);
}
}
}
也可以这样写
#include"reg52.h"
#include<intrins.h>
typedef unsigned long u32;
typedef unsigned char u8;
void delay(u32 i)
{
while(i--);
}
//u8 led,j;
void main()
{
P0=0xfe;
delay(10000);
while(1)
{
P0=P0<<1|0x01;
if(P0==0xff)
P0=0xfe;
delay(10000);
}
}
作者:
wlefa
时间:
2021-3-15 12:39
应该是第八灯P07端口吧?赋值时就点亮第一灯了,进入for后就给第一灯延时,然后点亮第2灯P01了,也就是0对应点亮2灯P01,6点亮8灯P07端口;然后7给8灯延时后点亮1灯,加1=8后跳出赋值又点亮1灯重复循环,所以正常啊;延时放在前面是在第二次循环中给上一个灯延时,也就是从一灯开始循环;放在后面是灯点亮后延时,也就是从2灯开始循环;(第一灯赋值亮一下就转2灯,时间太短应该人眼看不到)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1