51单片机多种样式流水灯的实现,包括不同的实现方法。C语言实现!

一、功能

此次实验实现了,LED灯5种不同的显示样式。不同的显示样式模拟了,不同的霓虹灯显示效果。
霓虹灯控制
51单片机多种样式流水灯的实现,包括不同的实现方法。C语言实现!_第1张图片

二、硬件电路

1.所用到的硬件电路为:LED模块、独立按键模块、主控芯片和(程序烧写、供电、串口通信)模块:
(1)LDE模块:51单片机多种样式流水灯的实现,包括不同的实现方法。C语言实现!_第2张图片
(2)独立按键模块:
51单片机多种样式流水灯的实现,包括不同的实现方法。C语言实现!_第3张图片
(3)主控芯片
51单片机多种样式流水灯的实现,包括不同的实现方法。C语言实现!_第4张图片
(4)供电、程序烧写、串口通信三合一模块:
51单片机多种样式流水灯的实现,包括不同的实现方法。C语言实现!_第5张图片

三、软件设计流程图

51单片机多种样式流水灯的实现,包括不同的实现方法。C语言实现!_第6张图片

四、源代码

//导入51头文件
#include 
//循环移位函数库
#include 

#define uint unsigned int
#define uchar unsigned char

sbit  sk_2 = P3^0;
sbit  sk_3 = P3^1;
sbit  sk_4 = P3^2;
sbit  sk_5 = P3^3;
//毫秒延时
void delay(uint x ){
	uint a,b;
	
	for(a=x;a>0;a--)
		for(b=114;b>0;b--);	
}
void ls1(void){
	while(1){
	uint d=0xAA;
		P1 = d;
		delay(300);
		P1 = 0x55;
		delay(300);
	 if(sk_2==1)
		 break;
	}
}
void ls2(void){
		uchar e=0xfe;
		while(1){
		P1=e;
		e = _crol_(e,1);
		delay(350);
		if(e==0x7f){
		while(1){
		P1=e;
		e=_cror_(e,1);
		delay(350);
		if(e==0xfe)
			break;
		}
		}
		if(sk_3==1){
			break;
		}	
	}
}

void ls3(void){
	uint i=0;  
	uint f[20] ={0x6f,0xaf,0xcf,0xcd,0xe5,0xf1,0xd1,0xd8,0x5c,0x1e,0x1a,0x0b,0x83,0x82,0xc0,0x40,0x00,0xff,0x00,0xff}; 
	while(1){
	for(i=0;i<=19;i++){
		P1=f[i];
		delay(1000);
	
		if(sk_4==1)
		break;
	}
		if(sk_4==1)
		break;
	}
}

void ls4(void){
		uint i=0;
	  	uint f[10] ={0xff,0xe7,0xdb,0xbd,0x7e,0x7e,0x3c,0x18,0x00}; 
		while(1){
		for(i=0;i<=9;i++){
			P1=f[i];
			 delay(300);
			 if(sk_5==1)
			 break;
		}
		  if(sk_5==1)
			 break;
		}
}

void main(){
	uchar c=0xFE; 

	while(1){
	   //样式1-流水
		P1 = c;
		c = _crol_(c,1);
		delay(200);
	   //样式2-交替闪烁
	   if(sk_2==0){
	   		ls1();
	   }
	   //样式3-led回旋
	   if(sk_3==0){
	   		ls2();
	   }
	   //样式4-贪吃蛇
	   if(sk_4==0){
	   		ls3();
	   }
	   //样式5-由内向外闪烁
	   if(sk_5==0){
	   		ls4();
	   }
	}
}

五、说明

由于单品机型号各不相同,所以晶振也会不同,我的单片机型号是:TC89C52(适用于其他51单片机)-晶振是11.0592(与我的不同的话改一下延时函数就可以了)

你可能感兴趣的:(单片机编程;C语言,单片机)