单片机蓝桥杯大赛训练题

本文介绍了使用C语言在STC12C5A60S2微控制器上实现LED的亮灭、闪烁、位移、循环变换等操作的示例代码,包括基本亮灭、不同模式的循环控制和复杂变换。
摘要由CSDN通过智能技术生成

 第一讲,关于LED的操作

//点亮第一个LED,进行亮灭闪烁操作
#include <STC12C5A60S2.H>
void Delayms(int ms);
void main(void)
{
	P2=0xA0;P0=0x00;P2=0x80;P0=0xFF;//初始化
	
	
	
	while(1)
	{
	P00=0;
	Delayms(200);
	P00=1;
	Delayms(200);		
	
	}
}	
void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}
//LED 进行位移操作,每次亮150ms,灭150ms
#include <STC12C5A60S2.H>
unsigned char LED;
Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}
void main(void)
{
	P2=0xA0;P0=0x00;
	P2=0x80;P0=0xFF;//初始化
	
	
	
	while(1)
		{
			
			for(LED=8;LED>0;LED--)
			{
			P0=~0;
			Delayms(150);
			P0=~(0x01<<LED);
			Delayms(300);
				
			}
			
			
	
	}
}
LED先左移,再右移,然后全部闪烁四遍
#include <STC12C5A60S2.H>
unsigned char LED;
Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}
void main(void)
{
	P2=0xA0;P0=0x00;
	P2=0x80;P0=0xFF;//初始化
	
	
	
	while(1)
		{
			
			for(LED=0;LED<8;LED++)
			{
			P0=~(0x01<<LED);
			Delayms(200);
			}
			for(LED=8;LED>0;LED--)
			{
			P0=~(0x01<<LED);
			Delayms(300);
			}
			for(LED=5;LED>0;LED--)
			{
			P0=0x00;
			Delayms(1000);
			P0=0xff;
			Delayms(1000);		
			}
			
			
	
	}
}
//LED右循环,每次点亮灯数加1
#include <STC12C5A60S2.H>
#include <reg52.h>
#include <intrins.h>
unsigned int LED,L;
unsigned int temp;
int a[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00};

void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

void main(void)
{
	P2=0xA0;P0=0x00;
	P2=0x80;P0=0xFF;
	
	while(1){
		for(LED=0;LED<8;LED++)
		{
			temp=a[LED];
			for(L=8;L>0;L--)
		{
			P0=temp;
			temp=_crol_(temp,1);
			Delayms(300);
		}
		}
		
	}
}
//LED 奇数偶数灯亮灭变换循环3次,左移右移循环3次,从左右两边向中间靠拢循环三遍,从中间向两边靠拢循环三遍,进行全灯亮灭操作三遍
#include <reg52.h>
#include <intrins.h>

int temp;
int a[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
int b[]={0x7E,0xBD,0xDB,0xE7};

void Delayms(int ms)
{
	int i,j;
	for(i=0;i<ms;i++)
		for(j=845;j>0;j--);
}

void main(void)
{
	P2=0xA0;P0=0x00;
  P2=0x80;P0=0xFF;
	{
		int m,n,k,l,x,y,z,c,v;
		for(m=0;m<3;m++)
		{
			
			P0=0xAA;
			Delayms(300);
			P0=0x55;
			Delayms(300);
		}
		for(l=3;l>0;l--){
		for(n=0;n<8;n++)
		{	
			temp=a[n];
			P0=temp;
		//	temp=_crol_(temp,1);
			Delayms(300);
		}
		for(k=7;k>=0;k--)
		{	
			temp=a[k];
			P0=temp;
		//	temp=_cror_(temp,1);
			Delayms(300);
		}
		}
		for(x=3;x>0;x--){
		for(y=0;y<4;y++)
		{
			temp=b[y];
			P0=temp;
			Delayms(300);
		}
		}
		for(z=3;z>0;z--)
			{
			for(c=3;c>=0;c--)
			{
			temp=b[c];
			P0=temp;
			Delayms(300);	
			}	
			}
			for(v=3;v>0;v--)
			{
				P0=0x00;
				Delayms(300);
				P0=0xFF;
				Delayms(300);
			}
			
	}
	while(1);
	
		
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TvT<

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值