东北大学单片机课设实现一个密码锁的程序.docx
- 文档编号:8912373
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:22
- 大小:19.51KB
东北大学单片机课设实现一个密码锁的程序.docx
《东北大学单片机课设实现一个密码锁的程序.docx》由会员分享,可在线阅读,更多相关《东北大学单片机课设实现一个密码锁的程序.docx(22页珍藏版)》请在冰豆网上搜索。
东北大学单片机课设实现一个密码锁的程序
#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<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东北大学 单片机 实现 一个 密码锁 程序