欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    AT89C51单片机电子密码锁njz.docx

    • 资源ID:62677551       资源大小:94.80KB        全文页数:57页
    • 资源格式: DOCX        下载积分:30金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要30金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    AT89C51单片机电子密码锁njz.docx

    基于ATT89CC51单单片机电电子密码码锁#inccludde"maiin.hh"/* LCDD PAART STAART */ /55ms延延时voidd Deelayy5Mss(vooid)unssignned inttTemmpCyyc = 55552;whiile(TemmpCyyc-);/读状状态unsiigneed ccharr ReeadSStattusLLCM(voiid)LCM_Datta = 0xxFF; LCMM_RSS = 0;LCMM_RWW = 1;LCMM_E = 00;LCMM_E = 00;LCMM_E = 11;Dellay55Ms();whiile (LCCM_DDataa & Bussy); /检测忙忙信号retturnn(LCCM_DDataa);/写数数据voidd WrriteeDattaLCCM(uunsiigneed ccharr WDDLCMM)ReaddStaatussLCMM(); /检测忙忙LCM_Datta = WDDLCMM;LCMM_RSS = 1;LCMM_RWW = 0;LCMM_E = 00; /若晶晶振速度度太高可可以在这这后加小小的延时时LCMM_E = 00; /延时时LCMM_E = 11;/写指指令voidd WrriteeCommmanndLCCM(uunsiigneed ccharr WCCLCMM,BuuysCC) /BuuysCC为0时忽略略忙检测测if (BuuysCC) ReeadSStattusLLCM(); /根根据需要要检测忙忙LCM_Datta = WCCLCMM;LCMM_RSS = 0;LCMM_RWW = 0; LCMM_E = 00;LCMM_E = 00;LCMM_E = 11; /读数数据unsiigneed ccharr ReeadDDataaLCMM(vooid)LCMM_RSS = 1; LCMM_RWW = 1;LCMM_E = 00;LCMM_E = 00;LCMM_E = 11;retturnn(LCCM_DDataa);voidd LCCMInnit(voiid) /LLCM初初始化LCM_Datta = 0;WritteCoommaandLLCM(0x338,00); /三三次显示示模式设设置,不不检测忙忙信号Dellay55Ms(); WritteCoommaandLLCM(0x338,00);Dellay55Ms(); WritteCoommaandLLCM(0x338,00);Dellay55Ms(); WritteCoommaandLLCM(0x338,11); /显显示模式式设置,开始要要求每次次检测忙忙信号WritteCoommaandLLCM(0x008,11); /关关闭显示示WritteCoommaandLLCM(0x001,11); /显显示清屏屏WritteCoommaandLLCM(0x006,11); / 显示光光标移动动设置WritteCoommaandLLCM(0x00C,11); / 显示开开及光标标设置/按指指定位置置显示一一个字符符,x表示示列,YY表示行行voidd LCCD_wwritte_ccharr(unnsiggnedd chhar X,uunsiigneed ccharr Y, unnsiggnedd chhar DDaata)Y &&= 00x1;X &&= 00xF; /限制X不能大大于155,Y不能大大于1if (Y) X |= 00x400; /当要要显示第第二行时时地址码码+0xx40;X |= 00x800; / 算算出指令令码WritteCoommaandLLCM(X, 0); /这里不不检测忙忙信号,发发送地址址码WritteDaataLLCM(DDaata);/按指指定位置置显示一一串字符符voidd LCCD_wwritte_sstriing(unssignned chaar XX,unnsiggnedd chhar Y, unnsiggnedd chhar codde *DDaata)unssignned chaar LListtLenngthh;ListtLenngthh = 0;Y &&= 00x1;X &&= 00xF; /限制X不能大大于155,Y不能大大于1whiile (*DDDatta) /若若到达字字串尾则则退出'00'就是是0if (X <= 0xFF) /X坐坐标应小小于0xxFLCD_wriite_chaar(XX,Y, *DDDatta); /显示单单个字符符DDatta+; X+;/*/#inccludde<rreg552.hh>#inccludde<mmathh.h>>#deffinee uccharr unnsiggnedd chhar#deffinee uiint unssignned intt/* LCDD PAART STAART */voidd deelayy(uiint z) /延延时uinttx,yy;forr(x=z;xx>0;x-)forr(y=1244;y>>0;yy-);sbitt e=P25;sbittrw=PP266;sbittsr=PP277;uchaar ccodee naame=""zxss"uchaar ccodee naame11="zccf"uchaar ccodee naame22="zxx"voidd wrritee_coom(uchhar comm)intrrs;rs=00;P0=comm;dellay(5);e=11;dellay(5);e=00;voidd wrritee_daata(uchhar datte)intrrs;rs=11;P0=datte;dellay(5);e=11;dellay(5);e=00;voidd innit()e=00;rw=00;writte_ccom(0x338);writte_ccom(0x00c);writte_ccom(0x006);writte_ccom(0x001);writte_ccom(0x880);voidd diispllay()uchaari;forr(i=0;i<33;i+)writte_ddataa(naamei);writte_ccom(0x880+00x400);forr(i=0;i<33;i+)writte_ddataa(naame11i);voidd maain()initt();dissplaay();#inccludde <<AT889X551.hh> #deffinee uccharr uunsiigneed ccharruchaarsttarbbuf10;uchaarwoordbbuf8;uchaar ppw88=1,22,3,4,55,6,7,88;uchaarpwwbuff8;uchaar ccounnt=00; / 初始没没有输入入密码,计计数器设设为0uchaarinnputtflaag=00;/ 先处于于密码输输入状态态,非密密码修改改状态bit entterfflagg=0; / 没有按按下确认认键bit pwfflagg=0; / 密码码标志先先置为00sbitt waarn=P36;#deffinee lccd_ddataa PP0sbittrs=PP277;sbittrw=PP266;sbitt e=P25;/LCCD16602驱驱动程序序/voidd deelayy_16602(unssignned intti) wwhille(ii-); voidd ennrw()rs=00;rw=00; ee=0; ddelaay_116022(2550); ee=1;writte_ddataa(uchhar c)lcd_datta=cc;rs=11;rw=00; ee=0; ddelaay_116022(2550); ee=1;initt_lccd(vvoidd)/初始化化lcd_datta=00x011;/清屏幕幕enrww();lcd_datta=00x388;/数据长长度为88位,双行显显示,55*7字字符。enrww();lcd_datta=00x0cc;/打开显显示开关关enrww();lcd_datta=00x066;/地址计计数递增增,显示示屏不移移动enrww();writte_ccmd(uchhar m)/写命命令,注注意与写写数据的的区别 lcd_datta=mm;enrww();dispplayy(uccharrroww,uccharrcollum,uchhar *s)/行行列字符写字字符串,简简单的指指针应用用uchaar pp; iif(rrow=1) p=0x882+ccoluum-11; eelsee p=0xCC0+ccoluum-11;writte_ccmd(p); ffor(;*ss!=''0''s+)writte_ddataa(*ss);voidd lccd_ddispplayy( uunsiigneed ccharr a, unnsiggnedd chhar b,uunsiigneed ccharr i) /行行列数swiitchh (ii)casse 00: diispllay( a,b, "0"") ;breeak;/* 0 */casse 11: diispllay( a,b, "1"") ;breeak;/* 1 */casse 22: diispllay( a,b, "2"") ;breeak;/* 2 */casse 33: diispllay( a,b, "3"") ;breeak;/* 3 */casse 44: diispllay( a,b, "4"") ;breeak;/* 4 */casse 55: diispllay( a,b, "5"") ;breeak;/* 5 */casse 66: diispllay( a,b, "6"") ;breeak;/* 6 */casse 77: diispllay( a,b, "7"") ;breeak;/* 7 */casse 88: diispllay( a,b, "8"") ;breeak;/* 8 */casse 99: diispllay( a,b, "9"") ;breeak;/* 9 */deffaullt: breeak;/* 键键消抖延延时函数数 */voidd deelayy(unnsiggnedd innti)int j; ffor(;i>>0;ii-) foor(jj=0;j<1100;j+);/* 键键扫描函函数 */uchaarkeeysccan(voiid)uchaarsccanccodee,tmmpcoode;P1 = 00xf00;/ 发全0行扫描描码if (PP1&00xf00)!=0xff0)/ 若有键键按下dellay(2);/ 延时去去抖动if (PP1&00xf00)!=0xff0)/ 延时后后再判断断一次,去去除抖动动影响scanncodde = 0xxfe; /第一行行变低whiile(sccanccodee&0xx10)!=00)/ 逐行扫扫描P1 = sscanncodde;/ 输出行行扫描码码if (PP1&00xf00)!=0xff0)/ 本行有有键按下下tmpccodee = (P11&0xxf0)|0xx0f;/* 返回特特征字节节码,为为1的位即即对应于于行和列列 */retturnn(scaancoode)+(tmppcodde);elsse sscanncodde = (sscanncodde<<<1)|0x001;/ 行扫描描码左移移一位retturnn(0);/ 无键按按下,返返回值为为0 /* 密密码比较较函数 */bit pwccmp(voiid)bitt fllag;uchaari;forr (ii=0;i<88;i+)if (pwwi=pwbbufi)flaag = 1;elsseflaag = 0;i=88;retturnn(fllag);/* 密密码清除除函数 */voidd pwwclkk(unnsiggnedd chhar k)unssignned chaar ii;forr (ii=0;i<88;i+)worddbuffi = 0;/ 数码管管显示00000000000starrbuffi = 0;if(k=0)pwbuufi = 0;/ 用FFFFFFFF清除已已经输入入的密码码elsse ppwii = 0;/ 用FFFFFFFF清除已已经输入入的密码码/* 按按键声响响函数 */voidd allarmm() unnsiggnedd chhar i; foor(ii=0;i<2200;i+) warrn=!warrn;dellay(1); /* 密密码报警警函数 */voidd allarmm1() unnsiggnedd innti; foor(ii=0;i<220000;i+) warrn=!warrn;dellay(1); /* 呼呼叫报警警函数 */voidd allarmm2() unnsiggnedd chhar i=112; unnsiggnedd chhar a,bb; whhilee(i>>0) foor(aa=0;a<1150;a+) warrn=!warrn;dellay(1); foor(bb=0;b<1150;b+) waarn=!waarn; deelayy(2); i-; /* 按按键处理理函数 */voidd keey_ccondductt(unnsiggnedd chhar a,uunsiigneed ccharr b) swwitcch(aa)casse 00x111:/ 1行1列,数数字0if (coountt<8)if(b=0)starrbuffcoountt = '*'/ 对应密密码位上上显示''*'pwbuufccounnt = 00;elsse pwcouunt = 0;worddbuffcoountt = 0;lcd_dissplaay(22,coountt+1,worrdbuufccounnt);couunt+; allarmm();breeak;casse 00x211:/ 1行2列,数数字1if (coountt<8)if(b=0)starrbuffcoountt = '*'/ 对应密密码位上上显示''*'pwbuufccounnt = 11;elsse pwcouunt = 1;worddbuffcoountt = 1;lcd_dissplaay(22,coountt+1,worrdbuufccounnt);couunt+;alaarm();breeak;casse 00x411:/ 1行3列,数数字2if (coountt<8)if(b=0)starrbuffcoountt = '*'/ 对应密密码位上上显示''*'pwbuufccounnt = 22;elsse pwcouunt = 2;worddbuffcoountt = 2;lcd_dissplaay(22,coountt+1,worrdbuufccounnt);couunt+;alaarm();breeak;casse 00x811:/ 1行4列,数数字3if (coountt<8)if(b=0)starrbuffcoountt = '*'/ 对应密密码位上上显示''*'pwbuufccounnt = 33;elsse pwcouunt = 3;worddbuffcoountt = 3;lcd_dissplaay(22,coountt+1,worrdbuufccounnt);couunt+;alaarm();breeak;casse 00x122:/ 2行1列,数数字4if (coountt<8)if(b=0)starrbuffcoountt = '*'/ 对应密密码位上上显示''*'pwbuufccounnt = 44;elsse pwcouunt = 4;worddbuffcoountt = 4;lcd_dissplaay(22,coountt+1,worrdbuufccounnt);couunt+;alaarm();breeak;casse 00x222:/ 2行2列,数数字5if (coountt<8)if(b=0)starrbuffcoountt = '*'/ 对应密密码位上上显示''*'pwbuufccounnt = 55;elsse pwcouunt = 5;worddbuffcoountt = 5;lcd_dissplaay(22,coountt+1,worrdbuufccounnt);couunt+;alaarm();breeak;casse 00x422:/ 2行3列,数数字6if (coountt<8)if(b=0)starrbuffcoountt = '*'/ 对应密密码位上上显示''*'pwbuufccounnt = 66;elsse pwcouunt = 6;worddbuffcoountt = 6;lcd_dissplaay(22,coountt+1,worrdbuufccounnt);couunt+;alaarm();breeak;casse 00x822:/ 2行4列,数数字7if (coountt<8)if(b=0)starrbuffcoountt = '*'/ 对应密密码位上上显示''*'pwbuufccounnt = 77;elsse pwcouunt = 7;worddbuffcoountt = 7;lcd_dissplaay(22,coountt+1,worrdbuufccounnt);couunt+;alaarm();breeak;casse 00x144:/ 3行1列,数数字8if (coountt<8)if(b=0)starrbuffcoountt = '*'/ 对应密密码位上上显示''*'pwbuufccounnt = 88;elsse pwcouunt = 8;worddbuffcoountt = 8;lcd_dissplaay(22,coountt+1,worrdbuufccounnt);couunt+;alaarm();breeak;casse 00x244:/ 3行2列,数数字9if (coountt<8)if(b=0)starrbuffcoountt = '*'/ 对应密密码位上上显示''*'pwbuufccounnt = 99;elsse pwcouunt = 9;worddbuffcoountt = 9;lcd_dissplaay(22,coountt+1,worrdbuufccounnt);couunt+;alaarm();breeak;casse 00x444:/ 3行3列,确确认键enteerfllag = 11;/ 确认键键按下if(b=0) if (coountt=88) / 只有输输入8个密码码后按确确认键才才作密码码比较pwfllag = ppwcmmp(); elssepwfllag = 00;/ 否则直直接pmmflaag赋0pwcllk(bb); /输入密密码并判判断之后后清除 elsse if (coountt=88) / 只有输输入8个密码码后按确确认键才才作密码码比较pwfllag = 11; elsse pwfllag = 00;pwcllk(bb); breeak;casse 00x844:/ 3行4列,取取消键couunt = 00;/ 密码计计数清零零pwcllk(bb);initt_lccd();breeak;casse 00x188:/ 4行1列,密密码修改改键inpuutfllag=1;/ 进入密密码修改改模式couunt = 00;initt_lccd();breeak;casse 00x288:/ 4行2列,密密码修改改键inpuutfllag=0;/ 退出密密码修改改模式couunt = 00;initt_lccd();breeak;casse 00x488:initt_lccd();/ 关于作作品dissplaay(11,0,"Auuthoor: 083352110477HCYY"); dissplaay(22,2,"QQQ:399338884556 "");dellay(30000);initt_lccd();breeak;casse 00x888:initt_lccd();/ 清屏breeak;deffaullt: bbreaak;/* 主主程序 */voidd maain()uchaarkeey,eerroor=00;initt_lccd();whiile(1) whhilee(innputtflaag=0)/ 输入密密码模式式 dissplaay(11,0,"Innputt paasswwordd:"); dissplaay(22,0,staarbuuf); keyy = keyyscaan();/ 调用键键盘扫描描函数key_connducct(keyy,innputtflaag); if(entterfflagg=11)/ 如果按按下确认认键 enteerfllag = 00; / 标志位位置回00 ccounnt = 0;/ 密码位位计数器器清零pwcllk(inpputfflagg); iif(ppwfllag=1) / 如如果密码码输入正正确 initt_lccd(); diispllay(1,00,"CCorrrectt!");pwcllk(00); deelayy(20000); errrorr=0; eelsee initt_lccd();initt_lccd();initt_lccd(); diispllay(1,00,"PPasssworrd wwronng!""); aalarrm1(); errrorr+; wwhille(eerroor>=3)/ 如果密密码输入入错误三三次 initt_lccd();initt_lccd(); diispllay(1,00,"NNo aacceess!"); allarmm2(); wwhille(11); whhilee(innputtflaag=1) / 更更改密码码模式 dissplaay(11,0,"Neew ppasssworrd:""); keyy = keyyscaan();/ 调用键键盘扫描描函数key_connducct(keyy,innputtflaag); if(entterfflagg=11)/ 如果按按下确认认键 enteerfllag = 00; / 标志位位置回00 ccounnt = 0;/ 密码位位计数器器清零 iif(ppwfllag=1) / 如果果密码修修改正确确 inpuutfllag=0;initt_lccd(); diispllay(1,00,"CChannge finnishh!"); deelayy(20000); eelsee initt_lccd(); diispllay(1,00,"CChannge faiil!"");pwcllk(11); allarmm1(); 电路图

    注意事项

    本文(AT89C51单片机电子密码锁njz.docx)为本站会员(you****now)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开