欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于51单片机的密码锁设计程序.docx

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

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

    基于51单片机的密码锁设计程序.docx

    1、基于51单片机的密码锁设计程序#include 1302.hvoid write_ds1302_byte(uchar dat) uchar i。 for(i=0。i1。 uchar read_ds1302_byte() uchar i。 for(i=0。i1。 ACC7=T_IO。 T_CLK=1。 T_CLK=0。 return (ACC)。 void write_ds1302_dat(uchar addr,uchar dat) T_EN=0。 T_CLK=0。 T_EN=1。 write_ds1302_byte(addr)。 write_ds1302_byte(dat)。 T_CLK=1。

    2、 T_EN=0。uchar read_ds1302_data(uchar addr) uchar date。 T_EN=0。 T_CLK=0。 T_EN=1。 write_ds1302_byte(addr)。 date=read_ds1302_byte()。 T_EN=0。 T_CLK=0。 return (date)。void set_real_time(uchar *pclock) uchar i,addr=0x80。 EA=0。 write_ds1302_dat(0x8e,0x00)。 for(i=0。i7。i+) write_ds1302_dat(addr,*pclock)。 pclo

    3、ck+。 addr+=2。 / write_ds1302_dat(0x8e,0x80)。 EA=1。 void get_real_time(uchar Curtime) uchar j。 uchar address=0x81。 EA=0。 for(j=0。j7。j+) Curtimej=read_ds1302_data(address)。 address+=2。 EA=1。#ifndef _1302_H_#define _1302_H_#include #include#define uchar unsigned char#define uint unsigned intsbit T_IO=P

    4、25。sbit T_CLK=P24。sbit T_EN=P10。sbit ACC0=ACC0。sbit ACC7=ACC7。void write_ds1302_byte(uchar dat)。uchar read_ds1302_byte()。void write_ds1302_dat(uchar addr,uchar dat)。uchar read_ds1302_data(uchar addr)。void set_real_time(uchar *pclock)。void get_real_time(uchar Curtime)。#endif #include delay.h #include

    5、 1602.hvoid lcd_busy_wait() /*LCD1602 忙等待*/ lcd_rs_port = 0。 lcd_rw_port = 1。 lcd_en_port = 1。 lcd_data_port = 0xff。 while (lcd_data_port&0x80)。 lcd_en_port = 0。 void write_com(uchar command) /*LCD1602 命令字写入*/ lcd_busy_wait()。 lcd_rs_port = 0。 lcd_rw_port = 0。 lcd_en_port = 0。 lcd_data_port = comman

    6、d。 lcd_en_port = 1。 lcd_en_port = 0。 void write_data(uchar dat) lcd_busy_wait()。 lcd_rs_port=1。 lcd_rw_port =0。 lcd_en_port=0。 P0=dat。 lcd_en_port=1。 lcd_en_port=0。void wtite_lcd_1602_dat(uchar x_pos,uchar y_pos,uchar dat) x_pos&=0x0f。 y_pos&=0x01。 if(y_pos=0) x_pos=x_pos+0x80。 else x_pos=x_pos+0x80

    7、+0x40。 write_com(x_pos)。 lcd_busy_wait()。 lcd_rs_port=1。 lcd_rw_port=0。 lcd_en_port=0。 P0=dat。 lcd_en_port=1。 lcd_en_port=0。 void lcd_init() /*LCD1602 初始化*/ lcd_delay(20)。 write_com(0x38)。 lcd_delay(100)。 write_com(0x38)。 lcd_delay(50)。 write_com(0x38)。 lcd_delay(10)。 write_com(0x08)。 write_com(0x01

    8、)。 write_com(0x06)。 write_com(0x0c)。 lcd_data_port = 0xff。 /*释放数据端口*/#ifndef _1602_H_#define _1602_H_#include #include#define uchar unsigned char#define uint unsigned intsbit lcd_rs_port=P35。sbit lcd_rw_port=P36。sbit lcd_en_port=P34。#define lcd_data_port P0void lcd_busy_wait()。void write_com(uchar c

    9、ommand)。void write_data(uchar dat)。void wtite_lcd_1602_dat(uchar x_pos,uchar y_pos,uchar dat)。void lcd_init()。#endif#include 2402.h#include delay.hvoid i2c_start() scl=1。 delay1()。 sda=1。 delay1()。 sda=0。 delay1()。void i2c_stop() sda=0。 delay1()。 scl=1。 delay1()。 sda=1。 delay1()。void i2c_ack() uchar

    10、 i。 scl=1。 delay1()。 while(sda=1)&(i250) i+。 scl=0。 delay1()。 void i2c_nack() scl=1。 delay1()。 sda=1。 scl=0。 delay1()。 void i2c_write_byte(uchar date)/ / uchar i,temp。 temp=date。 for(i=0。i8。i+)/ / temp=temp1。/ scl=0。 / delay1()。 / sda=CY。/ delay1()。/ scl=1。/ / scl=0。 / delay1()。/ sda=1。/ delay1()。/

    11、/uchar i2c_read_byte() uchar i,temp=0。 scl=0。/ delay1()。/ sda=1。 delay1()。 for(i=0。i8。i+) temp=temp1。 scl=1。 delay1()。 temp=temp|sda。 scl=0。 delay1()。 return (temp)。void write_at2404(uchar addr,uchar dat) i2c_start()。 i2c_write_byte(0xa0)。 i2c_ack()。 i2c_write_byte(addr)。 i2c_ack()。 i2c_write_byte(d

    12、at)。 i2c_ack()。 i2c_stop()。 delay3(5000)。uchar read_at2402(uchar addr) uchar temp。 i2c_start()。 i2c_write_byte(0xa0)。 i2c_ack()。 i2c_write_byte(addr)。 i2c_ack()。 i2c_start()。 i2c_write_byte(0xa1)。 i2c_ack()。 temp=i2c_read_byte()。 i2c_nack()。 i2c_stop()。 return (temp)。 #ifndef _2402_H_#define _2402_H

    13、_#include #include#define uchar unsigned char#define uint unsigned intsbit scl=P21。sbit sda=P20。void i2c_start()。void i2c_stop()。void i2c_ack()。void i2c_nack()。void i2c_write_byte(uchar)。uchar i2c_read_byte()。/void write_at2404(uchar addr,uchar dat)。uchar read_at2402(uchar addr)。#endif#includedelay.

    14、hvoid delay(uchar x) uchar a,b。 for(a=x。a0。a-) for(b=200。b0。b-)。void lcd_delay(uchar ms) uchar j。 while(ms-) for(j=0。j250。j+) 。 void delay1() 。 。void delay3(uint q) uint e。 for(e=0。eq。e+)。#ifndef _DELAY_H_#define _DELAY_H_#include #include#define uchar unsigned char#define uint unsigned intvoid dela

    15、y(uchar x)。void lcd_delay(uchar ms)。void delay1()。void delay3(uint m)。#endif#include display.hvoid display() P0=0。 dula=1。 dula=0。 P0=0x7f。 wela=1。 wela=0。#ifndef _DISPLAY_H_#define _DISPLAY_H_#include #include#define uchar unsigned char#define uint unsigned intsbit dula=P26。sbit wela=P27。void displ

    16、ay()。#endif#include delay.h/一般放在最前面 这个前后由调用先后决定着#include scan.h#include 1602.h/extern void write_data(uchar dat)。/extern void write_com(uchar command)。uchar key。uchar temp,count,aa,bb,cc。 /*一般将这些变量定义在C文件中 当主函数需要时用extern引用 */bit shu_flag,modify_flag,rst。bit fun_flag。 /功能键标志位 没使用bit down_flag,up_flag,

    17、open_flag。void keyscan() P1=0xfe。 temp=P1。 temp=temp&0xf0。 if(temp!=0xf0) delay(15)。 if(temp!=0xf0) temp=P1。 switch(temp) case 0xee: key=0。shu_flag=1。write_data(*)。 count+。if(count6) count=0。aa=0。bb=0。cc=0。break。 case 0xde: key=1。shu_flag=1。write_data(*)。 count+。if(count6) count=0。aa=0。bb=0。cc=0。bre

    18、ak。 case 0xbe: key=2。shu_flag=1。write_data(*)。 count+。if(count6) count=0。aa=0。bb=0。cc=0。break。 case 0x7e: key=3。shu_flag=1。write_data(*)。 count+。if(count6) count=0。aa=0。bb=0。cc=0。break。 while(temp!=0xf0) temp=P1。 temp=temp&0xf0。 / beep=0。 delay(500)。 / beep=1。 / write_data(*)。count+。 while(temp!=0xf

    19、0)。 temp=P1。 temp=temp&0xf0。 P1=0xfd。 temp=P1。 temp=temp&0xf0。 if(temp!=0xf0) delay(15)。 if(temp!=0xf0) temp=P1。 switch(temp) case 0xed: shu_flag=1。key=4。write_data(*)。 count+。if(count6) count=0。aa=0。bb=0。cc=0。break。 /aa,bb,cc定时器中使用 case 0xdd: shu_flag=1。key=5。write_data(*)。 /每次按键清零 count+。if(count6

    20、) count=0。aa=0。bb=0。cc=0。break。 /保证在按键器件不会自动返回 case 0xbd: shu_flag=1。key=6。write_data(*)。 / count+。if(count6) count=0。aa=0。bb=0。cc=0。break。 case 0x7d: shu_flag=1。key=7。write_data(*)。 count+。if(count6) count=0。aa=0。bb=0。cc=0。break。 while(temp!=0xf0) temp=P1。 temp=temp&0xf0。/ beep=0。 delay(500)。 / 松手检

    21、测 屏蔽蜂鸣器 噪音污染 / beep=1。 / write_data(*)。count+。 P1=0xfb。 temp=P1。 temp=temp&0xf0。 if(temp!=0xf0) delay(15)。 if(temp!=0xf0) temp=P1。 switch(temp) /fun_flag 功能键标志位 case 0xeb: key=8。 shu_flag=1。write_data(*)。 count+。if(count6) count=0。aa=0。bb=0。cc=0。break。 case 0xdb: key=9。 shu_flag=1。write_data(*)。 cou

    22、nt+。if(count6) count=0。aa=0。bb=0。cc=0。break。 case 0xbb: modify_flag=1。fun_flag=1。aa=0。bb=0。cc=0。break。 /修改键 case 0x7b: rst=1。fun_flag=1。aa=0。bb=0。cc=0。break。 /返回键 while(temp!=0xf0) temp=P1。 temp=temp&0xf0。 / beep=0。 delay(500)。 / beep=1。 P1=0xf7。 temp=P1。 temp=temp&0xf0。 if(temp!=0xf0) delay(15)。 if

    23、(temp!=0xf0) temp=P1。 switch(temp) /清除键 case 0xe7: /key=12。shu_flag=1。break。 aa=0。bb=0。cc=0。 switch(count) case 1: write_com(0x80+0x40+5)。write_data( )。write_com(0x80+0x40+5)。break。 case 2: write_com(0x80+0x40+6)。write_data( )。write_com(0x80+0x40+6)。break。 case 3: write_com(0x80+0x40+7)。write_data(

    24、)。write_com(0x80+0x40+7)。break。 case 4: write_com(0x80+0x40+8)。write_data( )。write_com(0x80+0x40+8)。break。 case 5: write_com(0x80+0x40+9)。write_data( )。write_com(0x80+0x40+9)。break。 case 6: write_com(0x80+0x40+0x0a)。write_data( )。write_com(0x80+0x40+0x0a)。break。 case 0xd7: key=13。up_flag=1。fun_flag=

    25、1。aa=0。bb=0。cc=0。break。 /开门键 case 0xb7: key=14。down_flag=1。fun_flag=1。aa=0。bb=0。cc=0。break。 case 0x77: key=13。open_flag=1。fun_flag=1。aa=0。bb=0。cc=0。break。 while(temp!=0xf0) temp=P1。 temp=temp&0xf0。/ beep=0。 delay(500)。 / beep=1。 if(count0) count-。break。 /清除数字 #ifndef _SCAN_H_#define _SCAN_H_#include

    26、 #include#define uchar unsigned char#define uint unsigned intvoid keyscan()。#endif/* 名称:电子密码锁 时间:2014年8月2日 16:33:48 WRITE BY:Kengkeng Today is Valentines Day 程序功能: 1 :开机1302显示时间,按下key15:开门键 进入输入密码界面 2 :输入密码 输入错误超过三次 电子锁锁死 倒计时60s之后重新设置 蜂鸣器快速响 3 :输入正确 进入菜单页面 两个选择 key13:开门 key10:修改密码 4 :修改已输入密码 可由key12键清除 重新输入 5 :选择key13开门 打开继电器 显示倒计时15s开门 蜂鸣器慢响 提示15s内开门 否则15后关门 关闭继电器 并自动返回时间页面 6 :选择key10修改密码 共两次 两次密码一致时设置成功 否则会一直提示输入密码 7 :修改地密码存入2402中 上电读出 8 :修改密码 无限循环 直到输入正确为止 可以使用key11:返回键 返回 9 :在10s内无任何按键按下时 自动返回时间页面 可重新进入 10:在20s内无任何按键按下时 进入


    注意事项

    本文(基于51单片机的密码锁设计程序.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开