单片机 流水灯设计、 蜂鸣器发声、继电器控制简单延时程序、子程序调用、 带参数子程序设计、流水灯同时蜂鸣器响应用。

1)第一个发光管以间隔200ms闪烁

#include   //52单片机头文件
#define uchar unsigned char  //宏定义uchar
#define uint unsigned int  //宏定义uint
sbit L=P1^0;   //单片机管脚位声明

void delay(uint z)   //延时函数,z的取值为这个函数的延时ms数
// 如delay(200); 大约延时200ms.
{
	uint x,y;
	for(x=z;x>0;x--)
	for(y=110;y>0;--);
}
void main()  //主函数
{
	while(1)  //大循环
	{
		L=0;  //点亮小灯
		delay(200);   //延时200亳秒
		L=1;  //熄灭小灯
		delay(200);   //延时200亳秒
	}
}

2) 8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。

#include    //52单片机头文件
#include   //里面有循环函数_cror_
#define uint unsigned int   //宏定义uint
#define uchar unsigned char   //宏定义 uchar
sbit beep=P2^3;   // 特殊功能位声明(用于控制蜂鸣器)

void delay(uint z)   //延时函数,z的取值为这个函数的延时ms数
// 如delay(200); 大约延时200ms.
{
	uint x,y;
	for(x=z;x>0;x--)
	for(y=110;y>0;--);
}

void main()   //主函数
{
	uchar a;
	a=0xfe;  //赋初值11111110,第一颗灯亮
	while(1)   //大循环
	{
		P1=a;  //点亮小灯
		beep=0;  //蜂鸣器开
		delay (500);   //延时500毫秒
		P1=0xff;   //熄灭小灯
		beep=1;  //蜂鸣器关
		delayms(500);   //延时500毫秒
		a=_crol_(a,1);   //将a循环左移1位后,再赋给a
	}
}

3) 8个发光管来回流动,第一个管亮100ms,流动时让蜂鸣器发出“滴滴”声。

#include    //52单片机头文件
#include   //里面有循环函数_cror_
#define uint unsigned int   //宏定义uint
#define uchar unsigned char   //宏定义 uchar
sbit beep=P2^3;   // 特殊功能位声明(用于控制蜂鸣器)

void delay(uint z)   //延时函数,z的取值为这个函数的延时ms数
// 如delay(200); 大约延时200ms.
{
	uint x,y;
	for(x=z;x>0;x--)
	for(y=110;y>0;--);
}

void main()   //主函数
{
	uchar a;
	a=0xfe;  //赋初值11111110,第一颗灯亮
	while(1)   //大循环
	{
		P1=a;  //点亮小灯
		if(P1==0xfe)
		{
			beep=0;  //蜂鸣器开
			delay (100);   //延时100毫秒
			P1=0xff;   //熄灭小灯
			beep=1;  //蜂鸣器关
		}
		else
		{
			delayms(500);   //延时500毫秒
			P1=0xff;   //熄灭小灯
		}
		a=_crol_(a,1);   //将a循环左移1位后,再赋给a
	}
}

(4)用8个发光管演示出8位二进制数累加过程。

#include    //52单片机头文件
#include   //里面有循环函数_cror_
#define uint unsigned int   //宏定义uint
#define uchar unsigned char   //宏定义 uchar
	
void delay(uint z)   //延时函数,z的取值为这个函数的延时ms数
// 如delay(200); 大约延时200ms.
{
	uint x,y;
	for(x=z;x>0;x--)
	for(y=110;y>0;--);
}

void main()   //主函数
{
	uchar a;
	while(1)   //大循环
	{
		a++;
		P1=~a;
		delay(500);   //延时500毫秒
	}
}

5) 8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。

#include    //52单片机头文件
#include   //里面有循环函数_cror_
#define uint unsigned int   //宏定义uint
#define uchar unsigned char   //宏定义 uchar

void delay(uint z)   //延时函数,z的取值为这个函数的延时ms数
// 如delay(200); 大约延时200ms.
{
	uint x,y;
	for(x=z;x>0;x--)
	for(y=110;y>0;--);
}

void main()   //主函数
{
	uchar i,j;
	while(1)   //大循环
	{
		for(j=0;j<2;j++)  //循环两次
		{
			a=0xfe;  //赋初值11111110,第一颗灯亮
			for(i=0;i<8;i++)   //左移
			{
				P1=a;  //点亮小灯
				delay(200);   //延时200亳秒
				a=_crol_ (a,1)  //将 a变量循环左移1位
			}
			a=0x7f;  赋初值01111111,最后一颗灯亮
			for(i=0;i<8;i++) //右移
			{
				P1=a;  //点亮小灯
				delay(20);   //延时200亳秒
				a=_cror_ (a,1);   //将a变量循环右移1位
			}
		}

		P1=0xff;   //全部熄灭
		
		for(j=0;j<10;j++)
		{
			delay(300);   //延时300亳秒
			P1=~P1;  //全部取反10次,即闪烁5次
		}
	}
}

6)间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。

#include    //52单片机头文件
#include   //里面有循环函数_cror_
#define uint unsigned int   //宏定义uint
#define uchar unsigned char   //宏定义 uchar

void delay(uint z)   //延时函数,z的取值为这个函数的延时ms数
// 如delay(200); 大约延时200ms.
{
	uint x,y;
	for(x=z;x>0;x--)
	for(y=110;y>0;--);
}

void main()   //主函数
{
	uchar a,i,j;
	while(1)   //大循环
	{
		a=0xfe;  //赋初值11111110,第一颗灯亮
		for(j=0;j<8;j++)  //循环8次
		{
			for(i=0;i<8-j;i++)   //左移
			{
				P1=a;  //点亮小灯
				delay(200);   //延时200亳秒
				a=_crol_ (a,1)  //将 a变量循环左移1位
			}
			a=_cror_ (a,j);   //将a变量循环右移j位
			P1=0xff;   //全部熄灭
			a=a<<1;  //左移一位,让多一个灯点亮
		}
	}
}

7)间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次; 8个全部闪烁3次;关闭发光管,程序停止。

#include    //52单片机头文件
#include   //里面有循环函数_cror_
#define uint unsigned int   //宏定义uint
#define uchar unsigned char   //宏定义 uchar

void delay(uint z)   //延时函数,z的取值为这个函数的延时ms数
// 如delay(200); 大约延时200ms.
{
	uint x,y;
	for(x=z;x>0;x--)
	for(y=110;y>0;--);
}

void main()   //主函数
{
	uchar a,i,j;

	//间隔300ms先奇数亮再偶数亮,循环三次;
	for(j=:;<3;j++)  //寄偶交替
	{
		P1=0x55;  //点亮奇数小灯
		delay(300);  //延时300亳秒
		P1=0xaa;  //点亮偶数小灯
		delay(30);   //延时300亳秒
	}

	//一个灯上下循环三次
	for(j=0;j<3;j++)   //流水灯
	{
		a=0xfe;  赋初值11111110,第一颗灯亮
		for(i=0;i<8;i++)   //左移
		{
			P1=a;  //点亮小灯
			delay(300);   //延时300亳秒
			a=_crol_ (a,1)  //将 a变量循环左移1位
		}
	}
	P1=0xff;   //全部熄灭

	//两个分别从两边往中间流动三次;
	for(j=0;j<3;j++)  //从两边往中间流,循环3次
	{
		P1=0x7e;  //赋初值0111 1110,第一颗灯、最后一颗灯亮
		delay(300);  //延时300亳秒
		P1=0xbd;  赋初值1011 1101,第二颗灯、第七颗灯亮
		delay(300); //延时300亳秒
		P1=0xdb;  赋初值1101 1011,第三颗灯、第六颗灯亮
		delay(300);  //延时300亳秒
		P1=0xe7;  赋初值1110 0111,第四颗灯、第五颗灯亮
		delay(300);  //延时300亳秒
	}
	P1=0xff;   //全部熄灭

	//再从中间往两边流动三次;
	for(j=0;j<3;j++)  //从中间往两边流,循环3次
	{
		P1=0xe7;  //赋初值1110 0111,第四颗灯、第五颗灯亮
		delay(300);  //延时300亳秒
		P1=0xdb;  //赋初值1101 1011,第三颗灯、第六颗灯亮
		delay(300); //延时300亳秒
		P1=0xbd;  //赋初值1011 1101,第二颗灯、第七颗灯亮
		delay(300);  //延时300亳秒
		P1=0x7e;  //赋初值0111 1110,第一颗灯、第八颗灯亮
		delay(300);  //延时300亳秒
	}
	P1=0xff;   //全部熄灭

	//8个全部闪烁3次;
	for(j=0;j<6;j++)  //全部闪烁。(亮3次,灭3次,即闪烁3次)
	{
		P1=~P1;  //全部点亮
		delay(300);   //延时300亳秒
	}

	//关闭发光管,程序停止。
	P1=0xff;   //全部熄灭
	while(1); 
}

链接: 原文.

你可能感兴趣的:(单片机)