单片机课程设计之智能电子钟_第1页
单片机课程设计之智能电子钟_第2页
单片机课程设计之智能电子钟_第3页
单片机课程设计之智能电子钟_第4页
单片机课程设计之智能电子钟_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机课程设计题目:智能电子钟学生姓名专业班级指导教师成绩工程技术学院2016年3月目录TOC\o"1-2"\h\u28896一、系统设计内容 显示加一后的值秒值加一并做BCD码调整当年秒值小于59吗Y显示加一后的值秒值加一并做BCD码调整当年秒值小于59吗YN向DS1302写入秒值并取更新后的值显示。等待按键释放仿真效果图日期时间交替显示:关屏

时间调整六、总结与体会历经一个星期的设计、修改、调试,最终,我们得到了想要的结果,感受成功之喜悦,但这并不意味着我们做得很好,相反,在这当中暴露出了我们在各个方面许许多多的问题,学到许多的同时感触也很深厚。在硬件设计时,通过对需要系统的分析,单元模块的设计,元件的选取等,使我们了解到平时所学单片机课程的实用价值,以及设计过程中的大局协调、取舍、分析能力的培养。在编程以及仿真时,充分将单片机原理的知识学以致用,既是对我们单片机基础知识的考验,又是对我们灵活运用及创新能力的检验;既考验我们的学习能力,又考验逻辑思维技巧;既体现了个人对课程设计的灵思妙想,又培养了团队之间的合作能力。我们能够很好地完成这次课设,离不开在科学研究上实事求是的工作原则、一丝不苟的工作态度、勤于思考的工作方法、百折不饶的工作精神和精益求精的工作作风,此外,最重要的就是团队之间相处和谐、分工明确。在大家的共同努力下,得到了满意的成果,更使我们明白团队合作的重要与便利。最后,衷心感谢老师在这次设计中耐心给予的大量帮助,解决了我程序中存在的不少问题,并指导了我一些设计的思路,也令我明白自己的大量不足之处,受益匪浅。附录程序#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineDS1302_SECOND_WRITE0x80#defineDS1302_MINUTE_WRITE0x82#defineDS1302_HOUR_WRITE0x84#defineDS1302_DAY_WRITE0x86#defineDS1302_WEEK_WRITE0x8a#defineDS1302_MONTH_WRITE0x88#defineDS1302_YEAR_WRITE0x8c #defineDS1302_PROTECT_WRITE0x8e#defineDS1302_SECOND_READ0x81#defineDS1302_MINUTE_READ0x83#defineDS1302_HOUR_READ0x85#defineDS1302_DAY_READ0x87#defineDS1302_WEEK_READ0x8b#defineDS1302_MONTH_READ0x89#defineDS1302_YEAR_READ0x8d sbitlcden=P2^2;sbitlcdrs=P2^0;sbitwrite=P2^1;sbitsck=P1^6;//时钟sbitio=P1^7;//数据sbitrst=P1^5;//DS1302复位unsignedcharChinese_1[3]={0x2d,0x20,0x3a};//“-”“”“:”unsignedcharChinese_2[7]={0x31,0x32,0x33,0x34,0x35,0x36,0x37};//一二三四五六天//unsignedcharCursor[6]={0x81,0x83,0x85,0x90,0x92,0x94};//定义光标移动的位置unsignedcharnum=0;unsignedintji=0;unsignedintjiao=0;voidDelayms(unsignedintz)//延时{ unsignedintx,y; for(x=z;x>0;x--) for(y=115;y>0;y--);}//lcd子程序voidWrite_com(unsignedcharcom)//写命令{ lcdrs=0; P0=com; Delayms(5); lcden=1; Delayms(5); lcden=0;}voidWrite_data(unsignedchardat)//写数据{ lcdrs=1; P0=dat; Delayms(5); lcden=1; Delayms(5); lcden=0;}unsignedcharRead_com()//读命令{ unsignedcharcom; write=1; lcdrs=0; lcden=1; com=P0; Delayms(5); write=0; lcdrs=0; lcden=0; returncom;}voidinit_lcd()//lcd初始化{ lcden=0; Write_com(0x38); Write_com(0x0c); Write_com(0x06); Write_com(0x01); Write_com(0x80);}//ds1302子程序voidDS1302WriteByte(uchardat)//写字节{ uchari; sck=0; Delayms(2); for(i=0;i<8;i++) { io=dat&0x01;//取最低位,注意DS1302的数据和地址都是从最低位开始传输的 Delayms(2); sck=1; Delayms(2); sck=0; dat>>=1; }}ucharDS1302ReadByte()//读字节{ uchari,dat; Delayms(2); for(i=0;i<8;i++) { dat>>=1; if(io==1)//当数据线为高时,证明该位数据为1 dat|=0x80;//要传输数据的当前值置为1,若不是,则为0 sck=1; Delayms(2); sck=0; Delayms(2); } returndat;}ucharDS1302Read(ucharcmd)//读命令{ uchardat; rst=0; sck=0; rst=1; DS1302WriteByte(cmd);//传输地址 dat=DS1302ReadByte();//读取要得到的时间/日期 sck=1; rst=0; returndat;}voidDS1302Write(ucharcmd,uchardat)//写命令{ rst=0; sck=0; rst=1; DS1302WriteByte(cmd);//传输地址 DS1302WriteByte(dat);//写入时间/日期 sck=1; rst=0;}voidInit_DS1302(void)//初始化{ DS1302Write(0x8e,0x00);//写保护关 DS1302Write(DS1302_SECOND_WRITE,0x55);//初始秒值 DS1302Write(DS1302_MINUTE_WRITE,0x59);//初始分钟 DS1302Write(DS1302_HOUR_WRITE,0x23);//初始为24小时模式初始时间为 DS1302Write(DS1302_DAY_WRITE,0x02);//20xx年x月x日星期x DS1302Write(DS1302_MONTH_WRITE,0x03); DS1302Write(DS1302_YEAR_WRITE,0x16); DS1302Write(DS1302_WEEK_WRITE,0x03); DS1302Write(0x90,0x01);//充电 DS1302Write(0xc0,0xf0);//初始化一次标示 DS1302Write(0x8e,0x80);}voidSplit_display(unsignedcharaddress)//取数显示{ unsignedchari; i=DS1302Read(address); i=i/16+'0'; Write_data(i);//显示十位 Delayms(3); i=DS1302Read(address); i=i%16+'0'; Write_data(i);//显示个位 Delayms(5);}voidDispaly_shi()//显示时间{ Write_com(0x84); Split_display(DS1302_HOUR_READ);//显示小时 Write_data(Chinese_1[2]);//显示“:” Delayms(3); Split_display(DS1302_MINUTE_READ);//显示分钟 Write_data(Chinese_1[2]); Delayms(3); Split_display(DS1302_SECOND_READ);//显示秒 Delayms(3); Delayms(50);}voidDisplay_nian()//显示年月日{ uchari; Write_com(0x82); Delayms(100); Write_com(0x82); Delayms(100); Write_data('2'); Delayms(5); Write_data('0'); Delayms(1); Split_display(DS1302_YEAR_READ);//显示年份 Write_data(Chinese_1[0]);//显示“-” Delayms(3); Split_display(DS1302_MONTH_READ);//显示月份 Write_data(Chinese_1[0]); Delayms(3); Split_display(DS1302_DAY_READ);//显示日期 Write_data(Chinese_1[1]); Delayms(3); Write_data(Chinese_1[1]); Delayms(3); i=DS1302Read(DS1302_WEEK_READ);//显示星期 i=i%16+'0'; Write_data(i); Delayms(3); Write_com(0x82); Delayms(50);}voidinter0()interrupt0//按键中断1{ ji=ji+1; if(ji%2==0) Write_com(0x0c); else Write_com(0x08);}voidinter2()interrupt2//按键中断2{ unsignedchark,j,i,b; //Delayms(500); while(INT1!=1); b=Read_com(); b=ACC&0x7f; Write_com(0x01); Dispaly_shi(); EA=0; EX0=0;EX1=0; k=DS1302Read(DS1302_SECOND_READ); while(INT1) { Write_com(0x8a); Write_com(0x0f); if(INT0==0) { Delayms(10); if(INT0==0) { if(k<0x59) { ACC=k; #pragmaasm adda,#1 daa #pragmaendasm k=ACC; } else { DS1302Write(DS1302_SECOND_WRITE,k); while(k!=0) { k=DS1302Read(DS1302_SECOND_READ);} Write_com(0x01); Dispaly_shi(); } Write_com(0x8a); i=k/16+'0'; j=k%16+'0'; Write_data(i); Delayms(3); Write_data(j); while(!INT0); } } }while(!INT1); DS1302Write(DS1302_SECOND_WRITE,k); Write_com(0x0c); Write_com(0x01); if(jiao==0) { Dispaly_shi();} els

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论