/*
* main.c
*/
#include <msp430g2553.h>
#include"12864.h"
#include"key.h"
uchar key0[8],key1[8]={16}; ///key0[]为输入密码,,,key1[]为正确密码
int mark,i=0,t=0,s_mark; ///mark功能选择,t密码错误几次
/*******************************************
函数名称:panduan
功 能:判断密码是否正确
参 数:无
返回值 :无
********************************************/
void panduan(void)
{
}
void delay2(uint z)
{
uint tmp;
for(tmp = z;tmp > 0;tmp--);
}
/*******************************************
函数名称:p2_init
功 能:报警函数
参 数:无
返回值 :无
********************************************/
void P2_init()
{
P2SEL|= BIT5; //TA从P1.2输出
P2DIR|= BIT5; //TA从P1.2输出
TACTL|= MC_1+TASSEL_2; //时钟源选择ACLK,增计数模式 TA设置
TACCTL1=OUTMOD_7; //模式7 高电平PWM输出 PWM设置
TACCR0=32-1; //PWM总周期=32个ACLK周期 约等于1000Hz 设置PWM的周期
TACCR1=30; //TA 占空比 设置占空比
}
/*******************************************
函数名称:panduan
功 能:判断密码是否正确
参 数:无
返回值 :无
********************************************/
void mark_xz(void)
{
if(key_val==16)
mark=1; //确定键 当设定密码时为设定成功键,当为密码输入完成键时为判断键
else if(key_val==14)
mark=2; //密码修改键
//if(key_val==14)
// mark=3;
else if(key_val==13)
mark=3; //密码设定
else mark=0;
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
lcdinit();
Init_Keypad();
//P2_init();//控制蜂鸣器-----报警(直接调用就行)
write_string(1,1,"DTC");
for(;;)
{
mark_xz();
switch(0) // mark
{
default:
case 0:
{
write_string(1,2,"请输入密码:");
P1IE = 0x70; // 设置P1.4,P1.5,P1.6 可以中断
P1IES = 0x70; // 设置P1.4,P1.5,P1.6 为下降沿中断
Key_Event();
if(i>0)
write_string(i,4,"*");
else ;
}
break;
case 1:
{
if(s_mark==3)
{
write_string(1,2,"密码设定成功!");
delay2(20000);
mark=0;
}
else
{
for(i=i-1;i>=0;i--)
{
if( key0[i]==key1[i])
;
else break;
}
if(i>=0)
{
if(t<2)
{
write_string(1,2,"密码错误!");
t++;
write_string(1,3,"重新输入");
i=0;
}
if(t>=2)
{
write_string(1,2,"密码错误!");
P2_init();
}
}
else
{
write_string(1,2,"密码正确");
}
}
s_mark=0;
}
break;
case 2:
{
write_string(1,2,"密码修改");
write_string(1,3,"输入旧密码:");
}
break;
case 3:
{
write_string(1,2,"设定密码:");
P1IE = 0x70; // 设置P1.4,P1.5,P1.6 可以中断
P1IES = 0x70; // 设置P1.4,P1.5,P1.6 为下降沿中断
Key_Event();
write_string(i,4,"*");
s_mark=mark;
}
break;
}
}
}
#pragma vector=PORT1_VECTOR //中断服务程序:
__interrupt void p1int(void)
{
P1OUT ^=BIT4+BIT5+BIT6;
if(mark==3)
key1[i]=key_val;
else
key0[i]=key_val;
i++;
delay1();
P1IFG=0;
}
|