c51电子密码锁程序代码终稿学位论文Word格式.docx

上传人:b****4 文档编号:16423144 上传时间:2022-11-23 格式:DOCX 页数:39 大小:25.38KB
下载 相关 举报
c51电子密码锁程序代码终稿学位论文Word格式.docx_第1页
第1页 / 共39页
c51电子密码锁程序代码终稿学位论文Word格式.docx_第2页
第2页 / 共39页
c51电子密码锁程序代码终稿学位论文Word格式.docx_第3页
第3页 / 共39页
c51电子密码锁程序代码终稿学位论文Word格式.docx_第4页
第4页 / 共39页
c51电子密码锁程序代码终稿学位论文Word格式.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

c51电子密码锁程序代码终稿学位论文Word格式.docx

《c51电子密码锁程序代码终稿学位论文Word格式.docx》由会员分享,可在线阅读,更多相关《c51电子密码锁程序代码终稿学位论文Word格式.docx(39页珍藏版)》请在冰豆网上搜索。

c51电子密码锁程序代码终稿学位论文Word格式.docx

#defineLCM_RWP2_1//读/写选择信号

#defineLCM_EP2_2//使能信号

#defineWLEDP2_4//工作指示灯

#defineRELP2_5//继电器

#defineBELLP3_7//蜂鸣器

#defineSCLP3_3//模拟I2C串行时钟控制

#defineSDAP3_4//模拟I2C串行数据传输

#defineLCM_DataP0//显示数据端口

#defineAddWr0xa0//"

10100000B"

器件地址选择及写标志

#defineAddRd0xa1//"

10100001B"

器件地址选择及读标志

//控制字格式:

/*-----------

1010A2A1A0R/W

-----------*/

/*注:

1.前4位为I2C总线特征编码:

1010

2.A2A1A0为24c02的地址

3.R/W=0:

表示写入;

R/W=1:

表示读出*/

//***********变量定义

#defineBusy0x80//用于检测LCM状态字中的Busy标识

ucharCount,num;

//计数器

uintcon_30m;

//30min计数器

ucharcon_20s;

//10s计数器

bitflag,mark,sign,mark0;

//常用标志位

bitflag1;

//Choice_menu()调用标志

bitsignx;

//循环标志

bitmarkx;

//************数组定义

ucharcodeO_Password[]={0x30,0x30,0x30,0x30,0x30,0x30};

//原始密码"

000000"

uchardataN_Password[]={0x00,0x00,0x00,0x00,0x00,0x00};

//新密码

uchardataT_Password[]={0x00,0x00,0x00,0x00,0x00,0x00};

//输入密码暂存

//***********函数声明

voidStart(void);

//开始总线函数

voidStop(void);

//结束总线函数

ucharRead(void);

//读一字节数据

bitSend(ucharData);

//发送一字节数据

ucharReadCurrent(ucharAddress);

//从指定处读出一字节

voidWriteCurrent(ucharData,ucharAddress);

//在指定地址处写入一字节

voidReadFromROM(ucharData[],ucharAddress,ucharNum);

//从指定地址读出Num个数据

voidWriteToROM(ucharData[],ucharAddress,ucharNum);

//从指定地址写入Num个数据

ucharReadStatusLCM(void);

//读状态

voidLCMInit(void);

//LCM初始化

voidWriteDataLCM(ucharWDLCM);

//写数据

voidWriteCommandLCM(ucharWCLCM,BuysC);

//写指令

voidDisplayOneChar(ucharX,ucharY,ucharDData);

//按指定位置显示一个字符

voidDisplayListChar(ucharX,ucharY,ucharcode*DData);

//按指定位置显示一串字符

voidPasswordComparison(bitmark);

//密码比较

voidScan_starnumber(void);

voidDelay5Ms(void);

//5ms延时

voidDelay400Ms(void);

//400ms延时

voidDelay1s(void);

//1s延时

voidDelay_bell(void);

//蜂鸣器发音延时

voidDelayMs(ucharms);

//延时

ucharKey_scan(void);

//按键扫描

ucharKey_switch(void);

//按键转换函数

voidChoice_menu(void);

//选择菜单界面

voidReset_success(void);

//复位成功提示

voidPass_face(void);

//密码输入提示

voidPassword_OK(void);

//密码输入正确提示

voidWelcome_face(void);

//欢迎界面

voidPassword_ERROR(void);

//密码输入错误提示

voidPassword_importation(void);

//密码输入

voidNewPassword_face(void);

//输入新密码提示

voidNewPassword_again(void);

//再次输入新密码提示

voidNewPassword_set(void);

//新密码输入

voidNewPassword_set_again(void);

//再次输入新密码

voidNewpassword_OK(void);

//新密码设置成功提示

voidNewpassword_ERROR(void);

//新密码设置失败提示

voidNewpassword_comparison(void);

//新密码设置比较

voidBeep(void);

//蜂鸣器发音

voidLed_hint(void);

//LED工作指示

//==========================================主函数部分==================================================

/*****************************************************

函数名:

voidclearmen(void)

功能:

系统初始化

说明:

对系统用的标志位和定时器进行初始化

入口参数:

返回值:

*****************************************************/

{

flag1=1;

signx=1;

flag=1;

//调用输入新密码提示标志位

mark=1;

//循环标志位

markx=1;

num=0;

//按键错误计数器

WriteToROM(O_Password,0,6);

TH0=0x3C;

TL0=0xB0;

//50ms定时初值

TH1=0x3C;

TL1=0xB0;

TMOD=0x11;

ET0=1;

TR0=0;

ET1=1;

TR1=0;

EA=1;

}

main()

主函数

对按键和显示进行控制

voidmain(void)

{

ucharKey_value;

Delay400Ms();

//启动等待,等LCM讲入工作状态

LCMInit();

clearmen();

//系统初始化

while

(1)

{

P1=0xf0;

if(((P1&

0xf0)!

=0xf0)&

(flag1==1)&

(num<

3))//有键按下

Key_value=Key_switch();

if(Key_value!

=0)//的确有键按下

Choice_menu();

//调用选择程序

flag1=0;

signx=1;

}

while(signx==1)

{

TR0=0;

//定时器0关,从先开始计时

TR0=1;

//定时器0开

P1=0xf0;

//P1口赋值,从而判断有无按键

if((P1&

=0xf0)

{

Key_value=Key_switch();

if(Key_value==65)//如果按键是"

A"

则输入密码

{

markx=1;

//显示密码输入正确或错误提示

while(mark==1)

{

Password_importation();

}

flag1=1;

signx=0;

//循环标志

if(Key_value==66)//如果按键是"

B"

则输入新密码

{

markx=0;

//不显示密码输入正确或错误提示

while(mark==1)//输入前比较秘密,密码正确进入新密码设置

{//密码错误退出密码设置

}

//-------------------------------

if(mark0!

=0)//mark0=1:

密码比较正确可以输入新密码

{//mark0=0:

密码比较错误不能输入新密码

mark=1;

//进入循环标志

{

NewPassword_set();

//新密码设置函数

}

mark=1;

//进入循环标志

while(mark==1)

{

NewPassword_set_again();

//再次输入密码

}

}

flag1=1;

signx=0;

mark0=1;

flag=1;

if(Key_value==67)//如果按键是"

C"

则密码复位

{

markx=0;

//不显示密码输入正确或错误提示

mark=1;

Password_importation();

}

=0)

Reset_success();

Delay1s();

sign=0;

WriteCurrent((uchar)sign,10);

//存入标志位

Reset_success();

}

}

else

Welcome_face();

mark=1;

mark0=0;

//是否输入新密码标志位

flag1=1;

WriteCommandLCM(0x0C,1);

//关光标显示

sign=(bit)ReadCurrent(10);

//密码比较标志位

if(num==3)//3次输入错误密码,系统锁定30min

ET1=1;

TR1=1;

//开定时器T1,定时30分钟

//=================================================24c02部分函数========================================

voidStart(void)

开始总线函数

启动I2C总线,即发送I2C起始条件

SDA=1;

//发送起始条件的数据信号

SCL=1;

_nop_();

SDA=0;

//发送起始信号

//起始条件锁定时间大于4us

SCL=0;

//钳住I2C总线准备发送或接受数据

voidStop(void)

结束总线函数

结束I2C总线,即发送I2C结束条件

//发送结束条件的数据信号

//发送I2C总线结束信号

//结束条件锁定时间大于4us

bitSend(ucharData)

发送一字节数据

向24c02中写入数据

Data

uchari;

bitack_bit;

for(i=0;

i<

8;

i++)//循环移入8个位

SDA=(bit)(Data&

0x80);

_nop_();

SCL=1;

SCL=0;

Data<

<

=1;

//读取应答

ack_bit=SDA;

returnack_bit;

//返回AT24Cxx应答位

voidWriteCurrent(ucharData,ucharAddress)

在指定地址Address处一个数据Data

在指定地址处写入一字节的数据

Data,Address

Start();

Send(AddWr);

Send(Address);

Send(Data);

Stop();

DelayMs(10);

//写入周期

voidWriteToROM(ucharData[],ucharAddress,ucharNum)

在指定地址Address处写入Num个数据Data[]

Data[],Address,Num

uchar*PData;

PData=Data;

for(i=0;

i<

Num;

i++)

Start();

Send(AddWr);

Send(Address+i);

Send(*(PData+i));

Stop();

DelayMs(10);

//写入周期

ucharRead(void)

读一字节数据

从24c02中读出数据

Read_data

unsignedchari,Read_data;

Send(AddRd);

i++)

Read_data<

Read_data|=(uchar)SDA;

return(Read_data);

ucharReadCurrent(ucharAddress)

从指定地址读一字节数据

Address

Read()

returnRead();

voidReadFromROM(ucharData[],ucharAddress,ucharNum)

从24C02中读出一字节的数据

在指定地址读取

**

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

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

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