单片机编程:P0-P7口实现一次亮俩个并且向左移动,重复循环。

如题所述

第1个回答  2013-04-10
这个就太简单了,给你写个用定时器的吧!

#include<reg52.h>
#include<intrins.h>
unsigned char num,temp;
void main()
{
EA=1;
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
ET0=1;
TR0=1; //以上为定时器0中断设置并打开
temp=0xfc; //根据你的流水灯的设置取值,此处设置为低电平亮灯
while(1);
}
void timer0() interrupt 1
{
TR0=0;
num++;
if(num==10) //500ms 进去亮灯一次,想快点自己把数据改小
{
num=0;
P0=temp;
temp=_crol_(temp,2); //循环左移
}
TH0=(65535-50000)/256; //重转初值
TL0=(65535-50000)%256;
TR0=1;
}
第2个回答  2013-04-10
应该是P0口的8位吧?如果用c写,你可以用循环左移函数,你用的是51单片机吧?不懂继续问。
没必要这么复杂吧。。。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char

void delay(uchar z);
int a;uchar i,j;
void main()
{
a=0xa0;
while(1)
{

P0=a;
delay(100);
a=_crol_(a,1);
}
}

void delay(uchar z)
{
for(i=0;i<200;i++)
for(j=0;j<z;j++);
}

这不久行了。。。追问

写的不错,可惜不是我想要的。

本回答被网友采纳
第3个回答  2013-04-10
#include <reg52.h>
void Delay(int ticks)
{
int i;
int j;
for(i = 0; i < ticks; i++)
{
for(j = 0; j < 1000; j++);
}
}
void main(void)
{
unsigned char rol = 0x03;
unsigned char index = 0;

while(1)
{
P0 = rol;
Delay(5000);
index ++;
rol = rol << 1;
if(index == 7)
{
rol = rol | 0x01;
}
else if(index == 8)
{
index = 0;
rol = 0x03;
}
}
}来自:求助得到的回答
第3个回答  2013-04-10
P0=00000011;
P0=P0<<1;
其他的你自己加吧。
相似回答