第2讲-流水灯设计、蜂鸣器发声、继电器控制视频习题答案
1. 第一个发光管以间隔200ms闪烁
#include<reg52.h>
#define uint unsigned int
sbit D1=P1^0;
void delay(uint time);
void main()
{
while(1)
{
D1=0;
delay(200);//200ms
D1=1;
delay(200);
}
}
void delay(uint time)
{
uint i,j;
for(i=time;i>0;i--)
{
for(j=114;j>0;j--)
{
}
}
}
2. 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
sbit deep=P2^3;//蜂鸣器
uint temp;
void delay(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=114;j>0;j--);
}
void main()
{
temp=0xfe;
while(1)
{
P1=temp;
temp=_crol_(temp,1);
deep=0;
delay(500);
P1=0xff;
deep=1;
delay(500);
}
}
3. 8个发光管来回流动,每个管亮100ms流动时让蜂鸣器发出“滴滴”声
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
sbit deep=P2^3;//蜂鸣器
uint temp;
void delay(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=114;j>0;j--);
}
void main()
{
uint i;
while(1)
{
temp=0xfe;
for(i=0;i<8;i++)
{
P1=temp;
temp=_crol_(temp,1);
deep=0;
delay(50);
deep=1;
delay(50);
}
temp=0x7f;
for(i=0;i<8;i++)
{
P1=temp;
temp=_cror_(temp,1);
deep=0;
delay(50);
deep=1;
delay(50);
}
}
}
4. 用8个发光管演示出8位二进制数累加过程
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
uint temp;
void delay(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=114;j>0;j--);
}
void main()
{
while(1)
{
temp++;
P1=~temp;
delay(1000);
}
}
5. 8个发光管间隔200ms,由上至下,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
uint temp;
void delay(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=114;j>0;j--);
}
void main()
{
uint i,j;
while(1)
{
for(j=0;j<2;j++)
{
temp=0xfe;
for(i=0;i<8;i++)
{
P1=temp;
temp=_crol_(temp,1);
delay(300);
}
}
P1=0xff;
for(i=0;i<10;i++)
{
delay(500);
P1=~P1;;
}
}
}
6. 间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
uint temp;
void delay(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=114;j>0;j--);
}
void main()
{
uint i,j;
while(1)
{
temp=0xfe;
for(j=0;j<8;j++)
{
for(i=0;i<8-j;i++)
{
P1=temp;
temp=_crol_(temp,1);
delay(300);
}
P1=0xff;
temp=_crol_(temp,j);
temp=temp<<1;
}
}
}
7. 间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光灯,程序停止
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
uint temp;
void delay(uint time)
{
uint i,j;
for(i=time;i>0;i--)
for(j=114;j>0;j--);
}
void main()
{
uint i,j;
for(i=0;i<3;i++)
{
P1=0xaa;
delay(300);
P1=0x55;
delay(300);
}
for(i=0;i<3;i++)
{
temp=0xfe;
for(j=0;j<8;j++)
{
P1=temp;
temp=_crol_(temp,1);
delay(300);
}
}
temp=0xff;
for(i=0;i<3;i++)
{
P1=0x7e;
delay(300);
P1=0xbd;
delay(300);
P1=0xdb;
delay(300);
P1=0xe7;
delay(300);
}
temp=0xff;
for(i=0;i<3;i++)
{
P1=0xe7;
delay(300);
P1=0xdb;
delay(300);
P1=0xbd;
delay(300);
P1=0x7e;
delay(300);
}
P1=0xff;
for(i=0;i<6;i++)
{
P1=~P1;
delay(300);
}
P1=0xff;
}