基于单片机的密码锁设计_课程设计报告(编辑修改稿)内容摘要:
{ temp=P1。 temp=tempamp。 0xf0。 } return(key)。 } } P1=0xfd。 temp=P1。 temp=tempamp。 0xf0。 if(temp!=0xf0) { delayms(10)。 if(temp!=0xf0) { temp=P1。 switch(temp) { case 0xed:key=4。 break。 case 0xdd:key=5。 break。 case 0xbd:key=6。 break。 case 0x7d:key=7。 break。 } while(temp!=0xf0) 第 21 页 { temp=P1。 temp=tempamp。 0xf0。 } return(key)。 } } P1=0xfb。 temp=P1。 temp=tempamp。 0xf0。 if(temp!=0xf0) { delayms(10)。 if(temp!=0xf0) { temp=P1。 switch(temp) { case 0xeb:key=8。 break。 case 0xdb:key=9。 break。 case 0xbb:key=10。 break。 case 0x7b:key=11。 break。 } while(temp!=0xf0) { temp=P1。 temp=tempamp。 0xf0。 } return(key)。 } } P1=0xf7。 temp=P1。 temp=tempamp。 0xf0。 if(temp!=0xf0) { delayms(10)。 if(temp!=0xf0) { temp=P1。 switch(temp) { case 0xe7:key=12。 break。 case 0xd7:key=13。 break。 第 22 页 case 0xb7:key=14。 break。 case 0x77:key=15。 break。 } while(temp!=0xf0) { temp=P1。 temp=tempamp。 0xf0。 } return(key)。 } } } void keydown() { uchar temp。 P1=0x0f。 temp=P1。 if((tempamp。 0x0f)!=0x0f) { key=keyscan()。 } } 日历子程序 include include include include include include define uchar unsigned char define uint unsigned int uchar table1[]=课程设计 :。 uchar table2[]=I2C 密码锁。 uchar table3[]=年月日时分秒周。 uchar table8[]=一二叁四 五六日。 sbit rs=P3^5。 //s=P20。 sbit rw=P3^6。 // rw=P21。 sbit e=P3^4。 // e=P22。 // sbit psb=P2^7。 unsigned char code digit[10]={0123456789}。 sbit SCLK=P2^0。 // SCLK=P1^0。 第 23 页 sbit DATA=P2^1。 //DATA=P1^1。 sbit RST =P2^2。 // RST =P1^2。 // sbit deng=P2^7。 // sbit fenming=P3^7。 /******************************************************************** 函数功能: 延时若干微秒 入口参数 n ***********************************************************************/ void delaynus(uint n) { uint i。 for(i=0。 in。 i++)。 } /********************************************************** 延时若干毫秒 ********************************************************** void delayms(uint n) { uint i,j。 for(i=0。 in。 i++) { for(j=125。 j0。 j)。 } } ****************************************************************** 函数功能:向 DS1302 写一个字节数据 入口参数: x /*******************************************************************/ void write1302(uchar dat) { uchar i。 SCLK=0。 delaynus(2)。 for(i=0。 i8。 i++) { DATA=datamp。 0x01。 delaynus(2)。 SCLK=1。 delaynus(2)。 SCLK=0。 dat=1。 第 24 页 } } /*********************************************************************** 函数功能: 向 DS1302 在写入命令的情况下写入一个字节数据 入口参数:命令: cmd 数据: dat ***********************************************************************/ void writeset1302(uchar cmd ,uchar dat) { RST=0。 SCLK=0。 RST=1。 delaynus(2)。 write1302(cmd)。 write1302(dat)。 SCLK=1。 RST=0。 } /*******************************************************************8 函数功能:从 DS1302 中读取一个字节数据 /*********************************************************************/ uchar read1302(void) { uchar i,dat。 // SCLK=1。 //此处不能加这一句 delaynus(2)。 for(i=0。 i8。 i++) { dat=1。 if(DATA==1) dat=dat|0x80。 SCLK=1。 delaynus(2)。 SCLK=0。 delaynus(2)。 } return dat。 } /*********************************************************************** 第 25 页 函数功能:在写入命令字的情况下从 1302 中读取一个字节的数据 入口参数:命令子: cmd **************************************************************************/ uchar readset1302(uchar cmd ) { uchar dat。 RST=0。 SCLK=0。 RST=1。 write1302(cmd)。 dat=read1302()。 SCLK=1。 RST=0。 return dat。 } /*************************************************************************** 函数功能: 对 1302 初始化设置 /*************************************************************************/ void init_ds1302() { unsigned char flag。 flag= readset1302(0x81)。 if(flagamp。 0x80) { //判断时钟芯片是否关闭 writeset1302(0x8E,0x00)。 //根据写状态寄存器命令字,写入不保护指令 writeset1302(0x80,((0/10)4|(0%10)))。 //根据写秒寄存器命令字,写入秒的初始值 writeset1302(0x82,((35/10)4|(35%10)))。 //根据写分寄存器命令字,写入分的初始值 writeset1302(0x84,((21/10)4|(21%10)))。 //根据写小时寄存器命令字,写入小时的初始值 writeset1302(0x86,((10/10)4|(10%10)))。 //根据写日寄存器命令字,写入日的初始值 writeset1302(0x88,((10/10)4|(10%10)))。 //根据写月寄存器命令字,写入月的初始值 writeset1302(0x8c,((13/10)4|(13%10)))。 //根据写年寄存器命令字,写入年的初始值 writeset1302(0x8a,((4/10)4|(4%10)))。 writeset1302(0x90,0xa5)。 //打开充电功能 选择 2K 电 阻充电方式 writeset1302(0x8E,0x80)。 //根据写状态寄存器命令字,写入保护指令 } } 第 26 页 /********************************************* 以下是对液晶的操作 向 12864 写命令 ***************************************************/ void write_12864(uchar ) { rw=0。 rs=0。 delaynus(100)。 P0=。 e=1。基于单片机的密码锁设计_课程设计报告(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。