十三届蓝桥杯省赛笔记 (代码自取)
关于题目要求功能全部实现但是只有三等奖这件事属实是让人挺难过的,也许是学习的路上必要的坎坷了
题目详情
题目大致分析(密码门锁)
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;
}