C51电子密码锁.doc
《C51电子密码锁.doc》由会员分享,可在线阅读,更多相关《C51电子密码锁.doc(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、超级密码锁、备份/*= 密码锁控制 =/*连接线图: -| LCM-51 | LCM-51|LCM-51 | - | DB0-P0.0 | DB4-P0.4 | RS-P2.0 | DB1-P0.1 | DB5-P0.5 | RW-P2.1 | DB2-P0.2 | DB6-P0.6 | E-P2.2 | DB3-P0.3 | DB7-P0.7 | VLCD接1K电阻到GND |-接口说明:1. P1口: 4x4矩阵键盘 2. P2.4 工作指示灯 3. P2.5 继电器控制端 4. P3.7 蜂鸣器控制端 5. P3.3 24c02时钟端SCL 6. P3.4 24c02数据端SDA/*接盘
2、按键说明:- | 1 | 2 | 3 | A | - - - - - - - - - - - - - | 4 | 5 | 6 | B | - - - - - - - - - - - - - | 7 | 8 | 9 | C | - - - - - - - - - - - - - | * | 0 | # | D |-注:AT89S51使用12M晶振=定义与申明=*/#include regx52.h#include string.h#include intrins.h#define uchar unsigned char#define uint unsigned int/* 引脚定义引脚#defi
3、ne LCM_RS P2_0 / 数据/命令选择信号 #define LCM_RW P2_1 / 读/写选择信号#define LCM_E P2_2 / 使能信号#define WLED P2_4 / 工作指示灯#define REL P2_5 / 继电器#define BELL P3_7 / 蜂鸣器#define SCL P3_3 / 模拟I2C串行时钟控制#define SDA P3_4 / 模拟I2C串行数据传输#define LCM_Data P0 / 显示数据端口#define AddWr 0xa0 / 1010 0000B器件地址选择及写标志#define AddRd 0xa1 /
4、 1010 0001B器件地址选择及读标志/控制字格式:/*- - - - - - - - - - - 1 0 1 0 A2 A1 A0 R/W - - - - - - - - - - - */*注:1. 前4位为I2C总线特征编码:1010 2. A2 A1 A0为24c02的地址 3. R/W=0:表示写入;R/W=1:表示读出 */* 变量定义#define Busy 0x80 / 用于检测LCM状态字中的Busy标识uchar Count,num; / 计数器uint con_30m; / 30min计数器uchar con_20s; / 10s计数器bit flag,mark,sig
5、n,mark0;/ 常用标志位bit flag1; / Choice_menu()调用标志bit signx; / 循环标志bit markx;/* 数组定义uchar code O_Password=0x30,0x30,0x30,0x30,0x30,0x30;/ 原始密码 uchar data N_Password=0x00,0x00,0x00,0x00,0x00,0x00;/ 新密码uchar data T_Password=0x00,0x00,0x00,0x00,0x00,0x00;/ 输入密码暂存/* 函数声明void Start(void); / 开始总线函数void Stop(vo
6、id); / 结束总线函数uchar Read(void); / 读一字节数据bit Send(uchar Data);/ 发送一字节数据uchar ReadCurrent(uchar Address);/ 从指定处读出一字节void WriteCurrent(uchar Data,uchar Address);/ 在指定地址处写入一字节void ReadFromROM(uchar Data,uchar Address,uchar Num);/ 从指定地址读出Num个数据void WriteToROM(uchar Data,uchar Address,uchar Num); / 从指定地址写入
7、Num个数据uchar ReadStatusLCM(void); / 读状态void LCMInit(void); / LCM初始化void WriteDataLCM(uchar WDLCM); / 写数据void WriteCommandLCM(uchar WCLCM,BuysC); / 写指令void DisplayOneChar(uchar X, uchar Y, uchar DData); / 按指定位置显示一个字符void DisplayListChar(uchar X, uchar Y, uchar code *DData); / 按指定位置显示一串字符void PasswordC
8、omparison(bit mark);/密码比较void Scan_starnumber(void);void Delay5Ms(void); / 5ms延时void Delay400Ms(void); / 400ms延时void Delay1s(void); / 1s延时void Delay_bell(void); / 蜂鸣器发音延时void DelayMs(uchar ms); / 延时 uchar Key_scan(void); / 按键扫描uchar Key_switch(void); / 按键转换函数void Choice_menu(void); / 选择菜单界面void Rese
9、t_success(void); / 复位成功提示void Pass_face(void); / 密码输入提示void Password_OK(void); / 密码输入正确提示void Welcome_face(void); / 欢迎界面void Password_ERROR(void); / 密码输入错误提示void Password_importation(void); / 密码输入void NewPassword_face(void); / 输入新密码提示void NewPassword_again(void); / 再次输入新密码提示void NewPassword_set(void
10、); / 新密码输入void NewPassword_set_again(void); / 再次输入新密码void Newpassword_OK(void); / 新密码设置成功提示void Newpassword_ERROR(void); / 新密码设置失败提示void Newpassword_comparison(void); / 新密码设置比较void Beep(void); / 蜂鸣器发音void Led_hint(void); / LED工作指示/= 主函数部分 =/* 函 数 名:void clearmen(void) 功 能:系统初始化 说 明:对系统用的标志位和定时器进行初始化
11、 入口参数:无 返 回 值:无 */void clearmen(void) flag1= 1; / Choice_menu()调用标志 signx= 1; / 循环标志 flag = 1; / 调用输入新密码提示标志位 mark = 1; / 循环标志位 markx= 1; num = 0; / 按键错误计数器 WriteToROM(O_Password,0,6); TH0=0x3C;TL0=0xB0; / 50ms定时初值 TH1=0x3C;TL1=0xB0; / 50ms定时初值 TMOD=0x11;ET0=1;TR0=0;ET1=1;TR1=0;EA=1;/* 函 数 名:main()
12、功 能:主函数 说 明:对按键和显示进行控制 入口参数:无 返 回 值:无 */void main(void) uchar Key_value; Delay400Ms(); / 启动等待,等LCM讲入工作状态 LCMInit(); / LCM初始化 Delay400Ms(); clearmen(); / 系统初始化 while(1) P1=0xf0; if(P1&0xf0)!=0xf0)&(flag1=1)&(num3) / 有键按下 Key_value=Key_switch(); / 按键扫描 if(Key_value!=0) / 的确有键按下 Choice_menu(); / 调用选择程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 电子 密码锁
限制150内