一、实验要求
1: 8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。
2: 间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
3: 间隔300ms先奇数亮再偶数亮,循环三次;流水灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。
二、实验代码
1
#include"REG51.H"
#include"intrins.h"
typedef unsigned int uint;
uint temp;
unsigned char count;
void DelayMs(uint ms)
{
uint i;
while(ms--)
for(i=0;i<113;i++);
}
void f1();
void f2();
void main(void)
{
temp=0xfe;
while(1)
{
f1();
f2();
}
}
void f1()
{
temp=0xfe;
while(1)
{
P2=temp;
DelayMs(200);
temp=_crol_(temp,1);
if(temp==0xfe)
break;
}
temp=_cror_(temp,1);
while(1)
{
P2=temp;
DelayMs(200);
temp=_cror_(temp,1);
if(temp==0xfe)
break;
}
}
void f2()
{
while(1)
{
P2=0X00;
DelayMs(500);
P2=0XFF;
DelayMs(500);
count++;
if(count == 5)
{
count=0;
break;
}
}
}
2
#include"REG51.H"
#include"intrins.h"
typedef unsigned int uint;
void DelayMs(uint ms)
{
uint i;
while(ms--)
for(i=0;i<113;i++);
}
void main(void)
{
uint temp,i,j;
while(1)
{
for(i=0;i<8;i++)
{
temp=0xfe;
for(j=0; j<=i;j++)
{
P2=temp;
DelayMs(300);
temp=_crol_(temp,1);
}
P2=0xff;
DelayMs(300);
}
}
}
3
#include"REG51.H"
typedef unsigned int uint;
void DelayMs(uint ms)
{
uint i;
while(ms--)
for(i=0;i<113;i++);
}
void main(void)
{
uint count;
count=3;
while(count--)
{
P2=0xaa;
DelayMs(300);
P2=0x55;
DelayMs(300);
}
count=3;
while(count--)
{
P2=0x7e;
DelayMs(100);
P2=0xbc;
DelayMs(100);
P2=0xcb;
DelayMs(100);
P2=0xe7;
DelayMs(100);
}
count=3;
while(count--)
{
P2=0x00;
DelayMs(500);
P2=0xff;
DelayMs(500);
}
while(1);
}
二、实验原理图
1
2
3