版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本程序是基于单片机电子密码锁毕业设计的全部程序。程序经过调试成功,并做出成品。供各界好友分享,未经本人(王明珠QQ516682439)同意不能外传。谢谢合作。原理图如下:#include <reg52.h>#include <intrins.h>sbit RS = P24;/定义端口 sbit RW = P25;sbit EN = P26;sbit SCK=P36;sbit SDA=P34;sbit RST = P35; / DS1302复位sbit speak = P20;bit ReadRTC_Flag=0;#define RS_CLR RS=0 #define R
2、S_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1unsigned char g,tk,ti=1,r,hz,lz,x,z=0;unsigned char a,b=8,temp,temp1,temp2,temp3,temp4,temp5,temp6,temp7=3,temp8,temp9,temp10;unsigned char table16=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43
3、,0x44,0x45,0x46;unsigned char table16=0x30,0x30,0x30,0x30,0x30,0x30;unsigned char table26=0x31,0x31,0x31,0x31,0x31,0x31;unsigned char MM6=2,2,2,2,2,2;unsigned char l_tmpdate7=0,42,9,27,6,3,9;/秒分时日月周年08-05-15 12:00:00unsigned char l_tmpdisplay8; /秒分时unsigned char r_tmpdisplay8; / 日月周年code unsigned ch
4、ar write_rtc_address7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c; /秒分时日月周年 最低位读写位code unsigned char read_rtc_address7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d; /显示位码表 */*延时函数*/void delay_us(unsigned int n) /延时 如果需要高精度延时 请嵌入汇编 if (n = 0) return ; while (-n); /*延时函数*/ void delay_ms(unsigned int i) unsigned char a,
5、b; for (a = 1; a < i; a+) for (b = 1;b; b+) ; /*显示屏命令写入函数*/ void LCD_write_com(unsigned char com) RS_CLR; RW_CLR; EN_SET; P0 = com; delay_us(5); EN_CLR; /*显示屏数据写入函数*/ void LCD_write_Data(unsigned char Data) RS_SET; RW_CLR; EN_SET; P0 = Data; delay_us(5); EN_CLR; /*显示屏清空显示*/ void LCD_clear(void) L
6、CD_write_com(0x01); delay_ms(5); /*显示屏字符串写入函数*/ void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s) if (y = 1) LCD_write_com(0x80 + x); if(y=2) LCD_write_com(0xC0 + x); while (*s) LCD_write_Data( *s); s +; /*显示屏单字符写入函数*/ void LCD_write_char(unsigned char x,unsigned char y,unsigned c
7、har Data) if (y = 1) LCD_write_com(0x80 + x); if(y=2) LCD_write_com(0xC0 + x); LCD_write_Data( Data); /*显示屏初始化函数*/ void LCD_init(void) LCD_write_com(0x38); /*6显示模式设置*/ delay_ms(5); LCD_write_com(0x08); /*4显示关闭*/ LCD_write_com(0x01); /*显示清屏*/ LCD_write_com(0x06); /*显示光标移动设置*/ delay_ms(5); LCD_write_c
8、om(0x0c); /*显示开及光标设置*/ /*/ /*/void Write_Ds1302_Byte(unsigned char temp) unsigned char i; for (i=0;i<8;i+) /循环8次 写入数据 SCK=0; SDA=temp&0x01; /每次传输低字节 temp>>=1; /右移一位 SCK=1; /*/void Write_Ds1302( unsigned char address,unsigned char dat ) RST=0;_nop_(); SCK=0;_nop_(); RST=1; _nop_(); /启动 W
9、rite_Ds1302_Byte(address);/发送地址 Write_Ds1302_Byte(dat);/发送数据 RST=0; /恢复/*/unsigned char Read_Ds1302 ( unsigned char address ) unsigned char i,temp=0x00; RST=0;_nop_(); SCK=0;_nop_(); RST=1;_nop_(); Write_Ds1302_Byte(address); for (i=0;i<8;i+) /循环8次 读取数据 if(SDA) temp|=0x80;/每次传输低字节SCK=0;temp>&g
10、t;=1;/右移一位 SCK=1; RST=0;_nop_();/以下为DS1302复位的稳定时间 RST=0;SCK=0;_nop_();SCK=1;_nop_();SDA=0;_nop_();SDA=1;_nop_();return (temp);/返回/*/void Read_RTC(void)/读取 日历 unsigned char *p; p=read_rtc_address; /地址传递 for(r=0;r<7;r+)/分7次读取 秒分时日月周年 l_tmpdater=Read_Ds1302(*p); p+; delay_us(10); /*/void Set_RTC(voi
11、d)/设定 日历unsigned char i,*p,tmp;for(i=0;i<7;i+) /BCD处理 tmp=l_tmpdatei/10; /十进制变十六进制l_tmpdatei=l_tmpdatei%10;l_tmpdatei=l_tmpdatei+tmp*16; Write_Ds1302(0x8E,0X00); p=write_rtc_address;/传地址 for(i=0;i<7;i+)/7次写入 秒分时日月周年 Write_Ds1302(*p,l_tmpdatei); p+; delay_us(10); Write_Ds1302(0x8E,0x80);void ti
12、me() /unsigned char i;Read_RTC(); l_tmpdisplay0=l_tmpdate2/16;/数据的转换,因我们采用09的显示,将数据分开l_tmpdisplay1=l_tmpdate2&0x0f;/l_tmpdisplay2='a' /加入"-"l_tmpdisplay3=l_tmpdate1/16;/l_tmpdisplay4=l_tmpdate1&0x0f;/l_tmpdisplay5=b;l_tmpdisplay6=l_tmpdate0/16; / 分l_tmpdisplay7=l_tmpdate0&a
13、mp;0x0f; /秒r_tmpdisplay0=l_tmpdate6/16;/年r_tmpdisplay1=l_tmpdate6&0x0f;/r_tmpdisplay2=10;r_tmpdisplay3=l_tmpdate4/16; / 月r_tmpdisplay4=l_tmpdate4&0x0f;/r_tmpdisplay5=10;r_tmpdisplay6=l_tmpdate3/16; /日r_tmpdisplay7=l_tmpdate3&0x0f; temp1=r_tmpdisplayti; temp2=tabletemp1; LCD_write_char(tk
14、,1,temp2); LCD_write_char(1,1,0xb0); LCD_write_char(4,1,0xb0); LCD_write_char(7,1,0xb0); delay_ms(10); tk+; if(tk=7) tk=0; ti+; if(ti=8) ti=1; delay_ms(10); temp3=l_tmpdisplaya; temp4=tabletemp3; LCD_write_char(b,1,temp4); LCD_write_char(10,1,0xb0); LCD_write_char(13,1,0xb0); delay_ms(10); b+; if(b=
15、16) b=8; a+; if(a=8) a=0;delay_ms(10); /*/*void InitTIMER0(void) TMOD|=0x01;/定时器设置 16位 TH0=(65536-2500)/256; TL0=(65536-2500)%256; ET0=1; TR0=1; EA=1;*/*/*/key()P3=0X0f;if(P3&0x0f)!=0x0f) delay_ms(10); if(P3&0x0f)!=0x0f) hz=0x7f; while(1) P3=hz; if(P3!=hz) return(P3); else hz=(hz>>1)|0
16、x80; / if(hz=0xf7) / hz=0x7f; else return 0; /*/void ajcl(unsigned char jz) if(jz=0x81) temp5=table0;if(jz=0x82) temp5=table1;if(jz=0x84) temp5=table2;if(jz=0x88) temp5=table3;if(jz=0x41) temp5=table4;if(jz=0x42) temp5=table5;if(jz=0x44) temp5=table6;if(jz=0x48) temp5=table7;if(jz=0x21) temp5=table8
17、;if(jz=0x22) temp5=table9;if(jz=0x24) temp5=table10; / A 左if(jz=0x28) temp5=table11; / B 右if(jz=0x11) temp5=table12; / C 取消if(jz=0x12) temp5=table13; / D修改时间if(jz=0x14) temp5=table14; / E修改密码if(jz=0x18) temp5=table15; / F 确认/*/*/*/*/*/ void main(void) unsigned char d,k=0,e=0,f=0,h,l,MM1=0,MM2,an=0,t
18、t=0,rr=0,u=0; unsigned char t=0,i=1,st=1,st1=1,m,n=0,st2=1,st3,jz=0XFF,st4=1,st5=1,st6=1;/InitTIMER0();LCD_init(); Set_RTC();while(1) time(); t=0;i=1;st=1;st1=1;m=0,n=0;time();st2=1;st3=0;jz=0XFF;st4=1;st5=1;st6=1;d=0;k=0;e=0;f=0;h=0;l=0,MM1=0;time();MM2=0;an=0;tt=0;rr=0;u=0;time();g=0;tk=0;ti=1;r=0
19、;hz=0;lz=0;x=0;z=0;time();a=0;b=8;temp=0;temp1=0;time();temp2=0;temp3=0;time();temp4=0;temp5=0;temp6=0;temp7=3;temp8=0;temp9=0;temp10=0;P1=0xff; time();jz=key(); ajcl(jz);/LCD_write_com(0x0D); LCD_write_str(0,2,"Hi! Good Moring"); / jz=key(); if(P3&0x0f)!=0x0f) while(P3&0x0f)!=0x0f
20、); while(st) time(); LCD_write_str(0,2,"Input code ");if(an=1) LCD_write_str(0,2,"Input again"); if(P3&0x0f)!=0x0f) while(P3&0x0f)!=0x0f); LCD_write_com(0x01); st1=1; st2=1; time(); while(st1) time(); jz=key(); ajcl(jz); if(P3&0x0f)!=0x0f) while(P3&0x0f)!=0x0f) ;
21、LCD_write_char(d,2,0x2a) ;/改TEMP5就可以 了 table1d=temp5;delay_ms(10);/temp6=table1d;/g=d+6;/LCD_write_char(g,2,temp6); d+;if(d=6)d=0;/P1=0xfe; st2=1; delay_ms(250); LCD_write_str(0,2,"Waiting"); delay_ms(250); for(l=7;l<15;l+) delay_ms(100); LCD_write_str(l,2,"."); delay_ms(100);
22、 while(st2) time();delay_us(150); k=0; for(h=0;h<6;h+) MM1=table1h; temp6=MMh; MM2=tabletemp6; if(MM1=MM2) k+; if(k>5) P1=0xfe;LCD_write_str(0,2,"Coming in Please");for(m=0;m<55;m+)speak=!speak;delay_us(220);delay_ms(200);delay_ms(200);delay_ms(200);P1=0xff; st2=0;st1=0;st=0;st3=1
23、;LCD_write_com(0x01); if(k<=5) P1=0xfd; / LCD_write_str(0,2,"Input again");an=1;if(n>1) LCD_write_str(0,2,"KO!#$%&*?!"); LCD_write_str(0,1,"KO!#$%&*?!");temp7-;temp8=tabletemp7;LCD_write_char(15,2,temp8);delay_ms(50);P1=0xff; for(m=0;m<245;m+)speak=!spe
24、ak;delay_us(20);delay_ms(50); P1=0xfd;for(m=0;m<245;m+)speak=!speak;delay_us(20);P1=0xff;speak=1;st2=0;st1=0;if(temp7=0) P1=0xff; delay_ms(15); temp7+; n+; st1=1; st2=1; if(n=20) /10秒钟 st1=0; st2=0; /LCD_write_com(0x01); while(st3) time(); LCD_write_str(0,2,"change MM time"); jz=key();
25、ajcl(jz); if(temp5=0x46) while(temp5=0x46) temp5=0x23; LCD_write_str(0,2," OK "); while(st6) jz=key(); ajcl(jz); if(temp5=0x44) /mm P1=0xfb; LCD_write_str(0,2,"Put your code"); delay_ms(200); delay_ms(200); LCD_write_str(0,2," ");while(st5) time();jz=key(); ajcl(jz); if
26、(P3&0x0f)!=0x0f) while(P3&0x0f)!=0x0f) ; table2tt=temp5; delay_ms(10); /temp6=table2tt; LCD_write_char(tt,2,0x2a) ;/改TEMP5就可以 了 tt+; / delay_ms(10);if(tt=6) LCD_write_str(0,2,"Put code again");delay_ms(250);delay_ms(250);delay_ms(250);delay_ms(250); LCD_write_str(0,2," ")
27、; /tt=0; while(st4) delay_ms(10); / P1=0xf0; jz=key(); ajcl(jz); if(P3&0x0f)!=0x0f) while(P3&0x0f)!=0x0f);/delay_ms(10); /temp6=temp5; LCD_write_char(z,2,0x2a) ;/改TEMP5就可以 了 temp6=table2z; z+; if(temp6=temp5) rr+; if(rr>5) LCD_write_str(0,2,"Code ok"); for(m=0;m<55;m+) speak=!speak;delay_us(220);P1=0XFE; delay_ms(250); delay_ms(250); delay_ms(250); delay_ms(250); delay_ms(250); delay_ms(250);for(u=0;u<6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版电子商务平台搭建与推广合同3篇
- 2024年度国际酒店管理服务与加盟合同3篇
- 2024年个体运输服务合同2篇
- 2024版内墙涂料粉刷环保要求合同3篇
- 2024年房产证押借款合同8篇
- 防洪工程施工监理合同三篇
- 2024年劳务派遣公司合同样本
- 2024年出口业务中间商报酬合同一
- 2024年合同授权代表委托说明书3篇
- 2024年度高品质五金材料采购合同样本版
- 2024年宁夏水投集团福宁工程设计咨询有限公司招聘笔试参考题库含答案解析
- 一年级课标解读
- 仿真模拟实训报告总结与反思
- MOOC 创新方法与实践-河南理工大学 中国大学慕课答案
- 缺血性心肌病护理查
- 2024-2029全球及中国摄影器材行业市场发展分析及前景趋势与投资发展研究报告
- 慢性牙髓炎临床表现及诊断讲解
- 山东青岛幼儿师范高等专科学校招聘考试试题及答案
- 农产品加工与质量检测职业生涯规划
- 血糖波动大的患者如何护理
- 2024年英语必修第二册 Unit2 全单元教学设计
评论
0/150
提交评论