蓝桥杯基础练习题代码4(学习于欧浩源老师)

 软件准备:蓝桥杯开发板学习——软件准备及芯片包安装

所用实验板原理图:蓝桥杯国信长天单片机--原理图详解

头文件引用:蓝桥杯单片机比赛工程头文件引用reg52.h和STC15F2K60S2.h的区别

【基础 12】串行接口的基本操作

新建工程,以 I/O 模式编写代码,在 CT107D 单片机综合训练平台上,实现以下功能:

1、初始化串口为模式 1,即 8 位 UART 模式,波特率 9600,允许接收。

2、数据发送采用查询方式,数据接收采用中断方式。

3、系统上电初始化之后,单片机向上位机发送两个字节: 0x5a 和 0xa5(串口助手以十六进制 HEX 发送和显示)。

4、串口每成功接收到一个字节后,在该字节基础上加 1, 然后通过串口发送回上位机。

5、注意 89C52 单片机和 IAP15F2K61S2 单片机串口应用的 差别,使用 9600 波特率时,晶振时钟选择 11.0592MHz。

 

【训练要点】: 串口的初始化与数据收发基础。

#include <STC15F2K60S2.H>

unsigned char urdate;

void InitUart()
{
	TMOD = 0x20;
	TH1 = 0xfd;
	TL0 = 0xfd;
	TR1 = 1;
	
	SCON = 0x50;
	AUXR = 0x00;
	ES = 1;
	EA = 1;
}

void SendBit(unsigned char dat)
{
	SBUF = dat;
	while(TI == 0);
	TI = 0;
}
void ServiceUart() interrupt 4
{
	if(RI == 1)
	{
		RI = 0;
		urdate = SBUF;
		SendBit(urdate + 1);
	}	
}

void main()
{
	InitUart();
	SendBit(0x5a);
	SendBit(0xa5);
	while(1)
	{
	
	}
}

【基础 13】串行接口的进阶应用

新建工程,以 I/O 模式编写代码,在 CT107D 单片机综合训练平台上,实现以下功能:

1、初始化串口为模式 1,即 8 位 UART 模式,波特率 9600,允许接收。

2、数据发送采用查询方式,数据接收采用中断方式。

3、系统上电后,关闭蜂鸣器,关闭继电器,关闭 8 个 LED 灯,通过串口向上位机发送 字符串:“Welcome to XMF system!”,回车换行。

4、上位机通过串口发送单字节命令,控制单片机的 8 个 LED 灯开关,单片机响应正确 的控制命令后,完成相应的灯光操作。

5、上位机通过串口发送单字节命令,读取单片机运行信息,单片机响应正确的读取命 令后,向上位机返回指定的信息。

6、上位机与单片机的通信规约如下表:

【训练要点】: 串口数据收发联合单片机控制的综合应用。

 

#include <STC15F2K60S2.H>

void SelectHC537(unsigned char a)
{
	switch(a)
	{
		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;
		
		case 0:
			P2 = (P2 & 0x1f) | 0x00;
		break;
	}
}

void InitSystem()
{
	SelectHC537(5);
	P0 = 0x00;
	SelectHC537(4);
	P0 = 0xff;
}
/串口
void InitUart()
{
	TMOD = 0x20;
	TH1 = 0xfd;
	TL1 = 0xfd;
	
	TR1 = 1;
	SCON = 0x50;
	
	AUXR = 0x00;
	ES = 1;
	EA = 1;
}

unsigned char command = 0x00;
void ServiceUart() interrupt 4
{
	if(RI == 1)//接收 检测
	{
		command = SBUF;
		RI = 0;
	}
}

void SendUart(unsigned char dat)//发送
{
	SBUF = dat;
	while(TI == 1);
	TI = 0;
		
}

void SendString(unsigned char *str)
{
	while(*str != '\0')
	{
		SendUart(*str++);
	}
}

/
void Working()
{
	if(command != 0x00)
	{
		switch(command & 0xf0)
		{
			case 0xa0:
				P0 = (P0 | 0x0f) & (~command | 0xf0);
				command = 0x00;
				break;
			case 0xb0:
				P0 = (P0 | 0xf0) & ((~command << 4)| 0x0f);
				command = 0x00;
				break;
			case 0xc0:
				SendString("The system is Running!\r\n");
			command = 0x00;
				break;
		}
	}
}

void main()
{
	InitSystem();
	InitUart();
	SendString("Welcome to system!\r\n");
	while(1)
	{
		Working();
	}

}

【基础 14】存储器映射扩展技术应用

新建工程,以 MM 模式编写代码,在 CT107D 单片机综合训练平台上,实现以下功能:

1、系统上电后,关闭蜂鸣器,关闭继电器,关闭 8 个 LED 灯。

2、循环实现以下功能: 首先,点亮指示灯低 4 位,关闭高 4 位,延时片刻; 接着,点亮指示灯的高 4 位,关闭低 4 位,延时片刻; 然后,关闭所有指示灯。 接着,依次逐个点亮数码管的所有段码,每次只点亮一个数码管。

3、外部扩展资源的地址映射关系:

 4、关于 CT107D 存储器映射扩展 MM 编程模式的设计提示: CT107D 平台的 J13 要将 1-2 脚短接,选择 MM 模式。 程序中引入头文件“absacc.h”,通过 XBYTE 关键字来直接操作扩展资源。 存储器映射扩展方式要占用单片机的 P3.6 引脚。

【训练要点】: 通过 MM 模式编程,访问 CT107D 上面的扩展外部设备。

#include <STC15F2K60S2.H>
#include "absacc.h"

void Delay(unsigned int t)
{
	while(t--);
	while(t--);
}

void LEDRuning()
{
	XBYTE[0x8000] = 0xf0;
	Delay(60000);
	Delay(60000);
	XBYTE[0x8000] = 0x0f; 
	Delay(60000);
	Delay(60000);
	XBYTE[0x8000] = 0xff;
	Delay(60000);
	Delay(60000);
}

void SMGRunning()
{
	unsigned char i;
	for(i = 0; i < 8; i++)
	{
		XBYTE[0xc000] = 0x01 << i;
		XBYTE[0xe000] = 0x00; 
		Delay(60000);
		Delay(60000);
	}
	XBYTE[0xe000] = 0xff;
	Delay(60000);
	Delay(60000);
}

void main()
{
	while(1)
	{
		LEDRuning();
		SMGRunning();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值