初级会员

- 积分
- 81
- 金钱
- 81
- 注册时间
- 2016-8-11
- 在线时间
- 17 小时
|
1金钱
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "rtc.h"
#include "stdlib.h"
u8 flag;
u16 password[128];
int main(void)
{
int a[4]={'1','2','3','4'},b[4]={'1','1','1','1'};
int i =0;
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
printf("请输入密码");
while(1)
{
if(flag==1)
{
flag=0;
printf("\n输入的密码为:");
for(i=0;i<4;i++)
{
Usart_SendByte(USART1,password[i]);
}
if(password[0]==a[0]&&password[1]==a[1]&&password[2]==a[2]&&password[3]==a[3])
{
printf("密码正确\n\n是否需要更改密码\n输入1111“是”,输入任意其他四个数字“否”\n");
for(i=0;i<4;i++)
{
Usart_SendByte(USART1,password[i]);
}
if(password[0]==b[0]&&password[1]==b[1]&&password[2]==b[2]&&password[3]==b[3])
{
printf("请输入4位数字当做新密码\n");
}
}
else
{
printf("密码不正确\n\n");
}
}
}
}
void USART1_IRQHandler(void)
{
static u8 i=0,Res;
#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res=USART_ReceiveData(USART1);//(USART1->DR);读取接收到的数据
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
password[i] = Res;
i++;
if(i>=4)
{
i=0;
flag=1;
}
}
}
我看着视频 学完串口中断 想做密码锁。但是程序到了
if(password[0]==b[0]&&password[1]==b[1]&&password[2]==b[2]&&password[3]==b[3])
{
printf("请输入4位数字当做新密码\n");
}
它password[]数组里面的数据还是之前的
它又回到了 if(flag==1)
{
flag=0;
printf("\n输入的密码为:");
for(i=0;i<4;i++)
·······
这个if大判断里面了
我想知道怎么覆盖掉 或者把它复位掉。
|
最佳答案
查看完整内容[请看2#楼]
1. 先回答第二个问题吧,之所以把重复调用的语句封装成函数,主要是为了简洁,你这里
for(i=0;i
|