东北大学单片机课设实现一个密码锁的程序.docx

上传人:b****6 文档编号:8912373 上传时间:2023-02-02 格式:DOCX 页数:22 大小:19.51KB
下载 相关 举报
东北大学单片机课设实现一个密码锁的程序.docx_第1页
第1页 / 共22页
东北大学单片机课设实现一个密码锁的程序.docx_第2页
第2页 / 共22页
东北大学单片机课设实现一个密码锁的程序.docx_第3页
第3页 / 共22页
东北大学单片机课设实现一个密码锁的程序.docx_第4页
第4页 / 共22页
东北大学单片机课设实现一个密码锁的程序.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

东北大学单片机课设实现一个密码锁的程序.docx

《东北大学单片机课设实现一个密码锁的程序.docx》由会员分享,可在线阅读,更多相关《东北大学单片机课设实现一个密码锁的程序.docx(22页珍藏版)》请在冰豆网上搜索。

东北大学单片机课设实现一个密码锁的程序.docx

东北大学单片机课设实现一个密码锁的程序

#include

#include

#include

#include

#definew_c_addXBYTE[0x2070]/*写命令字地址*/

#definew_d_addXBYTE[0x2071]/*写数据地址*/

#definer_s_addXBYTE[0x2072]/*读状态字地址*/

#definer_d_addXBYTE[0x2073]/*读数据地址*/

#defineCOMXBYTE[0x2021]/*命令/状态口的地址*/

#defineDATXBYTE[0x2020]/*数据口地址*/

#defineucharunsignedchar

#defineuintunsignedint

/*设定EEPROM**************************************/

sbitSDA=P1^2;

sbitSCL=P1^5;

bdatacharcom_data;/*可位寻址片内数据存储器*/

sbitmos_bit=com_data^7;

sbitlow_bit=com_data^0;

unsignedcharbdatastatus;/*可位寻址片内数据存储器,允许位与字节混合访问*/

sbitbusy=status^7;/*忙线的第7位*/

unsignedcharkey;

unsignedcharbdatasta_8279;

sbitdu=sta_8279^7;/*方式设置命令字*/

uchark=8,flag=0,x=0,tflag=0;

ucharadd,co,count=0;//co是电机转的格数add显示地址寄存

uinttimes=0;//输错密码次数

uchari=0,j=0,n=0,state;

unsignedcharcodetab[16]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,

0x77,0x7C,0x39,0x5E,0x79,0x71};/*0~F的字型编码*/

unsignedcharcodenumber[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};/*数字0~15*/

unsignedxdatahz1[16]={0xA1,0xEF,0xc7,0xeb,0xCA,0xE4,0xc8,0xeb,0xc3,0xdc,0xc2,0xeb,0xa1,0xc3,0xA1,0xEF};

/*请输入密码:

*/

unsignedxdatahz2[16]={0xc7,0xeb,0xd4,0xd9,0xb4,0xce,0xca,0xe4,0xc8,0xeb,0xc3,0xdc,0xc2,0xeb,0xa1,0xc3};

/*请再次输入密码:

*/

unsignedcharhz3[4]={0};//存放首次输入密码

unsignedcharhz4[4]={0};//存放再次输入密码

unsignedcharcodehz5[16]={0xA1,0xF9,0xA1,0xF9,0xB4,0xED,0xCE,0xF3,0xc3,0xdc,0xc2,0xeb,0xA1,0xF9,0xA1,0xF9};//错误密码

unsignedcharcodehz12[16]={0xA1,0xF9,0xA1,0xF9,0xd5,0xFd,0xc8,0xb7,0xc3,0xdc,0xc2,0xeb,0xA1,0xF9,0xA1,0xF9};//正确密码

unsignedxdatahz14[16]={0xA1,0xEF,0xc7,0xeb,0xCA,0xE4,0xc8,0xeb,0xd0,0xc2,0xc3,0xdc,0xc2,0xeb,0xA1,0xEF};//输入新密码

unsignedcharcodehz13[16]={0xA1,0xF9,0xA1,0xF9,0xc9,0xe8,0xd6,0xc3,0xb3,0xc9,0xb9,0xa6,0xA1,0xF9,0xA1,0xF9};//设置成功

unsignedcharcodehz6[16]={0xD4,0xA4,0xD6,0xC3,0xc3,0xdc,0xc2,0xeb,0xa1,0xc3,0x20,0x20,0x20,0x20,0x20,0x20};//预置密码

unsignedcharcodehz7[16]={0xA1,0xEF,0xA1,0xEF,0xD0,0xBB,0xD0,0xBB,0xCA,0xB9,0xD3,0xC3,0xA1,0xEF,0xA1,0xEF};//谢谢使用

unsignedcharcodehz8[16]={0x20,0x20,0xA1,0xEF,0xA1,0xEF,0xD4,0xD9,0xBC,0xFB,0xA1,0xEF,0xA1,0xEF,0x20,0x20};//再见

unsignedcharcodehz9[16]={0xA1,0xEF,0xA1,0xEF,0xd3,0xc3,0xbb,0xa7,0xc4,0xfa,0xba,0xc3,0xA1,0xEF,0xA1,0xEF};//菜单

unsignedcharcodehz10[16]={0xA2,0xB1,0xD3,0xC3,0xBB,0xA7,0xD0,0xC5,0xCF,0xA2,0x20,0x20,0x20,0x20,0x20,0x20};//一、用户信息

unsignedcharcodehz11[16]={0xA2,0xB2,0xD0,0xDE,0xB8,0xC4,0xc3,0xdc,0xc2,0xeb,0x20,0x20,0x20,0x20,0x20,0x20};//二、修改密码

unsignedcharcodehz15[16]={0xA1,0xEF,0x31,0x31,0xc4,0xea,0x30,0x37,0xd4,0xc2,0x30,0x39,0xc8,0xd5,0xA1,0xEF};//二、修改密码

unsignedcharcodename0[16]={0xd0,0xd5,0xC3,0xfb,0xa1,0xc3,0xce,0xd7,0xb5,0xc2,0xce,0xb0,0x20,0x20,0x20,0x20};//姓名:

巫德伟

unsignedcharcodename1[16]={0xd0,0xd5,0xc3,0xfb,0xa1,0xc3,0xd3,0xc9,0xb9,0xda,0xd4,0xaa,0x20,0x20,0x20,0x20};//姓名:

由冠元

unsignedcharcodeid0[16]={0xd1,0xa7,0xba,0xc5,0xa1,0xc3,0x32,0x30,0x30,0x38,0x32,0x37,0x33,0x38,0x20,0x20};//学号:

20082738

unsignedcharcodeid1[16]={0xd1,0xa7,0xba,0xc5,0xa1,0xc3,0x32,0x30,0x30,0x38,0x32,0x37,0x35,0x32,0x20,0x20};//学号:

20082752

voidinput_code(void);

voidinput_again(void);

voidwrong_code(void);

voidclose_window(void);

voidmenu(void);

voidyuzhimima(void);

voidprintmessage(void);

voidset_success();

voidlcd_init(void);

voidlcd_busy(void);

voidini_8279(void);

voidcheck_8279(void);

voidclr_lcd(void);

voidcorrect_code(void);

voidinput_newcode();

voiddelay();

/***********************main*********************************/

voidmain()

{TMOD=0x15;

EA=1;

EX0=1;//按键中断打开

lcd_init();/*lcd初始化*/

clr_lcd();

ini_8279();/*8279初始化*/

state=0;//先进入输入密码界面

while

(1)

{

switch(state)

{

case0:

if(((hz3[0]&hz3[1]&hz3[2]&hz3[3])&0x0ff)==0&&n<5)//存储器中数据为空//输入初始密码

{

yuzhimima();

if(flag==1)

{

EX0=0;

if(key>=0x00&&key<=0x09)

{

hz3[n]=key;

add=0x92;

lcd_busy();

w_c_add=add;

for(i=0;i<=n;i++)

{

lcd_busy();

w_d_add=hz3[i]+0x30;

lcd_busy();

}

n++;

}

if(key==15||n==5)

{

n=0;

state=1;

set_success();

}

flag=0;

EX0=1;

}

}

else

state=1;

break;

case1:

clr_lcd();

input_code();

state=2;

break;

case2:

if(flag==1)/*取键盘密码值*/

{

EX0=1;

if(key>=0x00&&key<=0x09)

{

hz4[n]=key;

add=0x92;

lcd_busy();

w_c_add=add;

for(i=0;i<=n;i++)

{

lcd_busy();

w_d_add=hz4[i]+0x30;

lcd_busy();

}

n=n+1;

}

if(key==15||n==5)

{

state=3;

n=0;

}

flag=0;

EX0=1;

}

break;

case3:

EX0=0;

if((hz3[0]==hz4[0])&&(hz3[1]==hz4[1])&&(hz3[2]==hz4[2])&&(hz3[3]==hz4[3]))//对比密码

//显示密码正确

{

clr_lcd();

correct_code();

delay();

delay();

delay();

delay();

delay();

state=4;

}

else

{

if(times<2)

{

clr_lcd();

wrong_code();

delay();

delay();

delay();

delay();

delay();

state=1;

}

else

state=11;

}

EX0=1;

break;

case4:

EX0=1;

clr_lcd();

menu();

state=5;

flag=0;

break;

case5:

if(flag==1)

{

if(key==1)

{state=6;}

elseif(key==2)

{state=8;}//进入系统界面1用户信息2修改密码3返回

elseif(key==3)

{state=1;}

else

{state=5;}

flag=0;

}

break;

case6:

clr_lcd();

printmessage();

state=7;

flag=0;//用户信息打印

break;

case7:

if(flag==1)

{

if(key==15)

{state=4;}

flag=0;

}

break;

case8:

clr_lcd();

input_newcode();//修改密码写入hz3[]

state=9;

flag=0;

break;

case9:

if(flag==1)

{

if(key>=0&&k<=9)

{

hz3[n]=key;

add=0x92;

lcd_busy();

w_c_add=add;

for(i=0;i<=n;i++)

{

lcd_busy();

w_d_add=hz3[i]+0x30;

lcd_busy();

}

n++;

}

if(key==15||n==5)

{

state=10;

n=0;

}

flag=0;

}

break;

case10:

EX0=0;//关按键中断

clr_lcd();

input_again();//再次用电机输入密码

TH0=0;

TL0=0;

TH1=-(50000/256);

TL1=-(50000%256);

TR0=1;

TR1=1;

ET1=1;

while(x<4);

x=0;

TR1=0;TR0=0;ET1=0;

state=12;

flag=0;

break;

case11:

close_window();

delay();

delay();

delay();

delay();

delay();

clr_lcd();

state=1;

flag=0;

break;

//对比密码不正确跳到state10正确显示成功返回state4

case12:

if((hz3[0]==hz4[0])&&(hz3[1]==hz4[1])&&(hz3[2]==hz4[2])&&(hz3[3]==hz4[3]))

{

set_success();

delay();

delay();

delay();

delay();

state=4;

}

else

{

if(times<2)

{

clr_lcd();

wrong_code();

delay();

delay();

delay();

delay();

for(i=0;i<4;i++)

{

hz4[i]=0;

}

state=10;

}

else

{

state=11;

}

flag=1;

}

break;

default:

break;

}

}

}

/***************子程序*******************************/

/***************输入密码*****************************/

voidinput_code()

{

add=0x80;/*设置显示坐标,80H对应字符的第一行第一列*/

lcd_busy();

w_c_add=add;/*写数据*/

for(i=0;i<8;i++)

{

lcd_busy();

w_d_add=hz1[2*i];/*写数据,上半字节*///hz1[]请输入密码:

lcd_busy();

w_d_add=hz1[2*i+1];/*写数据,下半字节*/

//delay();

}

}

/******************newcode****************************/

voidinput_newcode()

{

add=0x80;/*设置显示坐标,80H对应字符的第一行第一列*/

lcd_busy();

w_c_add=add;/*写数据*/

for(i=0;i<8;i++)

{

lcd_busy();

w_d_add=hz14[2*i];/*写数据,上半字节*///hz1[]请输入密码:

lcd_busy();

w_d_add=hz14[2*i+1];/*写数据,下半字节*/

//delay();

}

}

/***************再次输入密码***************************/

voidinput_again(void)

{

add=0x80;/*设置显示坐标,80H对应字符的第一行第一列*/

lcd_busy();

w_c_add=add;/*写数据*/

for(i=0;i<8;i++)

{

lcd_busy();

w_d_add=hz2[2*i];

lcd_busy();/*写数据,上半字节*///hz1[]再次输入密码:

w_d_add=hz2[2*i+1];/*写数据,下半字节*/

}

}

/******************密码错误****************************/

voidwrong_code(void)

{

add=0x88;/*设置显示坐标,80H对应字符的第一行第一列*/

lcd_busy();

w_c_add=add;/*写数据*/

for(i=0;i<8;i++)

{

lcd_busy();

w_d_add=hz5[2*i];

lcd_busy();/*写数据,上半字节*///hz5[]错误密码

w_d_add=hz5[2*i+1];/*写数据,下半字节*/

}

times++;

}

/******************密码正确****************************/

voidcorrect_code(void)

{

add=0x88;/*设置显示坐标,80H对应字符的第一行第一列*/

lcd_busy();

w_c_add=add;/*写数据*/

for(i=0;i<8;i++)

{

lcd_busy();

w_d_add=hz12[2*i];

lcd_busy();/*写数据,上半字节*///hz5[]错误密码

w_d_add=hz12[2*i+1];/*写数据,下半字节*/

}

}

/********************设置成功********************************/

voidset_success()

{

add=0x98;/*设置显示坐标,80H对应字符的第一行第一列*/

lcd_busy();

w_c_add=add;/*写数据*/

for(i=0;i<8;i++)

{

lcd_busy();

w_d_add=hz13[2*i];

lcd_busy();/*写数据,上半字节*/

w_d_add=hz13[2*i+1];/*写数据,下半字节*/

}

}

/*****************关闭显示****************************/

voidclose_window(void)

{

times=0;

add=0x80;

lcd_busy();

w_c_add=add;

for(i=0;i<8;i++)

{

lcd_busy();

w_d_add=hz7[2*i];

lcd_busy();/*写数据,上半字节*///谢谢使用

w_d_add=hz7[2*i+1];/*写数据,下半字节*/

}

add=0x90;

lcd_busy();

w_c_add=add;

for(i=0;i<8;i++)

{

lcd_busy();

w_d_add=hz8[2*i];

lcd_busy();/*写数据,上半字节*///byebye

w_d_add=hz8[2*i+1];/*写数据,下半字节*/

}

}

/*****************界面显示****************************/

voidmenu(void)/*界面*/

{

add=0x90;

lcd_busy();

w_c_add=add;/*写数据*/

for(i=0;i<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1