蓝桥杯-单片机设计与开发-基础练习代码

1.LED跑马灯

系统上电后,关闭 8 个 LED 灯。
循环实现 LED 跑马灯控制,控制要求为:
首先,8 个 LED 灯同时闪烁 3 次;
然后,从 L1 灯至 L8 灯依次点亮;
接着,从 L1 灯至 L8 灯依次熄灭。

#include "stc15f2k60s2.h"
#define uint unsigned int
#define uchar unsigned char


void datatake();


void delay_ms(uint xx)
{
   
	uint i,j;
	for(i=0;i<xx;i++)
	for(j=0;j<900;j++);
}
void hc(uchar aa)
{
   
	switch(aa)
	{
   
		case 0:P2=P2&0x1f;break;
		case 4:P2=P2&0x1f|0x80;break;
		case 5:P2=P2&0x1f|0xa0;break;
		case 6:P2=P2&0x1f|0xc0;break;
		case 7:P2=P2&0x1f|0xe0;break;
	}
}
//
void init()
{
   
	hc(5);P0=0x00;
	hc(4);P0=0xff;
	hc(0);
}
void main()
{
   
	init();
	while(1)
	{
   
		datatake();
	}
}
//


void datatake()
{
   
	uchar i;
	hc(4);
	for(i=0;i<3;i++)
	{
   
		P0=0x00;
		delay_ms(500);
		P0=0xff;
		delay_ms(500);
	}
	for(i=0;i<8;i++)
	{
   
		P0=0xff<<(i+1);
		delay_ms(500);
	}
	for(i=0;i<8;i++)
	{
   
		P0=(P0|(0x01<<i));
		delay_ms(500);
	}	
	hc(0);
}
	

2.蜂鸣器与继电器

系统上电后,关闭蜂鸣器,关闭继电器,关闭 8 个 LED 灯。
循环实现以下功能:
首先,8 个 LED 灯同时闪烁 3 次;
接着,从 L1 灯至 L8 灯依次点亮;
然后,继电器吸合,延时片刻,继电器断开;
接着,从 L1 灯至 L8 灯依次熄灭;
蜂鸣器鸣叫一短时间;

#include "stc15f2k60s2.h"
#define uint unsigned int
#define uchar unsigned char


void datatake();

/
void delay_ms(uint xx)
{
   
	uint i,j;
	for(i=0;i<xx;i++)
	for(j=0;j<900;j++);
}
void hc(uchar aa)
{
   
	switch(aa)
	{
   
		case 0:P2=P2&0x1f;break;
		case 4:P2=P2&0x1f|0x80;break;
		case 5:P2=P2&0x1f|0xa0;break;
		case 6:P2=P2&0x1f|0xc0;break;
		case 7:P2=P2&0x1f|0xe0;break;
	}
}	
//
void init()
{
   
	hc(5);P0=0x00;
	hc(4);P0=0xff;
	hc(0);
}
void main()
{
   
	init();
	while(1)
	{
   
		datatake();
	}
}
//

void datatake()
{
   
	uchar i;
	hc(4);
	for(i=0;i<3;i++)
	{
   
		P0=0x00;
		delay_ms(500);
		P0=0xff;
		delay_ms(500);
	}
	for(i=0;i<8;i++)
	{
   
		P0=0xff<<(i+1);
		delay_ms(500);
	}
	hc(5);
	P0=0x10;
	delay_ms(1000);
	P0=0x00;
	hc(4);
	for(i=0;i<8;i++)
	{
   
		P0=(P0|(0x01<<i));
		delay_ms(500);
	}
	hc(5);
	P0=0x40;
	delay_ms(1000);
	P0=0x00;
}

3.数码管静态显示

系统上电后,关闭蜂鸣器,关闭继电器,关闭 8 个 LED 灯。
循环实现以下功能:
8 个数码管从左至右,逐个数码管依次显示“0”到“9”的 10 个数字。
即左边第 1 个数码管依次显示“0”到“9”,其他数码管熄灭;接着左边第 2 个数码管依次显示“0”到“9”,其他数码管熄灭…依次类推,直到 8 个数码管显示完成。
8 个数码管同时显示“0”到“9”的 10 个数字和“A”到“F”的 6 个字母。

#include "stc15f2k60s2.h"
#define uchar unsigned char
#define uint unsigned int

uchar code leddata[]={
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xc0,0x86,0x8e};


void display();


/
void delay_ms(uint xx)
{
   
	uint i,j;
	for(i=0;i<xx;i++)
	for(j=0;j<900;j++);
}
void hc(uchar aa)
{
   
	switch(aa)
	{
   
		case 0:P2=P2&0x1f;break;
		case 4:P2=P2&0x1f|0x80;break;
		case 5:P2=P2&0x1f|0xa0;break;
		case 6:P2=P2&0x1f|0xc0;break;
		case 7:P2=P2&0x1f|0xe0;break;
	}
}
/
void init()
{
   
	hc(5);P0=0x00;
	hc(4);P0=0xff;
	hc(0);
}
void main()
{
   
	init();
	while(1)
	{
   
		display();
	}
}
/

void display()
{
   
	uchar i,j;
	for(i=0;i<8;i++)
	{
   
		hc(6);P0=0x01<<i;
		hc(7);
		for(j=0;j<10;j++)
		{
   
			P0=leddata[j];
			delay_ms(50);
			P0=0xff;
		}
	}
	hc(6);P0=0xff;
	hc(7);
	for(i=0;i<16;i++)
	{
   
		P0=leddata[i];
		delay_ms(500);
		P0=0xff;
	}
}

4.数码管动态显示

系统上电后,关闭蜂鸣器,关闭继电器,关闭 8 个 LED 灯。
在 8 位数码管中,左边 4 位数码管显示年份“2018”,接着 2 位是分隔符“–”,靠右的2 位数码管显示月份。从 1 月份开始,每隔一段时间加 1 个月,到 12 月之后又从 1 月开始递增,如此循环往复

//使用了定时器功能
#include "stc15f2k60s2.h"
#define uchar unsigned char
#define uint unsigned int

uchar code leddata[]={
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};

uchar month=1;  //月份
uint count=0;   //定时器计数

void display();

//
void Timer0Init(void)		//50??@12.000MHz
{
   
	AUXR &= 0x7F;		//?????12T??
	TMOD &= 0xF0;		//???????
	TL0 = 0xB0;		//??????
	TH0 = 0x3C;		//??????
	TF0 = 0;		//
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值