十三届蓝桥杯省赛笔记 (代码自取)

十三届蓝桥杯省赛笔记 (代码自取)

关于题目要求功能全部实现但是只有三等奖这件事属实是让人挺难过的,也许是学习的路上必要的坎坷了

题目详情
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
题目大致分析(密码门锁)
1、要求有识别三位密码的功能(单位密码值0-9)
2、修改密码的功能(输入之前正确密码的前提修改成新的密码)
3、识别密码后PA1从1KHz方波转为2KHz、10%duty方波
4、指示灯(识别正确的信号灯和超过三次错误的警告灯)
5、默认值:密码123 9600波特率UART PA1->1KHz方波

显示部分代码

void Task_Display(void)
{
	if(LCD_Show == 0) //上电默认状态和开门后回位的状态
	{
		LCD_SetBackColor(Black);
		LCD_SetTextColor(White);
		LCD_DisplayStringLine(Line1,(unsigned char *)"       PSD          ");	
		sprintf((char*)temp,"    B1:@              ");
		LCD_DisplayStringLine(Line3,temp);
		sprintf((char*)temp,"    B2:@              ");
		LCD_DisplayStringLine(Line4,temp);
		sprintf((char*)temp,"    B3:@              ");
		LCD_DisplayStringLine(Line5,temp);
		
	}
	if(LCD_Show == PSD) //输入密码的状态
	{
		LCD_SetBackColor(Black);
		LCD_SetTextColor(White);
		LCD_DisplayStringLine(Line1,(unsigned char *)"       PSD          ");	
		switch(Key_num)
		{
			case 1:
				sprintf((char*)temp,"    B1:%d             ",Display_Password[0]);
				LCD_DisplayStringLine(Line3,temp);
				break;
			case 2:			
				sprintf((char*)temp,"    B2:%d             ",Display_Password[1]);
				LCD_DisplayStringLine(Line4,temp);
				break;
			case 3:			
				sprintf((char*)temp,"    B3:%d             ",Display_Password[2]);
				LCD_DisplayStringLine(Line5,temp);
				break;
		}
		
	}
	else if(LCD_Show == STA) //确认密码正确后开门的状态
	{
		LCD_SetBackColor(Black);
		LCD_SetTextColor(White);
		LCD_DisplayStringLine(Line1,(unsigned char *)"       STA         ");	
		sprintf((char *)temp, "    F:2000Hz          ");
		LCD_DisplayStringLine(Line3,temp);
		sprintf((char *)temp, "    D:10%%             ");	
		LCD_DisplayStringLine(Line4,temp);
		LCD_DisplayStringLine(Line5,(unsigned char *)"                    ");				
	}
}
void Task_Key(void)
{
	if(Trg == 0x01) //按键1密码模式使单位密码+1   当>9的时候回到0 2 3同理
	{	
		if(B1_first == 0 && LCD_Show != STA)
		{
			B1_first = 1;
			Display_Password[0] = 0;
		}
		else if(LCD_Show == PSD)
		{
			Display_Password[0] = Display_Password[0] + 1;
		}
		LCD_Show = PSD;

		if(Display_Password[0] >= 10)
		{
			Display_Password[0] = 0;
		}
		Key_num = 1;
	}
	else if(Trg == 0x02 && LCD_Show != STA)
	{		
		if(B2_first == 0)
		{
			B2_first = 1;
			Display_Password[1] = 0;
		}
		else if(LCD_Show == PSD)
		{
			Display_Password[1] = Display_Password[1] + 1;
		}
		LCD_Show = PSD;

		if(Display_Password[1] >= 10)
		{
			Display_Password[1] = 0;
		}
		Key_num = 2;
	}
	else if(Trg == 0x04 && LCD_Show != STA) //按键4确认输入密码 
	{	
		
		if(B3_first == 0)
		{
			B3_first = 1;
			Display_Password[2] = 0;
		}
		else if(LCD_Show == PSD)
		{
			Display_Password[2] = Display_Password[2] + 1;
		}
		LCD_Show = PSD;

		if(Display_Password[2] >= 10)
		{
			Display_Password[2] = 0;
		}
		Key_num = 3;
	}
	else if(Trg == 0x08 && LCD_Show != STA)
	{
		if(Data_Compare(1) == 1)
		{
			LCD_Show = STA;
			PWM_Flag = 1;
			LEDx_ON(1);
			LED_flag = 1;
			Display_Password[0] = 0;
			Display_Password[1] = 0;
			Display_Password[2] = 0;
		}
		else if(Data_Compare(1) == 0)
		{
			Mistake++;
			if(Mistake >= 3)
			{
				LED_flag = 2;
			}
		}
	}
}

uint8_t Data_Compare(uint8_t x) //字符串对比 对比密码是否正确
{
	if(x == 1)
	{
		if(strncmp((char*)Password,(char*)Display_Password,3) == 0)
		{
			return 1;
		}
	}
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值