文档详情

基于51单片机的密码锁(C语言)(推荐文档).doc

夏**
实名认证
店铺
DOC
109.51KB
约9页
文档ID:525493447
基于51单片机的密码锁(C语言)(推荐文档).doc_第1页
1/9

电路:功能描述,开机无显示按下除号,开始输入密码,显示短线,初始密码为0000输入完后,按下on/c键,确定正确显示open,错误显示err键为取消键,输入密码过程中,按下取消键,数码管全亮1s,然后灭掉恢复初始状态按下乘号,设置密码,此时数码管显示短线输入正确密码后,进入更改密码状态,显示全F输入更改后密码,按下on/C键,确认PS:1输入任意时刻,都可按等号返回初始状态2输入时,数字会相应的显示通过Protues仿真,电路图为protues输出的送给初学者,学习参考include #define uint8 unsigned char#define uint16 unsigned int//数码管编码uint8 code SEG7LED[26] = {0x3f,0x06,0x5b,0X4F, 0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C, 0x39,0x5E,0x79,0x71, 0x00,0x40,0xff, 0x3f,0x73,0x79,0x37, //open 0x79,0x77,0x77}; //err//变量声明uint8 Ge,Shi,Bai,Qian;//数码管各个位uint8 WeiNum=1;uint8 code P1Pin[9] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};uint8 state=0;//记录密码锁状态,0为待机状态,1为输入密码,2,3为设置密码uint8 InputNum=1;//记录输入密码时,目前密码的位数。

uint8 InPassWord[4];uint8 PassWord[4]={0,0,0,0};//函数声明void initTimer0();void display(uint8 WeiNum);uint8 keyscan();void delayms(uint16 Xms);void password(uint8 key);uint8 Compare(uint8 InPassWord[4]);void main(){ uint8 key; initTimer0(); while(1) { key = keyscan(); password(key); }}void initTimer0(){ EA = 1; ET0 = 1; TMOD = 0X01; TH0 = (65535-5000)/256; TL0 = (65535-5000)%256; TR0 = 1;}void Timer0() interrupt 1{ TH0 = (65535-5000)/256; TL0 = (65535-5000)%256; display(WeiNum); WeiNum ++; if(WeiNum==5) WeiNum = 1;}void display(uint8 WeiNum){ switch(WeiNum) { case 1: { P2 = 0xff; P0 = SEG7LED[Qian]; P2 = 0xfe; break; } case 2: { P2 = 0xff; P0 = SEG7LED[Bai]; P2 = 0xfd; break; } case 3: { P2 = 0xff; P0 = SEG7LED[Shi]; P2 = 0xfb; break; } case 4: { P2 = 0xff; P0 = SEG7LED[Ge]; P2 = 0xf7; break; } default: { P2 = 0xff; P0 = 0xff; P2 = 0xff; break; } }}void delayms(uint16 Xms){ uint16 i,j; for(i=Xms;i>0;i--) for(j=110;j>0;j--);}uint8 keyscan(){ uint8 i=0; uint8 key8=0xff; uint8 key=0xff; uint8 Button; for(i=0;i<4;i++) { P1 = P1Pin[i]; Button = P1; if(Button != P1Pin[i]) { delayms(5); Button = P1; if(Button != P1Pin[i]) { key8 = Button; } while(Button != P1Pin[i]) { Button = P1; } } } switch(key8) {//0~9数字键,12确定,14取消,10输入密码,11设置密码。

case 0xee:{key = 7;break;} case 0xde:{key = 8;break;} case 0xbe:{key = 9;break;} case 0x7e:{key = 10;break;} case 0xed:{key = 4;break;} case 0xdd:{key = 5;break;} case 0xbd:{key = 6;break;} case 0x7d:{key = 11;break;} case 0xeb:{key = 1;break;} case 0xdb:{key = 2;break;} case 0xbb:{key = 3;break;} case 0x7b:{key = 15;break;} case 0xe7:{key = 12;break;} case 0xd7:{key = 0;break;} case 0xb7:{key = 14;break;} case 0x77:{key = 16;break;} default:{key = 0xff;break;} } return key; }void password(uint8 key){//0~9数字键,12确定,14取消,10输入密码,11设置密码。

uint8 i; if(key!=0xff) { switch(state) { case 0: { if(key == 10) { state = 1; Ge =17;Shi=17;Bai=17;Qian=17; } else if(key == 11) { state = 2; Ge =17;Shi=17;Bai=17;Qian=17; } break; } case 1: { if(key>=0 && key <= 9) { switch(InputNum) { case 1: Ge = key;InPassWord[0]=key; break; case 2: Shi = key;InPassWord[1]=key; break; case 3: Bai = key;InPassWord[2]=key; break; case 4: Qian =key;InPassWord[3]=key; break; default: break; } if(InputNum<5) InputNum++; } else if(key == 12) { if(Compare(InPassWord)) { Ge =22;Shi=21;Bai=20;Qian=19; for(i=0;i<4;i++) InPassWord[i] = 0xff; }//open else { Ge =16;Shi=25;Bai=24;Qian=23;}//err delayms(1000); InputNum =1; state = 0; } else if(key == 14) { Ge =18;Shi=18;Bai=18;Qian=18;//全亮 delayms(1000); state = 0; InputNum =1; } break; } case 2: { if(key>=0 && key <= 9) { switch(InputNum) { case 1: Ge = key;InPassWord[0]=key; break; case 2: Shi = key;InPassWord[1]=key; break; case 3: Bai = key;InPassWord[2]=key; break; case 4: Qian =key;InPassWord[3]=key; break; default: break; } if(InputNum<5) InputNum++; } else if(key == 12) { if(Compare(InPassWord)) { Ge =15;Shi=15;Bai=15;Qian=15; for(i=0;i<4;i++) InPassWord[i] = 0xff; state =3; }//ffff else { Ge =16;Shi=25;Bai=24;Qian=23; state =0; }//err delayms(1000); InputNum =1; } else if(key == 14) { Ge =18;Shi=18;Bai=18;Qian=18;//全亮 delayms(1000); state = 0; Inpu。

下载提示
相似文档
正为您匹配相似的精品文档