ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:17.95KB ,
资源ID:4738725      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4738725.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(密码锁.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

密码锁.docx

1、密码锁#include #include#define LCM_Data P0#define uchar unsigned char #define uint unsigned int#define w 6 /定义密码位数sbit lcd1602_rs=P27;sbit lcd1602_rw=P26;sbit lcd1602_en=P25;sbit Scl=P34; /24C02串行时钟sbit Sda=P35; /24C02串行数据sbit ALAM = P21; /报警 sbit KEY = P36; /开锁sbit open_led=P22; /开锁指示灯bit operation=0;

2、 /操作标志位bit pass=0; /密码正确标志bit ReInputEn=0; /重置输入充许标志 bit s3_keydown=0; /3秒按键标志位bit key_disable=0; /锁定键盘标志unsigned char countt0,second; /t0中断计数器,秒计数器void Delay5Ms(void);unsigned char code a=0xFE,0xFD,0xFB,0xF7; /控盘扫描控制表unsigned char code start_line = password: ;unsigned char code name = =Coded Lock=;

3、 /显示名称unsigned char code Correct = correct ; /输入正确unsigned char code Error = error ; /输入错误unsigned char code codepass = pass ; unsigned char code LockOpen = open ; /OPENunsigned char code SetNew = SetNewWordEnable;unsigned char code Input = input: ; /INPUTunsigned char code ResetOK = ResetPasswordOK

4、 ;unsigned char code initword = Init password.;unsigned char code Er_try = error,try again!;unsigned char code again = input again ;unsigned char InputData6; /输入密码暂存区unsigned char CurrentPassword6=1,3,1,4,2,0; /当前密码值unsigned char TempPassword6;unsigned char N=0; /密码输入位数记数unsigned char ErrorCont; /错误

5、次数计数unsigned char CorrectCont; /正确输入计数unsigned char ReInputCont; /重新输入计数unsigned char code initpassword6=0,0,0,0,0,0;/=5ms延时=void Delay5Ms(void) unsigned int TempCyc = 5552; while(TempCyc-);/=400ms延时=void Delay400Ms(void) unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA-) TempCycB=7

6、269; while(TempCycB-); /=/=24C02=/=void mDelay(uint t) /延时 uchar i; while(t-) for(i=0;i125;i+) ; void Nop(void) /空操作 _nop_(); _nop_(); _nop_(); _nop_();/*起始条件*/void Start(void) Sda=1; Scl=1; Nop(); Sda=0; Nop(); /*停止条件*/void Stop(void) Sda=0; Scl=1; Nop(); Sda=1; Nop();/*应答位*/void Ack(void) Sda=0; N

7、op(); Scl=1; Nop(); Scl=0;/*反向应答位*/void NoAck(void) Sda=1; Nop(); Scl=1; Nop(); Scl=0; /*发送数据子程序,Data为要求发送的数据*/void Send(uchar Data) uchar BitCounter=8; uchar temp; do temp=Data; Scl=0; Nop(); if(temp&0x80)=0x80) Sda=1; else Sda=0; Scl=1; temp=Data1; Data=temp; BitCounter-; while(BitCounter); Scl=0;

8、/*读一字节的数据,并返回该字节值*/uchar Read(void) uchar temp=0; uchar temp1=0; uchar BitCounter=8; Sda=1; do Scl=0; Nop(); Scl=1; Nop(); if(Sda) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) temp1=temp1; temp=temp1; BitCounter-; while(BitCounter); return(temp); void WrToROM(uchar Data,uchar Address,uchar

9、Num) uchar i; uchar *PData; PData=Data; for(i=0;iNum;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;i0;x-) for(y=110;y0;y-);/-写指令-write_1602com(uchar com

10、)/*液晶写入指令函数* lcd1602_rs=0;/数据/指令选择置为指令 lcd1602_rw=0; /读写选择置为写 P0=com;/送入数据 delay(1); lcd1602_en=1;/拉高使能端,为制造有效的下降沿做准备 delay(1); lcd1602_en=0;/en由高变低,产生下降沿,液晶执行命令/-写数据-write_1602dat(uchar dat)/*液晶写入数据函数* lcd1602_rs=1;/数据/指令选择置为数据 lcd1602_rw=0; /读写选择置为写 P0=dat;/送入数据 delay(1); lcd1602_en=1; /en置高电平,为制造

11、下降沿做准备 delay(1); lcd1602_en=0; /en由高变低,产生下降沿,液晶执行命令/-初始化-void lcd_init(void) write_1602com(0x38);/设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 write_1602com(0x0c);/开显示不显示光标 write_1602com(0x06);/整屏不移动,光标自动右移 write_1602com(0x01);/清显示/=/=/=将按键值编码为数值=unsigned char coding(unsigned char m) unsigned char k; switch(m) ca

12、se (0x11): k=1;break; case (0x21): k=2;break; case (0x41): k=3;break; case (0x81): k=A;break; case (0x12): k=4;break; case (0x22): k=5;break; case (0x42): k=6;break; case (0x82): k=B;break; case (0x14): k=7;break; case (0x24): k=8;break; case (0x44): k=9;break; case (0x84): k=C;break; case (0x18): k

13、=*;break; case (0x28): k=0;break; case (0x48): k=#;break; case (0x88): k=D;break; return(k);中间部分去掉了。到时一起发你/=主函数=void main(void) unsigned char KEY,NUM; unsigned char i,j; P1=0xFF; TMOD=0x11; TL0=0xB0; TH0=0x3C; EA=1; ET0=1; TR0=0; Delay400Ms(); /启动等待,等LCM讲入工作状态 lcd_init(); /LCD初始化 write_1602com(yi);/

14、日历显示固定符号从第一行第0个位置之后开始显示 for(i=0;i16;i+) write_1602dat(namei);/向液晶屏写日历显示的固定符号部分 write_1602com(er);/时间显示固定符号写入位置,从第2个位置后开始显示 for(i=0;i16;i+) write_1602dat(start_linei);/写显示时间固定符号,两个冒号 write_1602com(er+9); /设置光标位置 write_1602com(0x0f); /设置光标为闪烁 Delay5Ms(); /延时片刻(可不要) N=0; /初始化数据输入位数 while(1) if(key_disa

15、ble=1) Alam_KeyUnable(); else ALAM=1; /关报警 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; /确认键, def

16、ault: /DisplayListChar(0,1,Input); write_1602com(er); for(i=0;i16;i+) write_1602dat(Inputi); operation=0; if(N6) /当输入的密码少于6位时,接受输入并保存,大于6位时则无效。 OneAlam(); /按键提示音 /DisplayOneChar(6+N,1,*); for(j=0;j=N;j+) write_1602com(er+6+j); write_1602dat(*); InputDataN=NUM; N+; else /输入数据位数大于6后,忽略输入 N=6; break; /*中断服务函数*void time0_int(void) interrupt 1 TL0=0xB0; TH0=0x3C; /TR0=1; countt0+; if(countt0=20) countt0=0; second+; if(pass=1) if(second=1) open_led=1; /关指示灯 TR0=0; /关定时器 TL0=0xB0; TH0=0x3C; second=0; else if(second=3) TR0=0; second=0; key_disable=0; s3_keydown=0; TL0=0xB0; TH0=0x3C; else TR0=1;

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

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