第十五届蓝桥杯单片机模拟题一

发布时间:2024年01月23日
#include "reg52.h"
#include "intrins.h"
unsigned char keynum = 0;
unsigned char num_key = 0;
sfr P4 = 0xc0;
sbit R1 = P3^1;
sbit R2 = P3^2;
sbit R3 = P3^3;
sbit C1 = P4^4;
sbit C2 = P4^2;
sbit C3 = P3^5;
sbit C4 = P3^4;
void Delay20ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 1;
	j = 234;
	k = 113;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
unsigned char return_Keynum()
{
	num_key = keynum;
	keynum = 0;
	return num_key;
}
void Scan_Keynum()
{
	R1 = 0;
	R2 = R3 = C1 = C2 = C3 = C4 = 1;
	if(C1 == 0)
	{
		Delay20ms();
		if(C1 == 0)
		{
			keynum = 6;
			while(C1 == 0)
			{
				
			}
		}
	}
	else if(C2 == 0)
	{
		Delay20ms();
		if(C2 == 0)
		{
			keynum = 10;
			while(C2 == 0)
			{
				
			}
		}
	}
	else if(C3 == 0)
	{
		Delay20ms();
		if(C3 == 0)
		{
			keynum = 14;
			while(C3 == 0)
			{
				
			}
		}
	}
	else if(C4 == 0)
	{
		Delay20ms();
		if(C4 == 0)
		{
			keynum = 18;
			while(C4 == 0)
			{
				
			}
		}
	}
	R2 = 0;
	R1 = R3 = C1 = C2 = C3 = C4 = 1;
	if(C1 == 0)
	{
		Delay20ms();
		if(C1 == 0)
		{
			keynum = 5;
			while(C1 == 0)
			{
				
			}
		}
	}
	else if(C2 == 0)
	{
		Delay20ms();
		if(C2 == 0)
		{
			keynum = 9;
			while(C2 == 0)
			{
				
			}
		}
	}
	else if(C3 == 0)
	{
		Delay20ms();
		if(C3 == 0)
		{
			keynum = 13;
			while(C3 == 0)
			{
				
			}
		}
	}
	else if(C4 == 0)
	{
		Delay20ms();
		if(C4 == 0)
		{
			keynum = 17;
			while(C4 == 0)
			{
				
			}
		}
	}
	R3 = 0;
	R2 = R1 = C1 = C2 = C3 = C4 = 1;
	if(C1 == 0)
	{
		Delay20ms();
		if(C1 == 0)
		{
			keynum = 4;
			while(C1 == 0)
			{
				
			}
		}
	}
	else if(C2 == 0)
	{
		Delay20ms();
		if(C2 == 0)
		{
			keynum = 8;
			while(C2 == 0)
			{
				
			}
		}
	}
	else if(C3 == 0)
	{
		Delay20ms();
		if(C3 == 0)
		{
			keynum = 12;
			while(C3 == 0)
			{
				
			}
		}
	}
	else if(C4 == 0)
	{
		Delay20ms();
		if(C4 == 0)
		{
			keynum = 16;
			while(C4 == 0)
			{
				
			}
		}
	}
}

三、功能描述?


3.1 基本功能描述

1)通过读取DS1302 RTC芯片,获取时间数据;

2)通过EEPROM实现数据记录功能;

3)通过LED指示灯完成试题要求的状态指示功能;

4)通过数码管、按键完成试题要求的数据显示和界面切换功能。

3.2?显示功能

1)时间界面

时间界面如图2所示,显示内容包括时、分、秒数据和间隔符“-”?时、分、秒数据固定占 2 位显示宽度,不足 2 位补 0。

图2 时间界面

2)输入界面

输入界面如图3所示,由标识符(C)和一个4位数据组成,4位数据通过4位数码管显示,每输入一位数据,数码管显示向左移动一位,直到完成4位数据的输入。

图3 输入界面

每次重新进入输入界面时,默认显示4位数据的4位数码管处于熄灭状态。?

3)记录界面

记录界面如图4所示,由标识符(E)和输入4位数据的起始时和分数据以及时、分数据的间隔符(-)。

图4 记录界面

4)显示要求

按照题目要求的界面格式和切换方式进行设计。

数码管显示无重影、闪烁、过暗、亮度不均匀等严重影响显示效果的缺陷。

3.3?按键功能

1)功能说明

① S4:定义为“切换”,按下S4按键,切换“时间界面”、“输入界面”和“记录界面”。

图5 界面切换顺序

② S5:定义为“清除”,在输入界面下,按下S5,清除当前输入的数据,显示输入数据的4位数码管全部熄灭。

③ S6、S10、S14、S18、S9、S13、S17、S8、S12、S16分别对应数值“0-9”,在“输入界面”下,按下对应按键,实现一位对应数据的输入,显示格式及要求如图3所。若当前4位数据输入完成,按键继续输入不影响当前已输入完成的4位数据。

2)按键要求

按键应做好消抖处理,避免出现一次按键动作导致功能多次触发。

按键动作不影响数码管显示等其他功能。

按键?S5、S6、S10、S14、S18、S9、S13、S17、S8、S12、S16仅在“输入界面”有效。

3.4?记录功能

每次进入记录界面时,将4位数据和输入数据的起始时间保存到E2PROM,存储位置要求如下:

输入数据起始时间(时):E2PROM内部地址0;

输入数据起始时间(分):E2PROM内部地址1;

输入数据(高字节):E2PROM内部地址2;

输入数据(低字节):E2PROM内部地址3;

注意

E2PROM写入操作发生在切换到记录界面时,其它时间不写入。

输入数据以HEX编码写入E2PROM,例如数据数据为1234,E2PROM内部地址2中应保存04H, 内部地址3中保存D2H。

3.5?LED指示灯功能

1、界面指示灯

1)时间界面下,指示灯 L1 点亮,否则指示灯 L1 熄灭。

2)输入界面下,指示灯 L2 点亮,否则指示灯 L2 熄灭。

3)记录界面下,指示灯 L3 点亮,否则指示灯 L3 熄灭。

2、记录指示灯

若本次记录的4位数据较上一次记录的4位数据大,则指示灯L4点亮,否则指示灯熄灭。

3.6 初始状态


请严格按照以下要求设计作品的上电初始状态。

1)处于时间界面

2)指示灯L1点亮,其余指示灯熄灭。

文章来源:https://blog.csdn.net/2301_80600743/article/details/135716602
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。