基于AT24C02的简易电子密码锁说明书

合集下载

电子密码锁使用说明

电子密码锁使用说明

基于51单片机的简易电子密码锁使用说明一、实现功能:1、设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。

2、密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。

修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。

3、报警、锁定键盘功能。

密码输入错误显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。

4、AT24C02保存密码,支持复位保存,掉电保存功能。

二、按键说明按键定义图如图示:采用4X4键盘输入,键盘对应名称如下:1 2 3 A4 5 6 B7 8 9 C* 0 # D其中,【0—9】为数字键,用于输入相应的密码,【*】号键为取消当前操作【#】号键为确认【D】键为修改密码其它键无功能及定义三、作用说明:密码锁初始密码为:000000.1、开锁:插上电源后,程序自动调入初始密码,此时依次输入:000000,然后按【#】(确认)键,此时锁会打开,可以看到显示open,密码锁打开。

(如为自己焊接,请首次使用输入:131420,对密码进行初始化,当显示出现:initpassword,证明密码初始化完成,此时初始密码即为:000000)。

2、退出并关锁:按下【*】(取消)键,此时锁关闭,所有输入清除。

3、修改密码:在开锁状态下,再次输入正确的密码并按下【#】(确认)键,此时听到两声提示,输入新的六位密码并按【D】(重设)键,再重复输入一次新密码并按【D】,会听到两声提示音,表示重设密码成功,内部保存新密码并存储到AT24C02。

(如两次输入的新密码不一样,则重设密码失败)。

4、报警并锁定键盘:当输入密码错误后,报警并锁定键盘3秒,如3秒内又有按键,3秒再启动。

5、当重置新密码时,新密码会保存于AT24C02存储器里。

有任何问题请与我联系:QQ:331091810E_mail:331091810@旺旺ID:j_yongchao2008淘宝店址:/。

门禁电子密码锁说明书

门禁电子密码锁说明书
三、总框图及总体软件设计说明
1、 系统总框图:
图1
2、硬件模块功能说明
键盘模块:键盘共16个按键,10个是0~9数字键,1个返回键(ESC),1个确认件(ENT),1个设置用户密码键,1个设置管理员密码键,1个调整时钟键。当数字键是输入对应的0~9数字的,返回键是取消所有调整返回到常态显示时间的,确认键是对用户或管理员的操作进行确认的,管理员模式下修改密码按键才有效,调时钟按键按下则暂停时钟走时进行时间修改。
3、管理员操作模式下,04功能实时钟的设置,利用数字3和数字4按键实现对时和分钟的调校,按键操作时实现快调功能;
4、如果在开锁模式下12S后没有按键操作则进入常态;
5、如果在开锁状态下用户密码输入十次均错误则报警锁键15分钟;
6、其他功能扩展。
二、总体方案设计与论证
1、总体方案设计:
以微处理器AT90C51为核心,利用P0,P1和P2.4、P2.5、P2.6、P2.7这些I/O口实现数据的传送;利用I2C总线通信协议和24C02芯片进行密码的核对和修改;4×4矩阵键盘用于密码的输入与修改以及时钟值的修改;数码管用于显示时间和密码输入和修改状态;密码输入正确后通过P2.4口控制继电器工作打开门;P1口用与读入按键状态来判断是否有按键按下然后执行相应的按键功能;P0口控制数码管的段码输出,P2.5,P2.6,P2.7连接到74ls138译码器来控制数码管的位选码输出。
2、按键消抖方案设计与论证:
2.1、软件延时消抖法
软件延时消抖通过调用延时子程序来判断按键是否是抖动,若是抖动,则延时后按键状态和无按键按下时状态一样,若不是抖动,则按键状态和无按键按下时状态不一样,确定为按键按下。
2.2、滚动滤波法消抖
滚动滤波法通过采集按键最近的5次状态来判断是否有抖动,用5个连续的存数单元分别存按键最近的5次状态,再用2个单元来存放稳定时的状态值,每次扫描按键时把上一次的状态值都存入后一个单元,然后把当前按键的状态值存入第一个单元,这样依次进行下去,若不是抖动,则5个单元的值都相等,若是抖动,则5个单元的值不全相等;之后把5个单元相等时的值存入其中一个稳定状态存储单元,另一个则是存上一次的稳定值,当上一次稳定值是无按键按下时的值,当前稳定值不等于无按键按下时的值时,则判定为按键按下。

毕业设计——密码锁电路程序

毕业设计——密码锁电路程序

密码锁本设计以STC89C52RC单片机为核心,利用AT24C02存储密码,做到掉电存储密码的电子密码锁。

电路:程序:#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char#define N 7#define OP_READ 0xa1 // 器件地址以及读取操作#define OP_WRITE 0xa0 // 器件地址以及写入操作#define MAX_ADDR 0x7f // AT24C02最大地址sbit SCL=P2^0;sbit SDA=P2^1;sbit CSH=P3^0;sbit e=P3^4;sbit rs=P3^5;sbit sp=P3^6;sbit lock=P3^1;sfr duan=0x80;sfr key=0x90;uint ci;uchar kc,sc,sc2;int shu1,shu2,jh,jg;uchar code table[] =" LOCK "; uchar code table2[]="WELLCOME TO USE!"; uchar code table3[]="PASS WORD:";uchar code table4[]="ERRO!";uchar code table5[]="OPEN!";uchar code table6[]="NEW PASS WORD"; uchar code table7[]="SUCCESSFUL!";uchar code table8[]="FAIL!";uchar code cmm[6]={1,2,3,3,2,1};uchar mm[6];uchar tablesuan[N];void init();void writec(uint com);void writed(uint dat);void delay(uint shu);uchar keyscan();void xieshuzu(uchar a[],uchar add);void shuru();void kaiji();void bijiao();void xies(uchar a,uchar add);void delayms(unsigned char ms);void gmm();/***********************//***********************//***********************/void start()// 开始位{SDA = 1;SCL = 1;_nop_();_nop_();SDA = 0;_nop_();_nop_();_nop_();_nop_();SCL = 0;}void stop()// 停止位{SDA = 0;_nop_();_nop_();SCL = 1;_nop_();_nop_();_nop_();_nop_();SDA = 1;}unsigned char shin()// 从AT24Cxx移入数据到MCU{unsigned char i,read_data;for(i = 0; i < 8; i++){SCL = 1;read_data <<= 1;read_data |= (unsigned char)SDA;SCL = 0;}return(read_data);}bit shout(unsigned char write_data)// 从MCU移出数据到A T24Cxx{unsigned char i;bit ack_bit;for(i = 0; i < 8; i++) // 循环移入8个位{SDA = (bit)(write_data & 0x80);_nop_();SCL = 1;_nop_();_nop_();SCL = 0;write_data <<= 1;}SDA = 1; // 读取应答_nop_();_nop_();SCL = 1;_nop_();_nop_();_nop_();_nop_();ack_bit = SDA;SCL = 0;return ack_bit; // 返回A T24Cxx应答位}void write_byte(unsigned char addr, unsigned char write_data) // 在指定地址addr处写入数据write_data{start();shout(OP_WRITE);shout(addr);shout(write_data);stop();delayms(10); // 写入周期}unsigned char read_current()// 在当前地址读取{unsigned char read_data;start();shout(OP_READ);read_data = shin();stop();return read_data;}unsigned char read_random(unsigned char random_addr)// 在指定地址读取{start();shout(OP_WRITE);shout(random_addr);return(read_current());}void delayms(unsigned char ms)// 延时子程序{unsigned char i;while(ms--){for(i = 0; i < 120; i++);}}/***********************//***********************//***********************/ //主程序/void main(){ init();kaiji();delay(1000);writec(0x01);xieshuzu(table3,0x80);if(CSH==0){write_byte(2,cmm[0]); //在24c02的地址2中写入数据secdelayms(2);write_byte(3,cmm[1]); //在24c02的地址2中写入数据sec delayms(2);write_byte(4,cmm[2]); //在24c02的地址2中写入数据sec delayms(2);write_byte(5,cmm[3]); //在24c02的地址2中写入数据sec delayms(2);write_byte(6,cmm[4]); //在24c02的地址2中写入数据sec delayms(2);write_byte(7,cmm[5]); //在24c02的地址2中写入数据sec delayms(2);}mm[0]=read_random(2);delayms(2);mm[1]=read_random(3);delayms(2);mm[2]=read_random(4);delayms(2);mm[3]=read_random(5);delayms(2);mm[4]=read_random(6);delayms(2);mm[5]=read_random(7);while(1){lock=0;shuru();bijiao();}}/***********************/ //初始化/ void init(){lock=0;writec(0x01);writec(0x38);writec(0x0c);IT0=1;EX0=1;}/***********************/ //写开机画面/ void kaiji(){xieshuzu(table,0x80);xieshuzu(table2,0xc0);}/***********************/ //写数组/ void xieshuzu(uchar a[],uchar add){uchar cis;writec(add);for(cis=0;a[cis]!='\0';cis++){writed(a[cis]);delay(2);}}/***********************/ //写数字/ void xies(uchar a,uchar add){writec(add);writed(0x30+a);}/***********************/ //写指令/ void writec(uint com){e=0;rs=0;duan=com;delay(2);e=1;delay(2);e=0;}/***********************/ //写数据/void writed(uint dat){e=0;rs=1;duan=dat;delay(2);e=1;delay(2);e=0;}/***********************/ //延时/ void delay(uint shu){uint i,j;for(i=shu;i>0;i--)for(j=110;j>0;j--);}/***********************/ //现盘扫描/ uchar keyscan(){uchar k,skey;key=0xfe;skey=key;sp=1;if(skey!=0xfe){delay(10);skey=key;if(skey!=0xfe){switch(skey){case(0xee):k=7;kc++;break;case(0xde):k=8;kc++;break;case(0xbe):k=9;kc++;break;case(0x7e):k=0x0a;kc++;break;default:break;}while(skey!=0xfe)skey=key;sp=0;return k;}}key=0xfd;skey=key;if(skey!=0xfd){delay(10);skey=key;if(skey!=0xfd){switch(skey){case(0xed):k=4;kc++;break;case(0xdd):k=5;kc++;break;case(0xbd):k=6;kc++;break;case(0x7d):k=0x0b;kc++;break;default:break;}while(skey!=0xfd)skey=key;sp=0;return k;}}key=0xfb;skey=key;if(skey!=0xfb)delay(10);skey=key;if(skey!=0xfb){switch(skey){case(0xeb):k=1;kc++;break;case(0xdb):k=2;kc++;break;case(0xbb):k=3;kc++;break;case(0x7b):k=0x0c;kc++;break;default:break;}while(skey!=0xfb)skey=key;sp=0;return k;}key=0xf7;skey=key;if(skey!=0xf7){delay(10);skey=key;if(skey!=0xf7){switch(skey){case(0xe7):k=0x0d;kc++;break;case(0xd7):k=0; kc++;break;case(0xb7):k=0x0e;kc++;break;case(0x77):k=0x0f;kc++;break;default:break;}while(skey!=0xf7)skey=key;sp=0;return k;}}}/***********************/ //输入数据处理/ void shuru(){uchar k=0,xw=0x80;sc=0;kc=0;xieshuzu(table3,0x80);do{while(kc==sc)k=keyscan();if(kc==1)writec(0x01);tablesuan[sc]=k;//xies(tablesuan[sc],xw);xies(tablesuan[sc],0xc0);writec(xw);writed(0x2A);xw++;if(sc==5)goto out;}while((tablesuan[sc++]<=9)&&(sc<N));out:;if(sc>N){writec(0x01);xieshuzu(table4,0x80);}}void bijiao(){if((tablesuan[0]==mm[0])&&(tablesuan[1]==mm[1])&&(tablesuan[2]==mm[2])&&(tablesuan[3] ==mm[3])&&(tablesuan[4]==mm[4])&&(tablesuan[5]==mm[5])){EA=1;lock=1;writec(0x01);xieshuzu(table5,0x80);delay(6500);EA=0;}else{writec(0x01);xieshuzu(table3,0x80);}}void gmm(){uchar k=0,xw=0x80;sc2=0;kc=0;xieshuzu(table6,0x80);do{while(kc==sc2)k=keyscan();if(kc==1)writec(0x01);mm[sc2]=k;xies(mm[sc2],0xc0);writec(xw);writed(0x2A);xw++;if(sc2==5)goto out2;}while((mm[sc2++]<=9)&&(sc2<N));//out:;//if(sc>N)//{writec(0x01);xieshuzu(table8,0x80);goto out3;//}out2:;writec(0x01);xieshuzu(table7,0x80);write_byte(2,mm[0]); //在24c02的地址2中写入数据secdelayms(2);write_byte(3,mm[1]); //在24c02的地址2中写入数据secdelayms(2);write_byte(4,mm[2]); //在24c02的地址2中写入数据secdelayms(2);write_byte(5,mm[3]); //在24c02的地址2中写入数据secdelayms(2);write_byte(6,mm[4]); //在24c02的地址2中写入数据secdelayms(2);write_byte(7,mm[5]); //在24c02的地址2中写入数据secdelayms(2);out3:;}void INTT0() interrupt 0{EA=0;gmm();EA=1;}。

m16基于AT24C02的密码锁(1602)

m16基于AT24C02的密码锁(1602)

//rs----PD4//rw----PD5//en----PD6//data---PORTB//SDA---PC1//SCL---PC0//beep--PA6//开锁---PB7//开锁状态----PB5//如果把uchar const initpassword[6]={0,0,0,0,0,0};改为_flash uchar initpassword[6]={0,0,0,0,0,0}; //则出现这错误found `unsigned' expecting `;'可我没找到错误在哪???#include <iom16v.h>#include<macros.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define uchar unsigned char#define uint unsigned int#define w 6 //定义密码位数uchar operation=0; //操作标志位uchar pass=0; //密码正确标志uchar ReInputEn=0; //重置输入充许标志uchar s3_keydown=0; //3秒按键标志位uchar key_disable=0; //锁定键盘标志uchar countt0,second; //t1中断计数器,秒计数器//void Delay5Ms(void);uchar InputData[6]; //输入密码暂存区uchar CurrentPassword[6]={1,3,1,4,2,0}; //当前密码值uchar TempPassword[6];uchar N=0; //密码输入位数记数uchar ErrorCont; //错误次数计数uchar CorrectCont; //正确输入计数uchar ReInputCont; //重新输入计数#pragma data:codeuchar const a[]={0xFE,0xFD,0xFB,0xF7}; //控盘扫描控制表uchar const start_line[] = {"password: "};uchar const name[] = {"===Coded Lock==="}; //显示名称uchar const Correct[] = {" correct "}; //输入正确uchar const Error[] = {" error "}; //输入错误uchar const codepass[] = {" pass "};uchar const LockOpen[] = {" open "}; //OPENuchar const SetNew[] = {"SetNewWordEnable"};uchar const Input[] = {"input: "}; //INPUTuchar const ResetOK[] = {"ResetPasswordOK "};uchar const initword[] = {"Init password..."};uchar const Er_try[] = {"error,try again!"};uchar const again[] = {"input again "};uchar const initpassword[6]={0,0,0,0,0,0};/************************************************************************************************* **/void port_init(){DDRA|=BIT(6);PORTA|=BIT(6);DDRB=0xFF;PORTB=0xFF;DDRC=0xFF;PORTC=0xFF;}/***********************************************************************************************/ void segg()//关数码显示管函数{DDRA|=BIT(PA3); //PA3设置为输出状态DDRA|=BIT(PA4); //PA4设置为输出状态DDRB=0xff; //PB口设置为输出状态PORTB=0xff; //发送模码PORTA|=BIT(PA3); //PA3输出高电平,DU拉高PORTA&=~BIT(PA3); //PA3输出低电平,DU拉低,段选锁存PORTB=0xff; //发送为选关掉数码管显示PORTA|=BIT(PA4); //PA4输出高电平,WE拉高PORTA&=~BIT(PA4); //PA4输出低电平,WE拉低,位选锁存DDRA|=BIT(PA2); //PA2设置为输出状态用于LED流水灯控制IO口PORTA&=~BIT(PA2); //PA2输出低电平,DU拉低,段选LED流水灯锁存}/****************************************5ms延时*************************************/void Delay5Ms(void){uint TempCyc = 5552;while(TempCyc--);}/****************************************400ms延时*************************************/void Delay400Ms(void){uchar TempCycA = 5;uint TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);}}/****************************************24C02****************************************/void mDelay(uint t) //延时{uchar i;while(t--){for(i=0;i<125;i++){;}}}/*******************************************************************************************/ void Nop(void) //空操作{_nop_();_nop_();_nop_();_nop_();}/*****************************************起始条件*****************************************/ void Start(void){//Sda=1;PORTC|=BIT(1);////Scl=1;PORTC|=BIT(0);//Nop();//Sda=0;PORTC&=~BIT(1);//Nop();}/*****************************************停止条件*****************************************/ void Stop(void){//Sda=0;PORTC&=~BIT(1);////Scl=1;PORTC|=BIT(0);//Nop();//Sda=1;PORTC|=BIT(1);//Nop();}/*****************************************应答位*****************************************/ void Ack(void){//Sda=0;PORTC&=~BIT(1);//Nop();//Scl=1;PORTC|=BIT(0);//Nop();//Scl=0;PORTC&=~BIT(0);//}/*****************************************反向应答位*****************************************/ void NoAck(void){//Sda=1;PORTC|=BIT(1);//Nop();//Scl=1;PORTC|=BIT(0);//Nop();//Scl=0;PORTC&=~BIT(0);//}/****************************发送数据子程序,Data为要求发送的数据***********************/ void Send(uchar Data){uchar BitCounter=8;uchar temp;do{temp=Data;//Scl=0;PORTC&=~BIT(0);//Nop();if((temp&0x80)==0x80)//Sda=1;PORTC|=BIT(1);else//Sda=0;PORTC&=~BIT(1);////Scl=1;PORTC|=BIT(0);//temp=Data<<1;Data=temp;BitCounter--;}while(BitCounter);//Scl=0;PORTC&=~BIT(0);//}/********************读一字节的数据,并返回该字节值************************************/ uchar Read(void){uchar temp=0;uchar temp1=0;uchar BitCounter=8;//Sda=1;PORTC|=BIT(1);//do{//Scl=0;PORTC&=~BIT(0);//Nop();//Scl=1;PORTC|=BIT(0);//Nop();//if(Sda)if(PORTC&0xF2)/////////////temp=temp|0x01;elsetemp=temp&0xfe;if(BitCounter-1){temp1=temp<<1;temp=temp1;}BitCounter--;}while(BitCounter);return(temp);}/****************************************************************************************/ void WrToROM(uchar Data[],uchar Address,uchar Num){uchar i;uchar *PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0xa0);Ack();Send(Address+i);Ack();Send(*(PData+i));Ack();Stop();mDelay(20);}}/********************************************************************************/void RdFromROM(uchar Data[],uchar Address,uchar Num){uchar i;uchar *PData;PData=Data;for(i=0;i<Num;i++){Start();Send(0xa0);Ack();Send(Address+i);Ack();Start();Send(0xa1);Ack();*(PData+i)=Read();//Scl=0;PORTC&=~BIT(0);NoAck();Stop();}}//**********************************LCD1602*********************************************//#define yi 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)//*********************************************************************************************// void delay(uint xms)//延时函数,有参函数{uint x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);}/**********************************写指令****************************************/ write_1602com(uchar com)//****液晶写入指令函数****{PORTD&=~BIT(4);////数据/指令选择置为指令PORTD&=~BIT(5);////读写选择置为写PORTB=com;//送入数据delay(1);PORTD|=BIT(6);//拉高使能端,为制造有效的下降沿做准备delay(1);PORTD&=~BIT(6);//en由高变低,产生下降沿,液晶执行命令}/**********************写数据*****************************************************/ write_1602dat(uchar dat)//***液晶写入数据函数****{PORTD|=BIT(4);//////数据/指令选择置为数据PORTD&=~BIT(5);////读写选择置为写PORTB=dat;//送入数据delay(1);PORTD|=BIT(6);////en置高电平,为制造下降沿做准备delay(1);PORTD&=~BIT(6);////en由高变低,产生下降沿,液晶执行命令}/************************************初始化***************************************/ void lcd_init(void){write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);//开显示不显示光标write_1602com(0x06);//整屏不移动,光标自动右移write_1602com(0x01);//清显示}/*******************************************将按键值编码为数值*************************/ uchar coding(uchar m){uchar k;switch(m){case (0x18): k=1;break;case (0x28): k=2;break;case (0x48): k=3;break;case (0x88): k='A';break;case (0x14): k=4;break;case (0x24): k=5;break;case (0x44): k=6;break;case (0x84): k='B';break;case (0x12): k=7;break;case (0x22): k=8;break;case (0x42): k=9;break;case (0x82): k='C';break;case (0x11): k='*';break;case (0x21): k=0;break;case (0x41): k='#';break;case (0x81): k='D';break;}return(k);}/******************************按键检测并返回按键值*************************************/ uchar keynum(void){uchar row,col,i;DDRD=0x0F;PORTD=0xF0;//KeyRead=PIND; //读取键盘结果//KeyRead&=0x0f; //屏蔽高四位//if((P1&0xf0)!=0xf0)if((PIND&0xf0)!=0xf0){Delay5Ms();Delay5Ms();if((PIND&0xf0)!=0xf0){row=PIND^0xf0; //确定行线i=0;PORTD=a[i];////精确定位while(i<4){if((PIND&0xf0)!=0xf0){col=~(PIND&0xff); //确定列线break; //已定位后提前退出}else{i++;PORTD=a[i];}}}else{return 0;}while((PORTD&0xf0)!=0xf0);return (row|col); //行线与列线组合后返回}else return 0; //无键按下时返回0}/********************************一声提示音,表示有效输入*************************************/ void OneAlam(void){PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//}/*********************************二声提示音,表示操作成功*********************************/void TwoAlam(void){PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//Delay5Ms();PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//}/*******************************三声提示音,表示错误************************************/ void ThreeAlam(void){PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//Delay5Ms();PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//Delay5Ms();PORTA&=~BIT(6);//Delay5Ms();PORTA|=BIT(6);//}/*****************显示输入的N个数字,用H代替以便隐藏*************************************/ void DisplayOne(void){// DisplayOneChar(9+N,1,'*');write_1602com(yi+5+N);write_1602dat('*');}/***********************************显示提示输入**************************************/ void DisplayChar(void){unsigned char i;if(pass==1){//DisplayListChar(0,1,LockOpen);write_1602com(er);for(i=0;i<16;i++){write_1602dat(LockOpen[i]);}}else{if(N==0){//DisplayListChar(0,1,Error);write_1602com(er);for(i=0;i<16;i++){write_1602dat(Error[i]);}}else{//DisplayListChar(0,1,start_line);write_1602com(er);for(i=0;i<16;i++){write_1602dat(start_line[i]);}}}}/**************************************************************************************/ void DisplayInput(void){uchar i;if(CorrectCont==1){//DisplayListChar(0,0,Input);write_1602com(er);for(i=0;i<16;i++){write_1602dat(Input[i]);}}}/******************************************重置密码*******************************/ void ResetPassword(void){uchar i;uchar j;if(pass==0){pass=0;DisplayChar();ThreeAlam();}else{if(ReInputEn==1){if(N==6){ReInputCont++;if(ReInputCont==2){for(i=0;i<6;){if(TempPassword[i]==InputData[i]) //将两次输入的新密码作对比i++;else{//DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j<16;j++){write_1602dat(Error[j]);}ThreeAlam(); //错误提示pass=0;ReInputEn=0; //关闭重置功能,ReInputCont=0;DisplayChar();break;}}if(i==6){//DisplayListChar(0,1,ResetOK);write_1602com(er);for(j=0;j<16;j++){write_1602dat(ResetOK[j]);}TwoAlam(); //操作成功提示WrToROM(TempPassword,0,6); //将新密码写入24C02存储///////// ReInputEn=0;}ReInputCont=0;CorrectCont=0;}else{OneAlam();//DisplayListChar(0, 1, again); //显示再次输入一次write_1602com(er);for(j=0;j<16;j++){write_1602dat(again[j]);}for(i=0;i<6;i++){TempPassword[i]=InputData[i]; //将第一次输入的数据暂存起来}}N=0; //输入数据位数计数器清零}}}}/****************************输入密码错误超过三过,报警并锁死键盘********************************/ void Alam_KeyUnable(void){PORTD=0x00;//{PORTA^=BIT(6);//Delay5Ms();}}/*************************************取消所有操作***********************/void Cancel(void){uchar i;uchar j;//DisplayListChar(0, 1, start_line);write_1602com(er);for(j=0;j<16;j++){write_1602dat(start_line[j]);}TwoAlam(); //提示音for(i=0;i<6;i++){InputData[i]=0;}PORTB|=BIT(7);//关闭锁PORTA|=BIT(6);//报警关operation=0; //操作标志位清零pass=0; //密码正确标志清零ReInputEn=0; //重置输入充许标志清零ErrorCont=0; //密码错误输入次数清零CorrectCont=0; //密码正确输入次数清零ReInputCont=0; //重置密码输入次数清零PORTB|=BIT(5);s3_keydown=0;key_disable=0;N=0; //输入位数计数器清零}/*******************************确认键,并通过相应标志位执行相应功能************************/ void Ensure(void){uchar i,j;RdFromROM(CurrentPassword,0,6); //从24C02里读出存储密码if(N==6){if(ReInputEn==0) //重置密码功能未开启{for(i=0;i<6;){if(CurrentPassword[i]==InputData[i]){i++;}else{ErrorCont++;if(ErrorCont==3) //错误输入计数达三次时,报警并锁定键盘{write_1602com(er);for(i=0;i<16;i++){write_1602dat(Error[i]);}doAlam_KeyUnable();while(1);}else{TIMSK|=BIT(2); //开启定时key_disable=1; //锁定键盘pass=0;break;}}}if(i==6){CorrectCont++;if(CorrectCont==1) //正确输入计数,当只有一次正确输入时,开锁,{//DisplayListChar(0,1,LockOpen);write_1602com(er);for(j=0;j<16;j++){write_1602dat(LockOpen[j]);}TwoAlam(); //操作成功提示音PORTB&=~BIT(7);//开锁///////////////////////////////////pass=1; //置正确标志位TIMSK|=BIT(2); //开启定时/////////////////////////PORTB&=~BIT(5);//开锁指示灯亮//////////////////////////////for(j=0;j<6;j++) //将输入清除{InputData[i]=0;}}else//当两次正确输入时,开启重置密码功能{//DisplayListChar(0,1,SetNew);write_1602com(er);for(j=0;j<16;j++){write_1602dat(SetNew[j]);}TwoAlam(); //操作成功提示ReInputEn=1; //允许重置密码输入CorrectCont=0; //正确计数器清零}}else//============当第一次使用或忘记密码时可以用131420对其密码初始化{if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&& (InputData[5]==0)){WrToROM(initpassword,0,6); //强制将初始密码写入24C02存储//DisplayListChar(0,1,initword); //显示初始化密码write_1602com(er);for(j=0;j<16;j++){write_1602dat(initword[j]);}TwoAlam();Delay400Ms();TwoAlam();N=0;}else{//DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j<16;j++){write_1602dat(Error[j]);}ThreeAlam(); //错误提示音pass=0;}}}else//当已经开启重置密码功能时,而按下开锁键,{//DisplayListChar(0,1,Er_try);write_1602com(er);for(j=0;j<16;j++){write_1602dat(Er_try[j]);}ThreeAlam();}}else{//DisplayListChar(0,1,Error);write_1602com(er);for(j=0;j<16;j++){write_1602dat(Error[j]);}ThreeAlam(); //错误提示音pass=0;}N=0; //将输入数据计数器清零,为下一次输入作准备operation=1;}/********************************************************************************************/ void main(void){uchar KEY,NUM;uchar i,j;segg();port_init();Delay400Ms(); //启动等待,等LCM讲入工作状态lcd_init(); //LCD初始化write_1602com(yi);//日历显示固定符号从第一行第0个位置之后开始显示PORTD=0xFF;TCCR1B=0X05;//1024分频//5msTCNT1H=0XFF;//TCNT1L=0XC5;//TIMSK|=BIT(2);SREG|=BIT(7);for(i=0;i<16;i++){write_1602dat(name[i]);//向液晶屏写日历显示的固定符号部分}write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示for(i=0;i<16;i++){write_1602dat(start_line[i]);//写显示时间固定符号,两个冒号}write_1602com(er+9); //设置光标位置write_1602com(0x0f); //设置光标为闪烁Delay5Ms(); //延时片刻(可不要)N=0; //初始化数据输入位数while(1){if(key_disable==1)Alam_KeyUnable();elsePORTA|=BIT(6); //关报警KEY=keynum();if(KEY!=0){if(key_disable==1){second=0;}else{NUM=coding(KEY);{switch(NUM){case ('A'): ; break;case ('B'): ; break;case ('C'): ; break;case ('D'): ResetPassword(); break; //重新设置密码case ('*'): Cancel(); break; //取消当前输入case ('#'): Ensure(); break; //确认键,default:{//DisplayListChar(0,1,Input);write_1602com(er);for(i=0;i<16;i++){write_1602dat(Input[i]);}operation=0;if(N<6) //当输入的密码少于6位时,接受输入并保存,大于6位时则无效。

密码锁说明书通用

密码锁说明书通用

密码锁说明书通用摘要:一、密码锁的简介二、密码锁的使用方法1.安装密码锁2.设置密码3.开锁与关锁三、密码锁的维护与注意事项1.维护方法2.注意事项四、密码锁的常见问题及解决方法1.无法开锁2.密码错误3.电池电量低正文:【密码锁的简介】密码锁是一种高科技的锁具,它采用数字密码作为开启方式,相较于传统钥匙锁,密码锁更安全、便捷。

用户只需正确输入设置好的密码,即可轻松开锁。

目前,密码锁已被广泛应用于家庭、办公室、酒店等场所。

【密码锁的使用方法】1.【安装密码锁】在购买密码锁后,首先需要将其安装在门上。

一般来说,密码锁的安装过程并不复杂,只需按照说明书上的指引,将锁具的螺丝孔与门上的螺丝孔对齐,然后用螺丝固定即可。

2.【设置密码】安装好密码锁后,需要设置一个密码。

通常,密码锁的设置步骤如下:a.确保电池电量充足;b.按住锁具上的“设置”键,直到指示灯闪烁;c.按照屏幕上的提示,输入初始密码,通常为“000”或“123”;d.输入新密码,确保密码长度在6-12 位之间,并牢记密码。

3.【开锁与关锁】在设置好密码后,即可通过输入密码来开锁与关锁。

开锁时,只需在锁具的数字键盘上输入正确密码,然后按下“开锁”键;关锁时,则在数字键盘上输入密码后,按下“关锁”键。

【密码锁的维护与注意事项】1.【维护方法】为了确保密码锁的正常使用,需要定期对其进行清洁与保养。

首先,用潮湿的布擦拭锁具表面,以保持其清洁;其次,检查电池电量,确保电池能够正常供电;最后,检查锁芯是否正常,如有异样,及时联系售后服务。

2.【注意事项】在使用密码锁的过程中,需注意以下几点:a.避免用硬物撞击锁具,以免损坏;b.请勿将密码告知他人,以防他人恶意使用;c.请勿将密码设置为过于简单的数字,如“123456”等,以防他人轻易猜到;d.若发现密码锁有异常,请及时联系售后服务。

【密码锁的常见问题及解决方法】1.【无法开锁】如果密码锁无法开锁,可能是以下原因:a.密码错误;b.电池电量低;c.锁芯故障。

密码锁控制说明书

密码锁控制说明书

一、题目:密码锁控制二、任务要求:1、密码锁由4x4键盘和LCD显示器组成。

2、其基本功能为:(1)使用LCD显示器来显示密码输入的相关信息(2)可以设置4位数字(0-9)密码;(3)内定另一组4位数字密码为‘1234’;(4)密码输入正确则继电器启动2s,密码输入错误则发出警报声。

程序执行后工作指示灯LED亮,表示程序开始执行,LCD 显示“PASSWORD A OR B KEY”,按下操作键A或B动作如下:操作键A:设置新的4位数字密码,操作键B:输入4位数字密码并做检查。

三、组内成员:绪论单片机自二十世纪七十年代问世以来,以其极高的性能价格比受到人们的重视和关注,应用广泛,发展快。

由于其的优点多而突出,所以其的应用领域极广,几乎到了无孔不入的地步。

在我国广泛的应用于工业自动化控制、自动检测、智能仪表、智能家用电器、航空航天系统和国防军事、尖端武器等各个方面。

可以采用软硬件结合的办法提高系统的性能的控制技术为微控技术。

LCD 液晶显示器是Liquid Crystal Display 的简称,是20世纪70年代初发展起来的一种液晶显示器。

随着技术的发展其的分辨率、屏幕发光颜色等进入批量化合实用化。

随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。

本系统由单片机系统、矩阵键盘、LCD显示和报警系统组成。

系统能完成开锁、报警、修改用户密码基本的密码锁的功能。

本文详细阐述了个模块的功能以及它们之间的联系。

一、单片机概述采用以8051为核心的单片机控制方案。

利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。

其原理如图所示。

图2-2单片机控制方案2、单片机80511>、芯片8051有40条引脚,共分为端口线、电源线和控制线三类·4并行I/O端口,每个端口有8条端口线,用于传送数据、地址。

基于AT24C02的简易电子密码锁说明书

基于AT24C02的简易电子密码锁说明书

湖南理工学院单片微机原理课程设计说明书设计题目:基于AT24C02的简易电子密码锁院部:机械学院专业:机械电子工程组长姓名: 学号:组员姓名:学号:学号:学号:起迄日期: 2016 年 6月19日 2016 年 6月 30日指导教师:教研室主任:目录1 引言 (4)1.1 电子密码锁简介 (4)1.2 电子密码锁的发展趋势 (4)1.3 本设计所要实现的目标 (5)2 设计方案的选择 (5)2.1 方案一:采用数字电路控制方案 (5)2.2 方案二:采用无线遥控方式控制方案 (5)2.3 方案三:采用以单片机为核心的控制方案 (5)3 主要元器件介绍 (6)3.1 主控芯片AT89S51 (6)3.1.1 AT89S51性能简介 (6)3.1.2 AT89S51引角功能说明 (7)3.2 存储芯片AT24C02 (9)3.3 LCD1602显示器 (10)3.3.1 接口信号说明 (10)3.3.2 主要技术参数 (11)3.3.3 基本操作程序 (11)3.4 晶体振荡器 (12)4 系统硬件构成 (12)4.1 设计原理 (12)4.2 电路总体构成 (13)4.3 键盘输入部分 (13)4.4 密码存储部分 (14)4.5 复位部位 (15)4.6 晶振部分 (15)4.7 显示部分 (15)4.8 报警部分.......................................17Error! Bookmark not defined.4.9 开锁部分.......................................18 Error! Bookmark not defined.5 系统软件设计.....................................19 Error! Bookmark not defined.6 总结.............................................22Error! Bookmark not defined.参考文献............................................23Error! Bookmark not defined.附录一..............................................23Error! Bookmark not defined.附录二 .............................................33 Error! Bookmark not defined.1 引言1.1 电子密码锁简介电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

电子密码锁使用说明

电子密码锁使用说明

电子密码锁使用说明一、开启准备:1.通电后密码自动扫描检测,显示屏出现(ALL READY)并进入待机状态,按“#”键开启液晶及线路板进入工作状态。

二、开启:1.插入门锁钥匙,转动至限位,按(#)键唤醒显示屏,输入正确的用户密码1234或管理密码123456,按“#”确认,屏显“OPEN”且屏幕点亮。

2.在6秒钟内向右转动手柄,往外拉开箱门即可,(注:无手柄顺时针旋转钥匙即可。

)(1)输入密码时间超过10秒钟,则显示屏将熄灭,此时重复上述程序重新输入。

(2)若密码输入错误在确认可用“*”键单个键除。

长按2秒可以全部删除以前输入数字。

(3)若输入错误密码,则显示屏显示“ERROR”,并重新切换到待输入状态,若连续三次输入错误,报警1分钟。

输入正确密码可解除报警。

三、密码设置:本产品可以同时设置用户密码和管理密码两组密码,本产品出厂时已经设置,为确安全,请您务必使用前重新设置两组密码。

1.个人密码设置(1)按换码开关一次,显示屏点亮并显示(---------),表示可设置个人密码。

(2)输入你所需要密码,1-8位任意数。

按“#”键确认,屏显示“INTO”,即个人密码输入成功。

2.管理密码设置(1)按“#”键显示屏点亮并显示(---------)。

(2)按“0”两次,再按换码开关一次,显示(---------),表示可设置管理密码。

(3)任意输入1-8位的密码后,按“#”键确认,屏显示“INTO”,即管理密码输入成功。

四、隐码功能:在使用时只显示“—”不出现数字,具体操作方法如下:1.先按“#”键启动电源后,再按“*”键一次,此时输入密码只显示“—”。

2.开启后,自动恢复数字显示。

五、报警功能:1.错误报警密码连续输入三次错误屏幕出现“---------”光标,并报警一分钟,如输入正确密码可解除警报。

2.震动报警在省电状态下,按“0”键一次,屏幕显示“BELL-ON”并进入报警状态,一旦箱体受到外力震动倾斜或冲击,即可马上报警,此时如输入密码即可解除报警,并出现“OPEN”六、更换电池:当显示屏左下方电池显示只剩下一格时,需尽快更换电池。

基于单片机的密码锁 4位数码管+24c02+蜂鸣器

基于单片机的密码锁 4位数码管+24c02+蜂鸣器

基于单片机的密码锁
------4位数码管+24C02+蜂鸣器
本系统是基于单片机的密码锁,用户可以通过按键输入4位密码,系统会把用户输入的密码跟之前储存在系统的密码进行比较(出厂默认密码“1234”),如果一致则蜂鸣器发出”滴滴“,数码管显示“YESS”,如果输入错误蜂鸣器发出”滴“,数码管显示“NO”,连续输入三次错误密码,系统自动锁定,数码管显示“dead”,蜂鸣器常鸣,需按复位键从新进入系统。

输入正确密码进入后,用户可以设置新的密码,设置完之后按“确定”键,进入输入密码状态。

上电后,显示“CODE”,等待输入密码:
密码输入正确后提示:
密码输入错误提示:
输入错误3次提示:
详情参照:
/item.htm?spm=a1z10.1.w8789017464.21 .catC8u&id=23157508996。

第八章 基于AT24C02的电子密码锁的设计

第八章 基于AT24C02的电子密码锁的设计
2 2
图 8-7 应答信号时序
六、I2C 总线的传送格式
I2C 总线的传送格式为主从式, 对系统中的某一器件来说有四种工作方式: 主发送方式、 从发送方式、主接收方式、从接收方式。 单片机发送 24C02 接收为主发送方式。 主器件产生开始信号以后, 发送的第一个字节为控制字节。 前七位为从器件的地址片选 信号。最低位为数据传送方向位(高电平表示读从器件,低电平表示写从器件) ,然后发送 一个选择从器件片内地址的字节,来决定开始读写数据的起始地址。接着再发送数据字节, 可以是单字节数据,也可以是一组数据,由主器件来决定。从器件每接收到一个字节以后, 都要返回一个应答信号(ASK=0) 。主器件在应答时钟周期高电平期间释放 SDA 线,转由从器 件控制,从器件在这个时钟周期的高电平期间必须拉低 SDA 线,并使之为稳定的低电平,作 为有效的应答信号。
第八章 基于 AT24C02 的电子密码锁的设计
8.1 硬件电路的设计
图 8-1 AT24C02 硬件电路
备注:SCL、SDA 引脚需要接 10K 的上拉电阻,学习板上,所有引脚都也接 10K 上拉电阻。
8.2 I C 总线的 AT24C02 存储器简介
一、什么是 I2C 总线
I C 总线(Inter Integrated Circuit Bus) :是 Philips 公司推出的串行总线标准(为 二线制) 。总线上扩展的外围器件及外设接口通过总线寻址,是具备总线仲裁和高低速设备 同步等功能的高性能多主机总线。 串行数据线 SDA 和串行时钟线 SCL 构成的,可发送和接收数据。 2 2 所有挂接在 I C 总线上的器件和接口电路都应具有 I C 总线接口,且所有的 SDA/SCL 同名端 相连。总线上所有器件要依靠 SDA 发送的地址信号寻址,不需要片选线。 特点:组成系统结构简单,占用空间小,芯片管脚的数量少,无需片选信号,价格低。 允许若干兼容器件共享总线, 应用比较广泛。 总线的长度可达 7.6m, 传送速度可达 400kbps, 2 标准速率为 100kbps。支持多个组件。支持多主控器件(某时刻只能有一个主控器件) 。I C 总线上所有设备的 SDA, SCL 引脚必须外接上拉电阻。

基于AT24C02电子密码锁的设计

基于AT24C02电子密码锁的设计

单片机应用课程设计设计题目:基于AT24C02电子密码锁的设计目录1 设计任务....................... 错误!未定义书签。

2 系统总体方案设计............... 错误!未定义书签。

2.1各个模块方案论证............ 错误!未定义书签。

2.1.1 芯片选择................ 错误!未定义书签。

2.1.2 显示器的选择............ 错误!未定义书签。

2.2总体方案设计................ 错误!未定义书签。

3 硬件电路设计................... 错误!未定义书签。

3.1单片机最小系统.............. 错误!未定义书签。

3.2AT24C20储存密码电路........ 错误!未定义书签。

3.3矩阵键盘电路 (6)3.4液晶显示电路 (6)4 系统软件设计................... 错误!未定义书签。

4.1主程序流程图 (7)4.2子程序流程图 (8)4.2.1 AT24C20子程序流程图 (8)4.2.2 1602子程序流程图 (9)5实物调试....................... 错误!未定义书签。

5.1实性物能分析 (9)6心得体会....................... 错误!未定义书签。

附录1 ........................... 错误!未定义书签。

(1)系统总电路图 (15)(2)系统仿真图 (15)附录2 ........................... 错误!未定义书签。

(1)程序清单 .................. 错误!未定义书签。

1.设计任务基本要求:采用AT24C02与单片机STC89C52相结合设计电子密码锁,然后通过矩阵键盘按键进行密码的输入、清除、更改、开锁等功能。

2.系统总体方案设计2.1各个模块方案讨论2.1.1芯片选择由于设计的是电子密码锁,而单片机AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。

根据AT24C02的简单电子密码锁使用说明

根据AT24C02的简单电子密码锁使用说明

湖南理工学院单片微机原理课程设计说明书设计题目:基于AT24C02的简易电子密码锁院部:机械学院专业:机械电子工程组长姓名: 学号:组员姓名:学号:学号:学号:起迄日期:2016 年6月19日2016 年6月30日指导教师:教研室主任:目录1 引言 (4)1.1 电子密码锁简介 (4)1.2 电子密码锁的发展趋势 (4)1.3 本设计所要实现的目标 (5)2 设计方案的选择 (5)2.1 方案一:采用数字电路控制方案 (5)2.2 方案二:采用无线遥控方式控制方案 (5)2.3 方案三:采用以单片机为核心的控制方案 (5)3 主要元器件介绍 (6)3.1 主控芯片AT89S51 (6)3.1.1 AT89S51性能简介 (6)3.1.2 AT89S51引角功能说明 (7)3.2 存储芯片AT24C02 (9)3.3 LCD1602显示器 (10)3.3.1 接口信号说明 (10)3.3.2 主要技术参数 (11)3.3.3 基本操作程序 (11)3.4 晶体振荡器 (12)4 系统硬件构成 (12)4.1 设计原理 (12)4.2 电路总体构成 (13)4.3 键盘输入部分 (13)4.4 密码存储部分 (14)4.5 复位部位 (15)4.6 晶振部分 (15)4.7 显示部分 (15)4.8 报警部分.......................................17错误!未定义书签。

4.9 开锁部分.......................................18 错误!未定义书签。

5 系统软件设计.....................................19 错误!未定义书签。

6 总结.............................................22错误!未定义书签。

参考文献............................................23错误!未定义书签。

电子密码锁产品说明书

电子密码锁产品说明书

目录第一章电子密码锁简单结构图 (1)➢锁面结构图 (1)➢把手锁体结构图 (1)➢通用锁体结构图 (2)➢配件 (2)第二章操作说明 (3)➢独立式开锁 (3)➢关锁 (3)➢开放式锁 (3)➢密码修改 (3)1. 密码修改 (3)2. 管理密码修改 (3)第三章产品功能参数 (4)➢产品主要功能 (4)1. 声音提示功能: (4)2. 灯光提示功能: (4)3. 应急开门功能: (4)4. 低压报警功能: (4)5.密码位数: 1-10位 (4)6.密码清零: (4)7.多级密码管理: (4)8.密码保护功能: (4)9.读取柜锁信息功能:(此为可选功能) (5)➢工作环境 (5)工作温度: (5)➢产品性能指标 (5)使用次数:10万次以上 (5)电控部分: (5)第四章安装使用 (5)➢安装 (5)➢使用 (6)第五章保养售后 (6)➢常见故障排除指南 (6)➢定期保养一览表 (7)➢服务电话............................................................................................错误!未定义书签。

第一章电子密码锁简单结构图➢锁面结构图➢把手锁体结构图➢通用锁体结构图➢配件名称用途是否为标准配件备注外接电源欠压应急开锁按比例标配连接USB接口供电自弹锁扣实现自动开门可选弹性耐力强普通锁扣关锁卡住锁舌标配人性化设计拉杆头防撬设计钢柜选用可选镀亮铬拉杆支撑拉杆头可选镀彩锌工艺铆片固定锁体安装可选使安装变得简单铆钉固定锁体安装可选方便焊接固定锁体螺丝固定标配自攻或丝攻第二章操作说明➢独立式开锁输入您所设定的最新密码1~10位(如没有修改则使用出厂密码”0”),开锁灯开始闪亮(绿色灯)向下扳动把手(如图1)再向外拉把手就可以打开锁。

➢关锁输入设定的密码,开门灯开始闪亮(绿色灯),向内推把手至门板与柜体重合,再向上扳动(如图2)把手即可锁门(如无把手则推至门关状态即可)➢开放式锁开放式密码锁出厂时,用户密码为“0”;用户密码设置:客户需在开锁状态下自行设置任意1—10位密码,按“#”键关门锁定;开门时,需用用户设定的密码进行开锁,开门时绿灯开始闪亮。

密码锁说明书

密码锁说明书

湄洲湾职业技术学院密码锁说明书系别:自动化工程系年级: 10级专业:电气自动化姓名:张佳佳学号:1101010139 导师姓名:梁锋林职称:讲师2013年 5月27日1 前言............................................. 错误!未定义书签。

2 系统设计技术参数要求............................. 错误!未定义书签。

3 系统设计......................................... 错误!未定义书签。

3.1 系统设计总体框图........................... 错误!未定义书签。

3.2各模块原理说明 ............................. 错误!未定义书签。

3.3系统总原理图说明 ........................... 错误!未定义书签。

3.4系统印刷电路板的制作图 ..................... 错误!未定义书签。

3.5系统的操作说明 ............................. 错误!未定义书签。

3.6系统操作注意事项 ........................... 错误!未定义书签。

参考文献........................................... 错误!未定义书签。

致谢词............................................. 错误!未定义书签。

附录............................................ 错误!未定义书签。

附录1 系统整体原理图 ........................... 错误!未定义书签。

附录2 系统印刷电路板的制作图 ................... 错误!未定义书签。

附录3元件清单.................................. 错误!未定义书签。

电子密码锁AT24C02C驱动程序

电子密码锁AT24C02C驱动程序

void start()// 开始位{SDA = 1; //SDA初始化为高电平“1”SCL = 1; //开始数据传送时,要求SCL为高电平“1”_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期SDA = 0; //SDA的下降沿被认为是开始信号_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期SCL = 0; //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)}/***************************************************函数功能:结束数据传送***************************************************/void stop()// 停止位{SDA = 0; //SDA初始化为低电平“0”_nSCL = 1; //结束数据传送时,要求SCL为高电平“1”_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期SDA = 1; //SDA的上升沿被认为是结束信号_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期SDA=0;SCL=0;}/***************************************************函数功能:从A T24Cxx读取数据出口参数:x***************************************************/unsigned char ReadData()// 从A T24Cxx移入数据到MCU{unsigned char i;unsigned char x; //储存从A T24Cxx中读出的数据for(i = 0; i < 8; i++){SCL = 1; //SCL置为高电平x<<=1; //将x中的各二进位向左移一位x|=(unsigned char)SDA; //将SDA上的数据通过按位“或“运算存入x中SCL = 0; //在SCL的下降沿读出数据}return(x); //将读取的数据返回}/***************************************************函数功能:向A T24Cxx的当前地址写入数据入口参数:y (储存待写入的数据)***************************************************///在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0bit WriteCurrent(unsigned char y){unsigned char i;bit ack_bit; //储存应答位for(i = 0; i < 8; i++) // 循环移入8个位{SDA = (bit)(y&0x80); //通过按位“与”运算将最高位数据送到S//因为传送时高位在前,低位在后_nop_(); //等待一个机器周期SCL = 1; //在SCL的上升沿将数据写入A T24Cxx_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期SCL = 0; //将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲y <<= 1; //将y中的各二进位向左移一位}SDA = 1; // 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线,//以让SDA线转由接收设备(A T24Cxx)控制_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期SCL = 1; //根据上述规定,SCL应为高电平_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期_nop_(); //等待一个机器周期ack_bit = SDA; //接受设备(A T24Cxx)向SDA送低电平,表示已经接收到一个字节//若送高电平,表示没有接收到,传送异常SCL = 0; //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)return ack_bit; // 返回A T24Cxx应答位}/***************************************************函数功能:向A T24Cxx中的指定地址写入数据入口参数:add (储存指定的地址);dat(储存待写入的数据)***************************************************/void WriteSet(unsigned char add, unsigned char dat)// 在指定地址addr处写入数据WriteCurrent{start(); //开始数据传递WriteCurrent(OP_WRITE); //选择要操作的A T24Cxx芯片,并告知要对其写入数据WriteCurrent(add); //写入指定地址WriteCurrent(dat); //向当前地址(上面指定的地址)写入数据stop(); //停止数据传递delay(4); //1个字节的写入周期为1ms, 最好延时1ms以上}/***************************************************函数功能:从A T24Cxx中的当前地址读取数据出口参数:x (储存读出的数据)***************************************************/unsigned char ReadCurrent(){unsigned char x;start(); //开始数据传递WriteCurrent(OP_READ); //选择要操作的A T24Cxx芯片,并告知要读其数据x=ReadData(); //将读取的数据存入xstop(); //停止数据传递return x; //返回读取的数据}/***************************************************函数功能:从A T24Cxx中的指定地址读取数据入口参数:set_addr出口参数:x***************************************************/unsigned char ReadSet(unsigned char set_addr)// 在指定地址读取{start(); //开始数据传递WriteCurrent(OP_WRITE); //选择要操作的A T24Cxx芯片,并告知要对其写入数据WriteCurrent(set_addr); //写入指定地址return(ReadCurrent()); //从指定地址读出数据并返回}。

电子密码锁说明书

电子密码锁说明书

电子密码锁说明书Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】电子密码锁摘要:电子密码锁自身有着很高的安全性并且成本低、功耗小、操作简单等优点。

在很多的安全领域内具有技术和报警功能的的数字密码锁已经逐渐取代了传统的钥匙式机械锁并且克服了机械式密码锁的密码数量少、修改不方便等劣,使密码锁在性能及技术上都有了很大程度上的提升。

该电子密码锁由四部分组成,密码设定及输入电路、报警电路、计时电路和电源电路。

也可以划分为三大模块即密码设定及输入模块、计时报警模块、电源模块。

其中密码设定及输入模块是通过触发器来设定密码并且进行输入,计时报警模块是用计数器来计用户输入密码的时间若超时即通过555来实现报警,最后电源电路是用来给上述模块供电。

这就是该电子密码锁的主要结构。

关键词:计数器,触发器,555定时器,密码锁Abstract:Electronic cipher lock with safety and low cost, low power consumption, simple operation and so on high. In the field of security many skilled and alarm functions of digital password lockhas been gradually replaced the traditional mechanical lock key and overcomes the number of mechanical cipher lock password less, it is not convenient to modify the bad, make the cipher lock in performance and technology have been improved digital password lock is composed of four parts,the password settings and input circuit, alarm circuit, a timing circuit and a power circuit. Also can be divided into three major modules: password setting and input module, alarm module, power password setting and input module is the trigger to set a passwordand enter, timing alarm module is counter to the user to enter apassword if the timeout time by 555 to achieve the alarm, the power supply circuit is used to give the module power supply. This is the main structure of the digital password lock.Keywords:Counter, trigger, 555 timer, password lock目录1前言 (1)目的及意义 (1)技术要求 (1)国内外概况 (1)要解决的问题 (1)2总体方案设计 (2)方案比较 (2)方案论证 (3)方案选择 (3)3单元模块设计 (4)各单元模块功能介绍及电路设计 (4)电路元件选择和参数计算 (10)特殊器件的介绍 (11)各单元模块的联接 (13)4系统调试 (14)仿真电路总图 (14)系统仿真参数设置 (14)功能调试 (15)5系统功能、指标参数 (22)系统能实现的功能 (22)系统指标参数测试 (22)系统功能及指标参数分析 (22)6结论 (24)7总结与体会 (25)8致谢 (26)9参考文献 (27)附录 (28)1前言在人们的日常生活和工作中, 房屋住宅的安全防范、办公室的文件档案、财务报表以及其他一些个人资料的保存通常都会使用锁来进行保护。

单片机电子密码锁(可以修改设置密码)——基于51单片机AT24C02LCD1602显示

单片机电子密码锁(可以修改设置密码)——基于51单片机AT24C02LCD1602显示

单片机电子密码锁 <可以修改设置密码)——基于51单片机与AT24C02与LCD1602显示其电路图连接如下:本人已经用硬件实验,程序可用。

正确~~本程序特点:装载后读者可以自改密码,然后需要再次载入程序时:可以把主程序aa=Sendstring(0xa0,1,table2,6>。

这一句去掉。

然后程序的电子锁密码就是你个人设置的密码。

程序代码为:#include<reg51.h>#include<string.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define LCDIO P2#define delay4us(> _nop_(>。

_nop_(>。

_nop_(>。

_nop_(>。

uchar buffer[6]={0}。

sbit sda=P3^7。

sbit scl=P3^6。

sbit beep=P3^5。

bit flag=0,aa。

//用户蹲渊义定时溢出标志位uchar DSY_BUFFER[16]=" "。

uchar DSY_BUFFER1[16]=" "。

uchar Userpassword[6]={0}。

sbit rs=P0^4。

sbit rd=P0^3。

sbit lcden=P0^2。

sbit led=P3^0。

uchar code table2[]="123456"。

uchar code table[]="Your Password..."。

void delayms(uint z>{uint x,y。

for(x=z。

x>0。

x-->for(y=110。

y>0。

y-->。

}void delay(> //短延时,两个机器周期,做总线的延时用{。

基于AT24C02的简易电子密码锁说明书

基于AT24C02的简易电子密码锁说明书

湖南理工学院单片微机原理课程设计说明书设计题目:基于AT24C02的简易电子密码锁院部:机械学院专业:机械电子工程组长姓名: 学号:组员姓名:学号:学号:学号:起迄日期: 2016 年 6月19日 2016 年 6月 30日指导教师:教研室主任:目录1 引言、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、41、1 电子密码锁简介、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、41、2 电子密码锁的发展趋势、、、、、、、、、、、、、、、、、、、、、、、、、、41、3 本设计所要实现的目标、、、、、、、、、、、、、、、、、、、、、、、、、、52 设计方案的选择、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、52、1 方案一:采用数字电路控制方案、、、、、、、、、、、、、、、、、、52、2 方案二:采用无线遥控方式控制方案、、、、、、、、、、、、、、52、3 方案三:采用以单片机为核心的控制方案、、、、、、、、、、53 主要元器件介绍、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、63、1 主控芯片AT89S51、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、63、1、1 AT89S51性能简介、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、63、1、2 AT89S51引角功能说明、、、、、、、、、、、、、、、、、、、、、、、、、、3、2 存储芯片AT24C02、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、93、3 LCD1602显示器、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、103、3、1 接口信号说明、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、103、3、2 主要技术参数、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、113、3、3 基本操作程序、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、113、4 晶体振荡器、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、124 系统硬件构成、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、124、1 设计原理、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、124、2 电路总体构成、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、134、3 键盘输入部分、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、134、4 密码存储部分、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、144、5 复位部位、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、4、6 晶振部分、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、154、7 显示部分、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、154、8 报警部分、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、17错误!未定义书签。

基于24c02和lcd液晶显示的电子密码锁(原创)-使用说明书

基于24c02和lcd液晶显示的电子密码锁(原创)-使用说明书

基于24c02和lcd液晶显示的电子密码锁(原创)-使用说明书基于24c02和lcd液晶显示的电子密码锁(原创)-使用说明书第一届Proteus仿真设计竞赛参赛作品基于24C02和LCD液晶显示的电子密码锁(原创) 作者:曾荣泉(广东海洋大学信息学院,湛江,524088)使用说明书2007年5月4日(青年节)于广东海洋大学主校区海景公寓B座516室第一章系统的启动电子密码锁启动时,系统提示:“Input code”,即提示请输入密码,如图1-1所示。

图1-1 系统提示输入密码第二章密码输入及功能选择用4行*3列小键盘(如图2-1所示)输入6位密码(密码限于0-9),如图2-2所示。

如果密码输入正确,则显示如图2-3所示功能选择菜单:按1打开密码锁(这里用LED变亮表示)并退出系统,按2修改密码锁的密码。

图2-1 小键盘图2-2 输入密码图2-3 功能选择菜单进入功能选择菜单后,如果按下1号键,LED就变亮,表示电子密码锁打开并退出系统,返回如图1-1所示的输入密码界面。

如果按下2号键则进入修改密码锁密码的功能,下面将会介绍修改密码部分。

第三章修改系统密码进入功能选择菜单并按下2号键后,进入修改密码锁密码的功能,提示:“Input new code”即提示输入新密码,如图3-1所示。

输入6位新密码后则提示:“Confirm new code”,即提示确认新密码,如图3-2所示。

如果两次输入的密码一致,则显示:“Modify code OK”,即修改密码成功,并返回如图2-3所示的上一级功能选择菜单;如果两次输入的密码不一致,则显示:“Modify code fail”,即修改密码失败,并返回如图2-3所示的上一级功能选择菜单。

图3-1 输入新密码图3-2 确认新密码第四章系统安全性—密码输入有误报警如果密码输入不正确,则显示:“Input error”,即显示输入错误,然后提示:“Input code again”即提示再次输入密码,如图4-1所示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖南理工学院单片微机原理课程设计说明书设计题目:基于AT24C02的简易电子密码锁院部:机械学院专业:机械电子工程组长姓名: 学号:组员姓名:学号:学号:学号:起迄日期: 2016 年 6月19日 2016 年 6月 30日指导教师:教研室主任:目录1 引言 (4)1.1 电子密码锁简介 (4)1.2 电子密码锁的发展趋势 (4)1.3 本设计所要实现的目标 (5)2 设计方案的选择 (5)2.1 方案一:采用数字电路控制方案 (5)2.2 方案二:采用无线遥控方式控制方案 (5)2.3 方案三:采用以单片机为核心的控制方案 (5)3 主要元器件介绍 (6)3.1 主控芯片AT89S51 (6)3.1.1 AT89S51性能简介 (6)3.1.2 AT89S51引角功能说明 (7)3.2 存储芯片AT24C02 (9)3.3 LCD1602显示器 (10)3.3.1 接口信号说明 (10)3.3.2 主要技术参数 (11)3.3.3 基本操作程序 (11)3.4 晶体振荡器 (12)4 系统硬件构成 (12)4.1 设计原理 (12)4.2 电路总体构成 (13)4.3 键盘输入部分 (13)4.4 密码存储部分 (14)4.5 复位部位 (15)4.6 晶振部分 (15)4.7 显示部分 (15)4.8 报警部分.......................................17错误!未定义书签。

4.9 开锁部分.......................................18 错误!未定义书签。

5 系统软件设计.....................................19 错误!未定义书签。

6 总结.............................................22错误!未定义书签。

参考文献............................................23错误!未定义书签。

附录一..............................................23错误!未定义书签。

附录二 .............................................33 错误!未定义书签。

1 引言1.1 电子密码锁简介电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。

现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。

其性能和安全性已大大超过了机械锁。

其特点如下:1) 保密性好,编码量多,远远大于弹子锁。

随机开锁成功率几乎为零。

2) 密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。

3) 误码输入保护,当输入密码多次错误时,报警系统自动启动。

4) 无活动零件,不会磨损,寿命长。

5) 使用灵活性好,不像机械锁必须佩带钥匙才能开锁。

6) 电子密码锁操作简单易行,一学即会。

1.2 电子密码锁的发展趋势在日常生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。

目前门锁主要用弹子锁,其钥匙容易丢失;保险箱主要用机械密码锁,其结构较为复杂,制造精度要求高,成本高,且易出现故障,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。

针对这些锁具给人们带来的不便若使用机械式钥匙开锁,为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。

它的出现为人们的生活带来了很大的方便,有很广阔的市场前景。

由于电子器件所限,以前开发的电子密码锁,其种类不多,保密性差,最基本的就是只依靠最简单的模拟电子开关来实现的,制作简单但很不安全,在后为多是基于EDA 来实现的,其电路结构复杂,电子元件繁多,也有使用早先的20引角的2051系列单片机来实现的,但密码简单,易破解。

随着电子元件的进一步发展,电子密码锁也出现了很多的种类,功能日益强大,使用更加方便,安全保密性更强,由以前的单密码输入发展到现在的,密码加感应元件,实现了真真的电子加密,用户只有密码或电子钥匙中的一样,是打不开锁的,随着电子元件的发展及人们对保密性需求的提高出现了越来越多的电子密码锁。

出于安全、方便等方面的需要许多电子密码锁已相继问世。

但这类产品的特点是针对特定有效卡、指纹或声音有效,且不能实现远程控制,只能适用于保密要求高且供个人使用的箱、柜、房间等。

由于数字、字符、图形图像、人体生物特征和时间等要素均可成为钥匙的电子信息,组合使用这些信息能够使电子防盗锁获得高度的保密性,如防范森严的金库,需要使用复合信息密码的电子防盗锁,这样对盗贼而言是“道高一尺、魔高一丈”。

组合使用信息也能够使电子防盗锁获得无穷扩展的可能,使产品多样化,对用户而言是“千挑百选、自得其所”。

可以看出组合使用电子信息是电子密码锁以后发展的趋势。

1.3 本设计所要实现的目标该密码锁初次使用时的原始密码为123456,用户输入正确的密码信息则能够发出开锁信号。

功能要求:1、能够修改密码。

只有输入原设定的正确密码后才能修改密码。

2、三次输入开锁密码错误,则启动报警。

3、显示按键信息,而且要有按键音。

4、系统设0~9十个数字键,一个密码修改键,一个确认键。

按下密码修改键,先输入原密码,解密正确后键入新密码,按确认键生效。

解密错误启动报警,5秒钟后报警自动解除。

技术要求:1、系统停电后,密码信息不会丢失,上电后仍能正常执行开锁操作。

2、系统安全可靠,不会出现死机现象。

3、密级<106。

2 设计方案的选择2.1 方案一:采用数字电路控制方案用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过10秒(一般情况下,用户不会超过10秒,若用户觉得不便,还可以修改)电路将报警20秒,若电路连续报警三次,电路将锁定键盘2分钟,防止他人的非法操作。

采用数字电路设计的方案好处就是设计简单但控制的准确性和灵活性差。

故不采用。

2.2 方案二:采用无线遥控方式控制方案采用无线电磁波发射模式,此方案的优点在于遥控距离更远,也无需要对准电子锁的位置,但是缺点就是由于本设计是要求设计成为一个一键式发射解锁方式,这样就容易造成无意识的解锁,比如说孩子,或者是自己在无意识的情况下进行了解锁,不利于电子锁的安全防盗。

2.3 方案三:采用以单片机为核心的控制方案由于单片机种类繁多,各种型号都有其一定的应用环境,因此在选用时要多加比较,合理选择,以期获得最佳的性价比。

一般来说在选取单片机时从下面几个方面考虑:性能、存储器、运行速度、I/O口、定时/计数器、串行接口、模拟电路功能、工作电压、功耗、封装形式、抗干扰性、保密性,除了以上的一些的还有一些最基本的比如:中断源的数量和优先级、工作温度范围、有没有低电压检测功能、单片机内有无时钟振荡器、有无上电复位功能等。

在开发过程中单片机还受到:开发工具、编程器、开发成本、开发人员的适应性、技术支持和服务等等因素。

基于以上因素本设计选用单片机AT89S51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。

在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接AT24C02芯片用于密码的存储,外接LCD1602显示器用于显示作用。

当用户需要开锁时,先按键盘开锁键之后按键盘的数字键0-9输入密码。

密码输完后按下确认键,如果密码输入正确则开锁,不正确显示密码错误重新输入密码,当三次密码错误则发出报警;当用户需要修改密码时,先按下键盘设置键后输入原来的密码,只有当输入的原密码正确后才能设置新密码。

新密码输入无误后按确认键使新密码将得到存储,密码修改成功。

可以看出方案三控制灵活准确性好且保密性强还具有扩展功能,根据现实生活的需要此次设计采用此方案。

3 主要元器件介绍3.1 主控芯片AT89S51AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

3.1.1 AT89S51性能简介AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。

空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。

同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。

图3-1 AT89S51PDIP封装引脚图其主要功能特性:兼容MCS-51指令系统4k可反复擦写(>1000次)ISP Flash ROM32个双向I/O口 4.5-5.5V工作电压2个16位可编程定时/计数器时钟频率0-33MHz全双工UART串行中断口线128x8 bit内部RAM2个外部中断源低功耗空闲和省电模式中断唤醒省电模式3级加密位看门狗(WDT)电路软件设置空闲和省电功能灵活的ISP字节和分页编程双数据寄存器指针可以看出AT89S51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时器/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟。

同时, AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU 的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式何在RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直接到一个硬件复位。

相关文档
最新文档