1、#include#include#define uchar unsigned char#define uint unsigned intuchar a1=14,b1=14,c1=14,d1=14,e1=14,f1=14,mx1,mx2,mx3,mx4,mx5,mx6;uchar wei,key,queding,esc,change,flag,flag1,flag2,T;uchar x,m1=0,m2=0,m3=0,m4=0,m5=0,m6=0;uchar n1=16,n2=16,n3=16,n4=16,n5=16,n6=16;sbit led=P33;sbit beep=P37;uchar c
2、ode table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x89,0x86,0xc7,0xc8,0xbf,0xc1,0xf6;/H,E,L,N,-,Uuchar code table1=0xfe,0xbf,0xfb,0xf7,0xef,0xdf;#define WaitTime 0x01/定义 CPU 等待时间sfr ISP_DATA=0xe2;/ISP/IAP 数据寄存器声明sfr ISP_ADDRH=0xe3;/ISP/IAP 高字节地址寄存器sfr ISP_ADDRL=0xe4;/ISP/IAP 低字节地址寄存器sfr I
3、SP_CMD=0xe5;/ISP/IAP 命令模式寄存器sfr ISP_TRIG=0xe6;/ISP/IAP 命令触发寄存器sfr ISP_CONTR=0xe7;/ISP/IAP 控制寄存器#define RdCommand 0x01#define PrgCommand 0x02#define EraseCommand 0x03#define WaitTime 0x01/* = 打开 ISP,IAP 功能 = */void ISP_IAP_enable()EA=0; /* 关中断 */ISP_CONTR=ISP_CONTR/* 0001,1000 */ISP_CONTR=ISP_CONTR|W
4、aitTime;/* 写入硬件延时 */ISP_CONTR=ISP_CONTR|0x80;/* ISPEN=1 */* = 关闭 ISP,IAP 功能 = */void ISP_IAP_disable()ISP_CONTR=ISP_CONTR /* ISPEN = 0 */ISP_TRIG =0x00;EA =1;/* 开中断 */* = 公用的触发代码 = */void ISPgoon()ISP_IAP_enable(); /* 打开 ISP,IAP 功能 */ISP_TRIG=0x46; /* 触发 ISP_IAP 命令字节 1 */ISP_TRIG=0xb9; /* 触发 ISP_IAP
5、 命令字节 2 */_nop_();/* = 字节读 = */uchar byte_read(uint byte_addr)ISP_ADDRH=(uchar)(byte_addr8); /* 地址赋值 */ISP_ADDRL=(uchar)(byte_addrISP_CMD =ISP_CMD /* 清除低 3 位 */ISP_CMD =ISP_CMD|RdCommand; /* 写入读命令 */ISPgoon(); /* 触发执行 */ISP_IAP_disable(); /* 关闭 ISP,IAP 功能*/return (ISP_DATA); /* 返回读到的数据 */* = 扇区擦除 =
6、*/void sectorerase(uint sector_addr)uint iSectorAddr;iSectorAddr=sector_addr /* 取扇区地址 */ISP_ADDRH=(uchar)(iSectorAddr 8);ISP_ADDRL=0x00;ISP_CMD =ISP_CMD /* 清空低 3 位*/ISP_CMD =ISP_CMD|EraseCommand;/* 擦除命令 3*/ISPgoon(); /* 触发执行*/ISP_IAP_disable(); /* 关闭 ISP,IAP 功能 */* = 字节写 = */void byte_write(uint byt
7、e_addr, uchar original_data)ISP_ADDRH=(uchar)(byte_addr 8);/* 取地址*/ISP_ADDRL=(uchar)(byte_addr ISP_CMD =ISP_CMD /* 清低 3 位*/ISP_CMD =ISP_CMD|PrgCommand; /* 写命令 2*/ISP_DATA =original_data; /* 写入数据准备*/ISPgoon(); /* 触发执行*/ISP_IAP_disable(); /* 关闭 IAP 功能*/void delay(uint z)uchar i,j;while(z-)for(i=10;i0;
8、i-)/1msfor(j=44;j0;j-);void dis_play(uchar k,uchar information)P2=tableinformation;P0=table1k;delay(3);P0=0xff;void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)dis_play(0,a);dis_play(1,b);dis_play(2,c);dis_play(3,d);dis_play(4,e);dis_play(5,f);void matrixkeys()uchar temp,h;for(h=0;h0;x-)
9、/开机显示“HELLO-“display(10,11,12,12,0,14);while(1)matrixkeys();entering();display(a1,b1,c1,d1,e1,f1);if(queding=1queding=0;m1=byte_read(0x2000);m2=byte_read(0x2002);m3=byte_read(0x2004);m4=byte_read(0x2006);m5=byte_read(0x2008);m6=byte_read(0x200A);a1=14;b1=14;c1=14;d1=14;e1=14;f1=14;if(mx1=m1/密码必须连续错误
10、 3 次时,才能锁定/-所以这里将 FLAG2 置 0flag1=1;/重置密码标志led=0;a1=10;b1=11;c1=12;d1=12;e1=0;f1=14;elsefor(x=100;x0;x-)display(13,0,14,14,14,14); /密码错误显示 “NO-“flag1=0;/若一次输入密码正确,再次输入密码错误,不可更改密码flag2+;/密码错误次数计数标志flag=1;/密码错误重新输入密码标志while(flag22)TR0=1;flag=0;/不再进入清除程序,将 FLAG 置 0display(13,0,14,14,14,14);while(queding
11、=1)/*关锁键 flag1=1 时有效*/led=1;queding=0;flag1=0;a1=14;b1=14;c1=14;d1=14;e1=14;f1=14;mx1=0;mx2=0;mx3=0;mx4=0;mx5=0;mx6=0;while(T=1)/报警结束键盘锁定,数显“SUO-“display(5,15,0,14,14,14);qinchu();while(change=1)/重置密码flag1=0;/若用 IF 语句会出现显示重影matrixkeys();qinchu();switch(wei)case 1:m1=key;n1=10;break;case 2:m2=key;n2=
12、10;break;case 3:m3=key;n3=10;break;case 4:m4=key;n4=10;break;case 5:m5=key;n5=10;break;case 6:m6=key;n6=10;break;case 7:wei=6;break;display(n1,n2,n3,n4,n5,n6);if(queding=1)sectorerase(0x2000);/此段不能和显示函数放一起byte_write(0x2000,m1);/不然会造成密码更改时显示不明显byte_write(0x2002,m2);byte_write(0x2004,m3);byte_write(0x2006,m4);byte_write(0x2008,m5);byte_write(0x200A,m6);change=0;queding=0;led=1;flag=1;/进入清除程序n1=16;n2=16;n3=16;n4=16;n5=16;n6=16;
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。