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

下载本文档

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

文档简介

1、单片机课程设计题目:智能电子钟学生姓名专业班级指导教师成绩工程技术学院2016年3月目录一、系 统设 计内 容11.1设 计要 求:11.2可 实现 的具 体功 能:1二、总 体设 计22.1 DS1302简介22.2 LCDl602简介32.3 AT89C51单片 机简 介3三、硬 件设 计33.1原 理图43.2 PCB板丝 印层43.3 PCB板底 层4四、软 件设 计流 程44.1总 体设 计44.2主程 序流 程图54.3显示 流程 图54.4 DS1302读取 流 程64.5外 部中 断 0 流程64.6外 部中 断 1 流程7五、仿 真效 果图8六、总 结与 体会10附录111、

2、 程序112、参考文献21智能电子钟(LCD 显示 )一、系统设计内容1.1设计要求:以 AT89C51 单片机为核心,制作一个 LCD显示的智能电子钟:(1) 计时:秒、分、时、天、周、月、年;(2) 闰年自动判别;(4) 时间、月、日交替显示;(5) 自定任意时刻自动开/关屏;(6) 计时精度:误差1 秒/ 月(具有微调设置);(7) 键盘采用动态扫描方式查询。所有的查询、设置功能均由功能键 K1、K2 完成。本设计采用市场上流行的时钟芯片 DS1302 进行制作。1.2可实现的具体功能:智能电子钟的原理主要由 4 部分组成:(1) 单片机的外围设备,即单片机最小系统,此部分是保证单片机正

3、常工作的必要部分;(2) 显示部分: LCD显示,即显示年、月、星期、日、时、分、秒等;(3) 时钟芯片 DS1302 , DS1302 是 DALLAS 公式推出的涓流充电时钟芯片,内含一个实时时钟/ 日历和 31 字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。实时时钟/ 日历电路能够计算 2100 年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力;(4) 按键部分:按键实现开关显示屏对时钟时间的微调,开关键在正常显示模式下按下开火关 LCD显示;模式键:可切换到时间调整界面,再按一次退出,此时开关屏键实现对秒的加一操作。1智能电子钟 (LCD 显示 )二、总

4、体设计时钟芯片DS1302LCDAT89C51显示电路按键图 2.1设计方案框图2.1 DS1302简介DS1302 是美国 DALLAS公司推出的一种高性能、低功耗、带 RAM的实时时钟电路,它可以对年、月、日、星期、时、分、秒进行计时,具有闰年补偿功能,工作电压为 2.5V 5.5V 。采 用三线接口与 CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM数据。DS1302 内部有一个 31×8 的用于临时性存放数据的 RAM寄存器。DS1302 是 DS1202 的升级产品,与 DS1202 兼容,但增加了主电源 / 后备电源双电源引脚,同时提供了对后备电源

5、进行涓细电流充电的能力。2智能电子钟 (LCD 显示 )图 2.2 DS1302芯片2.2 LCDl602简介1602 液晶也叫 1602 字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个 5X7 或者 5X11 等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。2.3 AT89C51单片机简介AT89C51(如图所示)是一种带 4K 字节闪烁可编程可擦除只读存储器( FPEROM Falsh Programmable andErasable Read Only Memory )的低电压,

6、高性能 CMOS8位微处理器,俗称单片机。该器件采用 ATMEL高密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU和闪烁存储器组合在单个芯片中,ATMEL的 AT89S51 是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。三、硬件设计3VCCP2.1/A923RP1K10uF29P2.2/A1024PSENP2.3/A11123025ALEP2.4/A12RESPACK4R21k3126EAP2.5/A13B127P2.6/P2.7/4U21P1.0/T2P

7、3.0/RXD10VCC28K1X1VCC1智能2电子钟(LCD 显示 )1113P1.1/T2EXP3.1/TXD1212VCC2P1.2P3.2/INT030uF413X2P1.3P3.3/INT1514K2P1.4P3.4/T032.768kHz561512RSTP1.5P3.5/T1C5原理图7716P1.73.1SCLKP3.6/WR368P1.617X2I/OP3.7/RD30uFWD1100-1189C513.2 PCB板丝印层3.3 PCB板底层四、软件设计流程4.1总体设计在整个程序运行过程中,总体上可分为以下几方面:4智能电子钟 (LCD 显示 )写地址时钟芯片DS1302

8、读数据中断 0写命令按键 1AT89C51LCD开关屏显示电路送显示值按键 1秒加一按键 2中断 1进入(退出)时间调整4.2 主程序流程图开始开中断,初始化LCD ,初始化DS1302显示时间显示年月日周4.3 显示流程图5智能电子钟 (LCD 显示 )清屏设定光标位置从 DS1302读取要显示的值将读取的 BCD 码拆分送 LCD 显示4.4 DS1302读取流程设定 DS1302 为读状态写字节写入要读取的值所在地址读字节读出数据返回数据4.5外部中断 0 流程6智能电子钟 (LCD 显示 )计数器加一计数器为偶数吗NY关闭显示开启显示退出中断4.6外部中断 1 流程等待按键释放记录此时

9、光标位置关中断,读取当前秒值按键 1是Y否按下N等待按键释放保持显示此刻时间 ,设定显示光标并指向秒。写入调整后的值,取消光标显示,回复光标位置,开中断。N按键 0是否按下退出中断Y7智能电子钟 (LCD 显示 )N当年秒值小于 59吗Y秒值加一并做 BCD 码调整显示加一后的值等待按键释放向 DS1302 写入秒值并取更新后的值显示。五、仿真效果图日期时间交替显示:8智能电子钟 (LCD 显示 )关屏9智能电子钟 (LCD 显示 )时间调整六、总结与体会历经一个星期的设计、修改、调试,最终,我们得到了想要的结果,感受成功之喜悦,但这并不意味着我们做得很好,相反,在这当中暴露出了我们在各个方面

10、许许多多的问题,学到许多的同时感触也很深厚。在硬件设计时,通过对需要系统的分析,单元模块的设计,元件的选取等,使我们了解到平时所学单片机课程的实用价值,以及设计过程中的大局协调、取舍、分析能力的培养。在编程以及仿真时,充分将单片机原理的知识学以致用,既是对我们单片机基础知识的考验,又是对我们灵活运用及创新能力的检验;既考验我们的学习能力,又考验逻辑思维技巧;既体现了个人对课程设计的灵思妙想,又培养了团队之间的合作能力。我们能够很好地完成这次课设,离不开在科学研究上实事求是的工作原则、一丝不苟的工作态度、勤于思考的工作方法、百折不饶的工作精神和精益求精的工作作风,此外,最重要的就是团队之间相处和

11、谐、分工明确。在 大家的共同努力下,得到了满意的成果,更使我们明白团队合作的重要10智能电子钟 (LCD 显示 )与便利。最后,衷心感谢老师在这次设计中耐心给予的大量帮助,解决了我程序中存在的不少问题,并指导了我一些设计的思路,也令我明白自己的大量不足之处,受益匪浅。附录1、程序#include<reg52.h>#include <intrins.h>#define uchar unsigned char#define DS1302_SECOND_WRITE 0x80#define DS1302_MINUTE_WRITE 0x82#define DS1302_HOUR_

12、WRITE 0x84#define DS1302_DAY_WRITE 0x86#define DS1302_WEEK_WRITE 0x8a#define DS1302_MONTH_WRITE 0x88#define DS1302_YEAR_WRITE 0x8c#define DS1302_PROTECT_WRITE 0x8e#define DS1302_SECOND_READ 0x81#define DS1302_MINUTE_READ 0x83#define DS1302_HOUR_READ 0x85#define DS1302_DAY_READ 0x87#define DS1302_WEE

13、K_READ 0x8b#define DS1302_MONTH_READ 0x8911智能电子钟 (LCD 显示 )#define DS1302_YEAR_READ 0x8dsbit lcden = P22;sbit lcdrs = P20;sbit write = P21;sbit sck = P16; / 时钟sbit io = P17; / 数据sbit rst = P15;/ DS1302 复位unsigned char Chinese_13=0x2d,0x20,0x3a;/“- ”“”“ :”unsigned char Chinese_27=0x31,0x32,0x33,0x34,0

14、x35,0x36,0x37;/一二三四五六天/unsigned char Cursor6=0x81,0x83,0x85,0x90,0x92,0x94;/定义光标移动的位置unsigned char num = 0;unsigned int ji = 0;unsigned int jiao = 0;void Delayms(unsigned int z)/ 延时unsigned int x,y;for(x=z;x>0;x-)for(y=115;y>0;y-);/lcd 子程序void Write_com(unsigned char com)/ 写命令lcdrs = 0;P0 = co

15、m;Delayms(5);lcden = 1;12智能电子钟 (LCD 显示 )Delayms(5);lcden = 0;void Write_data(unsigned char dat)/ 写数据lcdrs = 1;P0 = dat;Delayms(5);lcden = 1;Delayms(5);lcden = 0;unsigned char Read_com()/读命令unsigned char com;write = 1;lcdrs = 0;lcden = 1;com = P0;Delayms(5);write = 0;lcdrs = 0;lcden = 0;return com;vo

16、id init_lcd()/lcd初始化13智能电子钟 (LCD 显示 )lcden = 0;Write_com(0x38);Write_com(0x0c);Write_com(0x06);Write_com(0x01);Write_com(0x80);/ds1302 子程序void DS1302WriteByte(uchar dat)/ 写字节uchar i;sck=0;Delayms(2);for(i=0;i<8;i+)io=dat&0x01;/ 取最低位,注意DS1302 的数据和地址都是从最低位开始传输的Delayms(2);sck=1;Delayms(2);sck=0;

17、dat>>=1;uchar DS1302ReadByte()/ 读字节uchar i,dat;Delayms(2);for(i=0;i<8;i+)14智能电子钟 (LCD 显示 )dat>>=1;if(io=1)/ 当数据线为高时,证明该位数据为1dat|=0x80;/ 要传输数据的当前值置为1,若不是 , 则为 0sck=1;Delayms(2);sck=0;Delayms(2);return dat;uchar DS1302Read(uchar cmd)/读命令uchar dat;rst=0;sck=0;rst=1;DS1302WriteByte(cmd);/

18、 传输地址dat=DS1302ReadByte();/ 读取要得到的时间/日期sck=1;rst=0;return dat;void DS1302Write(uchar cmd,uchar dat)/ 写命令rst=0;sck=0;rst=1;15智能电子钟 (LCD 显示 )DS1302WriteByte(cmd);/ 传输地址DS1302WriteByte(dat);/ 写入时间 /日期sck=1;rst=0;void Init_DS1302(void)/ 初始化DS1302Write(0x8e,0x00);/ 写保护关DS1302Write(DS1302_SECOND_WRITE,0x5

19、5);/初始秒值DS1302Write(DS1302_MINUTE_WRITE,0x59);/初始分钟DS1302Write(DS1302_HOUR_WRITE,0x23);/初始为 24 小时模式初始时间为DS1302Write(DS1302_DAY_WRITE,0x02);/20xx年 x 月 x 日星期 xDS1302Write(DS1302_MONTH_WRITE,0x03);DS1302Write(DS1302_YEAR_WRITE,0x16);DS1302Write(DS1302_WEEK_WRITE,0x03);DS1302Write(0x90,0x01);/ 充电DS1302W

20、rite(0xc0,0xf0);/ 初始化一次标示DS1302Write(0x8e,0x80);void Split_display(unsigned char address)/ 取数显示unsigned char i;i=DS1302Read(address);i=i/16+'0'Write_data(i);/ 显示十位Delayms(3);i=DS1302Read(address);i=i%16+'0'16智能电子钟 (LCD 显示 )Write_data(i);/ 显示个位Delayms(5);void Dispaly_shi()/ 显示时间Write_

21、com(0x84);Split_display(DS1302_HOUR_READ);/显示小时Write_data(Chinese_12);/ 显示“ :”Delayms(3);Split_display(DS1302_MINUTE_READ);/显示分钟Write_data(Chinese_12);Delayms(3);Split_display(DS1302_SECOND_READ);/显示秒Delayms(3);Delayms(50);void Display_nian()/ 显示年月日uchar i;Write_com(0x82);Delayms(100);Write_com(0x82

22、);Delayms(100);Write_data('2');Delayms(5);Write_data('0');17智能电子钟 (LCD 显示 )Delayms(1);Split_display(DS1302_YEAR_READ);/显示年份Write_data(Chinese_10);/ 显示“ -”Delayms(3);Split_display(DS1302_MONTH_READ);/显示月份Write_data(Chinese_10);Delayms(3);Split_display(DS1302_DAY_READ);/显示日期Write_data(

23、Chinese_11);Delayms(3);Write_data(Chinese_11);Delayms(3);i=DS1302Read(DS1302_WEEK_READ);/显示星期i=i%16+'0'Write_data(i);Delayms(3);Write_com(0x82);Delayms(50);void inter0() interrupt 0/ 按键中断 1ji = ji+1;if(ji%2 = 0)Write_com(0x0c);elseWrite_com(0x08);18智能电子钟 (LCD 显示 )void inter2() interrupt 2/ 按

24、键中断 2unsigned char k,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;#pragma asmadd a,#1da a#pragma endasmk = ACC;19智能电子钟 (LCD 显示 )elseDS1302Write(DS1302_SECOND_WRITE,k);while

温馨提示

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

评论

0/150

提交评论