77范文网 - 专业文章范例文档资料分享平台

51单片机课程设计 电子密码锁 - 图文(3)

来源:网络收集 时间:2019-03-27 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

{ 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=temp<<1; temp=temp1;} BitCounter--;} while(BitCounter); return(temp);}

void WrToROM(uchar Data[],uchar Address,uchar Num) { uchar i; uchar *PData; PData=Data; for(i=0;i

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;i

Send(Address+i); Ack(); Start();

Send(0xa1); Ack();

*(PData+i)=Read(); Scl=0; NoAck(); Stop();}}

#define yi 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80) #define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40) void delay(uint xms)//延时函数,有参函数 {uint x,y;

for(x=xms;x>0;x--) for(y=110;y>0;y--);}

void write_1602com(uchar com)//****液晶写入指令函数**** { lcd1602_rs=0;//数据/指令选择置为指令

lcd1602_rw=0; //读写选择置为写 P0=com;//送入数据 delay(1);

lcd1602_en=1;//拉高使能端,为制造有效的下降沿做准备 delay(1);

lcd1602_en=0;//en由高变低,产生下降沿,液晶执行命令}

void write_1602dat(uchar dat)//***液晶写入数据函数**** { lcd1602_rs=1;//数据/指令选择置为数据

lcd1602_rw=0; //读写选择置为写 P0=dat;//送入数据 delay(1);

lcd1602_en=1; //en置高电平,为制造下降沿做准备 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)

{ case (0x18): k=1;break;

case (0x28): k=2;break; case (0x48): k=3;break; case (0x88): k='A';break; case (0x14): k=4;break; case (0x24): k=5;break; case (0x44): k=6;break; case (0x84): k='B';break;

case (0x12): k=7;break; case (0x22): k=8;break; case (0x42): k=9;break; case (0x82): k='C';break; case (0x11): k='*';break; case (0x21): k=0;break; case (0x41): k='#';break; case (0x81): k='D';break;}

return(k);}

unsigned char keynum(void) { unsigned char row,col,i;

P1=0xf0;

if((P1&0xf0)!=0xf0) {Delay5Ms();

Delay5Ms();

if((P1&0xf0)!=0xf0)

{row=P1^0xf0; //确定行线 else {return 0;}

i=0; P1=a[i]; while(i<4)

{if((P1&0xf0)!=0xf0)

{col=~(P1&0xff); //确定列线 else {i++;

P1=a[i];}}} break;}

//精确定位

while((P1&0xf0)!=0xf0); return (row|col);}

else return 0;}

void OneAlam(void) {ALAM=0;

Delay5Ms();

ALAM=1;} void TwoAlam(void) { ALAM=0;

Delay5Ms();

ALAM=1; Delay5Ms();

ALAM=0; Delay5Ms();

ALAM=1;} void ThreeAlam(void)

{ ALAM=0;

Delay5Ms();

ALAM=1; Delay5Ms();

ALAM=0; Delay5Ms();

ALAM=1; Delay5Ms();

ALAM=0; Delay5Ms();

ALAM=1;} void DisplayOne(void) {write_1602com(yi+5+N);

write_1602dat('*');}

void DisplayChar(void) {unsigned char i;

if(pass==1)

{write_1602com(er); else {if(N==0)

{write_1602com(er); else

{write_1602com(er);

for(i=0;i<16;i++)

{write_1602dat(start_line[i]);}}}} for(i=0;i<16;i++)

{write_1602dat(Error[i]); }} for(i=0;i<16;i++)

{write_1602dat(Locktrue[i]);

}}

void DisplayInput(void) { unsigned char i;

if(CorrectCont==1) { write_1602com(er);

for(i=0;i<16;i++)

{write_1602dat(Input[i]); }}}

void ResetPassword(void) { unsigned char i;

unsigned char j; if(pass==0) { pass=0; else

{if(ReInputEn==1)

DisplayChar(); ThreeAlam();}

{if(N==6)

{ReInputCont++;

if(ReInputCont==2) {for(i=0;i<6;)

{if(TempPassword[i]==InputData[i]) //将两次输入的新密码作对比

else

{write_1602com(er);

for(j=0;j<16;j++)

{write_1602dat(Error[j]); } ThreeAlam(); pass=0; ReInputEn=0; ReInputCont=0; DisplayChar(); break;}}

//关闭重置功能,

//错误提示

i++;

if(i==6)

{write_1602com(er);

for(j=0;j<16;j++)

{write_1602dat(ResetOK[j]); TwoAlam();

}

//操作成功提示

//将新密码写入24C02存储

else

WrToROM(TempPassword,0,6); ReInputEn=0;}

ReInputCont=0; CorrectCont=0;}

{OneAlam(); write_1602com(er);

for(j=0;j<16;j++)

{write_1602dat(again[j]); } for(i=0;i<6;i++)

{TempPassword[i]=InputData[i];}}

N=0;}}}}

void Alam_KeyUnable(void) {P1=0x00;

{ALAM=~ALAM;

Delay5Ms();}}

void Cancel(void) {

unsigned char i; unsigned char j; write_1602com(er); for(j=0;j<16;j++)

{write_1602dat(start_line[j]); }

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库51单片机课程设计 电子密码锁 - 图文(3)在线全文阅读。

51单片机课程设计 电子密码锁 - 图文(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/546215.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: