logo资料库

MSP430F6638编程实现5按键密码锁.docx

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
/* 目的:使用试验箱的 5 个键盘和 LED,设计一个 5 按键的密码锁。 输入密码正确 LED1 灯连续亮,产生一个开门信号 P1.1=1;输入密码不正确, 5 个 LED 灯同时闪烁,同时蜂鸣器鸣叫,保持开门信号为关闭 P1.0=0 */ #include "msp430f6638.h" //包含 msp430f6638.h 头文件 void delay(void); void Alert(void); void init(void); //延迟函数的声明 //输入错误密码时的警报函数的声明 //初始化函数声明 int main( void ) { WDTCTL = WDTPW + WDTHOLD; init(); unsigned char i; unsigned char flag; unsigned char EnterPassword[5]; /* //关闭看门狗 //设置循环变量 i //设置标志变量 //用数组装输入的 5 个数 初始化密码,每个数字用 ASCII 码保存,分别对应 55,54,53,52,51 设置为依次按下 S7,S6,S5,S4,S3,S2,S1 为该密码 */ unsigned char Password[5] = {"76543"}; //输入密码 for (i = 0; i < 5; i++) { flag = 1; while (flag) { //循环 5 次,即输入 5 个值 //用标志变量 flag 来检测是否按下了一次键 if ((P4IN & BIT0) == 0) { EnterPassword[i] = 55; flag = 0; delay(); } else if ((P4IN & BIT1) == 0) { EnterPassword[i] = 54; flag = 0; delay(); } else if ((P4IN & BIT2) == 0) //S7 按下 //7 对应 ASCII 码里的 55 //S6 按下 //6 对应 ASCII 码里的 54 //S5 按下
{ EnterPassword[i] = 53; flag = 0; delay(); } else if ((P4IN & BIT3) == 0) { EnterPassword[i] = 52; flag = 0; delay(); } else if ((P4IN & BIT4) == 0) { EnterPassword[i] = 51; flag = 0; delay(); //5 对应 ASCII 码里的 53 //S4 按下 //4 对应 ASCII 码里的 52 //S3 按下 //3 对应 ASCII 码里的 51 } } } //将输入的密码与原密码进行比较 flag = 1; for (i = 0; i < 5; i++) { if (EnterPassword[i] != Password[i]) flag = 0; //如果 5 个值中,出现任一个值不一样,flag 就会被置 0 } /* 输入密码正确 LED1 灯连续亮,产生一个开门信号 P1.1=1 输入密码不正确,5 个 LED 灯同时闪烁,同时蜂鸣器鸣叫,保持开门信号为关闭 P1.0=0 */ if (flag) { while (1) { P8OUT |= BIT0; P1OUT |= BIT1; //LED1 连续亮 //开门信号 P1.1=1 } } else { while(1) {
Alert(); P1OUT &= ~BIT0; //调用警报函数 //开门信号为关闭 P1.0=0 } } return 0; } //端口初始化函数 void init() { //端口 P4,P5,P8, P1.5 的初始化 P4OUT = 0x00; P5OUT = 0x00; P8OUT = 0x00; P1OUT &= ~BIT5; P8DIR |= BIT0; P1DIR |= BIT1; P1DIR |= BIT0; P1DIR |= BIT5; //设置 P8.0 为输出 //设置 P1.1 为输出 //设置 P1.0 为输出 //设置 P1.5 为输出 P4REN |= BIT4; P4REN |= BIT3; P4REN |= BIT2; P4REN |= BIT1; P4REN |= BIT0; P4OUT |= BIT4; P4OUT |= BIT3; P4OUT |= BIT2; P4OUT |= BIT1; P4OUT |= BIT0; //S3 拉电阻; //S4 拉电阻; //S5 拉电阻; //S6 拉电阻; //S7 拉电阻; //S3 上拉电阻; //S4 上拉电阻; //S5 上拉电阻; //S6 上拉电阻; //S7 上拉电阻; P4DIR |= BIT5; P4DIR |= BIT6; P4DIR |= BIT7; //设置 P4.5 为输出,LED5 //设置 P4.6 为输出,LED4 //设置 P4.7 为输出,LED3 P5SEL &= ~BIT7; P5DIR |= BIT7; //设置 P5.7 为 I/O //设置 P5.7 为输出,LED2 P8SEL &= ~BIT0; P8DIR |= BIT0; //设置 P8.0 为 I/o //设置 P8.0 为输出,LED1
} //延迟函数 void delay() { unsigned int i; for (i = 0; i < 0xffff; i++); for (i = 0; i < 0xffff; i++); } //警报函数 void Alert() { P1OUT |= BIT5; P4OUT |= BIT5; P4OUT |= BIT6; P4OUT |= BIT7; P5OUT |= BIT7; P8OUT |= BIT0; delay(); P8OUT &= ~BIT0; P5OUT &= ~BIT7; P4OUT &= ~BIT7; P4OUT &= ~BIT6; P4OUT &= ~BIT5; delay(); //LED1 亮 //LED2 亮 //LED3 亮 //LED4 亮 //LED5 亮 //LED1 灭 //LED2 灭 //LED3 灭 //LED4 灭 //LED5 灭 }
分享到:
收藏