




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机电子时钟仿真设计学 院: 哈尔滨江南职业技术学院专业名称:计算机应用技术学生姓名:张玉斌完成日期 2011年 12月 4日摘要电子时钟是一种通过电子元器件控制、执行、显示的电子产品。其主要的功能是显示时间和温度,并能够进行时间的调节和闹铃的定时。电子时钟广泛应用于各种公共场所、商业场合和居民家庭。由于其走时准确、误差极小等特点受到了广泛的欢迎。关键字:proteus仿真软件;单片机;电子时钟目录1、 前言12、 总体方案设计1 1、设计方案的选择、对比与确定1 2、系统设计思路13、 单元模块设计24、 程序设计流程35、 系统功能和指标参数86、 设计总结8参考文献10附录111附录212附录3131、 前言随着电子技术的不断发展,单片机技术在设计中所体现出来的优势越来越明显,它不仅是电子信息类专业的一个重要部分,而且在其他类专业工程中也是不可缺少的。广泛地应用于家电、工业过程控制、仪器仪表、智能武器、航天和空间飞行器等领域,已成为新一代一些电子设备不可缺少的核心部件。目前世界上单片机年产量已达十亿多片,通常是当年微处理器产量的4-5倍以上。用最少的芯片就能够实现最强大的功能。可以想见,这是将来电子产品的主流方向,他将无可置疑地一步步取代其它同类产品,其数量之大和应用面之广,是其他任何类型的计算机所无法比拟的。单片机是应工程测控需要而诞生的。它把计算机最基本的功能电路,如CPU、程序存储器、数据存储器、I/O接口、定时、计数器、中断系统等集成到一块芯片上,形成单片形态的计算机。单片机通常以最小系统运行,在家用电器中和常用的智能仪器仪表中常常可以“单片”工作,同时单片机在我们日常生活中叶经常见到,同时单片机在我们日常生活中也经常见到,如电子表、舞厅里的一些等国的控制、工厂一些自动化控制等。将来只要有自动控制方面的都会离不开单片机的开发和使用,对于现代的自动化控制起着举足轻重的作用。2、 总体方案设计1、设计方案的对比、选择及确定电子时钟的核心内容是对时间的处理。具体说是对各位时间的正常运行、进位、调节和定时。用什么来处理时间就成为了关键问题。大体思路有两种,一种是直接用89C51内部的定时器,另一种是用专门的时间处理芯片。决定选取89C51内部时钟来设计电子时钟。而在芯片的选择上,使用了以下几种芯片:AT89C51、DS18B20和LM016L。2、 系统设计思路此设计即在液晶屏上显示年、月、日、时、分、秒、星期及温度(原理框图如图1.1),电路包括一下几个部分:键盘、单片机、温度传感器及显示电路。各部分说明:(1) 键盘用于校正、调节液晶上显示的时间。(2) 单片机通过输出各种电脉冲信号开驱动控制各部分正常工作。(3) 温度传感器用来采集温度值。(4) 单片机发送的信号经过显示电路通过译码最终在液晶上显示出来。系统工作过程:1、时间的主要处理过程是在CPU中完成的。CPU会随时对时间进行读取数据的操作。在读取了相应的寄存器的值后,CPU将读取的值进行处理,再通过I/O口把数据传入LM016L。 2、LM016L在接受到数据后在相应的位置上进行显示。 3、温度信号会通过DS18B20进行采集,然后通过CPU处理后同样传给LM016L。系统的设计按照系统的工作过程,将CPU相应的I/O口分配给对应的芯片完成相应的控制和数据的传输。简单地概括为以CPU为中心,将DS18B20的时间和温度信号通过CPU处理后输入到LM016L进行输出显示。3、 单元模块设计1 AT89C51单片机系统设计AT89C51是一种低电压、高性能CMOS8位微处理器,内部有2K字节的闪速PEROM,该芯片采用ATMEL公司的高密度、非挥发性存储器工艺制成,且与工业标准MCS-51系列的引脚和指令兼容,FLASH系列存储器为快速擦写存储器。其最小系统设计如图所示: 2 DS18B20温度传感器电路设计DS18B20温度传感器是美国Dallas公司生产的最新的单线数字温度传感器,支持“1-Wire”接口。其DQ端经上拉电阻接在P3.3引脚。 3 液晶LM016L电路设计液晶LM016L用来显示时间、日期、星期及温度。其数据口与P0口相连,P2.0、P2.1和P2.2分别控制数据命令选择端、读写选择端及使能端。 4 键盘电路键盘用来调节时间。分别于P1.4、P1.5、P1.6和P1.7连接。电路如图所示。键盘功能描述: Key_2键为时间设置键 Key_3键为时间加一键 Key_4键为时间减一键 4、 程序设计流程1 主程序设计流程开始 2 键盘扫描程序设计流程调时方法:按下Key_2键为设置时间按键次数功能1设置时间秒2设置时间分3设置时间时4设置日期日5设置日期月6设置日期年7设置闹铃秒8设置闹铃分9设置闹铃时10设置闹铃开关11设置完成3 液晶电路部分函数分为:液晶写入指令函数、液晶写入数据函数和液晶初始化函数开始开始产生下降沿,指令执行结束送入数据数据/指令选择置为数据读写选择置为写数据/指令选择置为指令结束产生下降沿,指令执行送入数据读写选择置为写 液晶写入指令函数 液晶写入数据函数开始设置液晶屏工作模式开显示,不显示光标结束向液晶屏写入时间固定格式时间从第二行第一位之后开始显示向液晶屏写入日期固定格式 4 显示类函数其中包括:温度显示子函数、时间格式显示子函数、日期格式显示子函数、写星期函数和显示日期和时间子函数。结束在相应位置上显示读取个位数读取十位数开始 附:温度显示子函数、时间格式显示子函数、日期格式显示子函数和显示日期和时间子函数均符合此程序流程图。结束显示SUN显示STA显示FRI显示THU显示WED显示TUE显示MON开始确定星期字符显示的位置 判断是星期几星期为日星期为六星期为五星期为四星期为三星期为二星期为一 写星期函数5、 系统功能和指标参数本次设计中,基本的程序要求已达到,既可以修改时间和闹铃,在闹铃响时,长按减一键停止响。时间精度有待提高。6、 设计总结做了两周德课程设计,有很多的心得体会。根据要求,我们每组一人,我选的题是:电子时钟。一开始感觉很难,再加上c语言是大一学的,现在两年过去,虽然汇编语言刚刚学过,但编个稍大点的程序,一般不选它,主要是汇编的程序结构不容易掌握,不清晰,不容易编写,更不容易理解。根据网上的资料,我画好protues仿真图,写好程序,进行仿真,结果不对,修改,仿真,如此往复,功夫不负有心人,成功!通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。参考文献【1】张俊漠. 单片机中级教程-原理与应用(第2版). 北京:北京航天航空大学出版社,2006【2】赵晓安. MCS-51单片机原理及应用. 天津:天津大学出版社,2001.3【3】李广第单片机基础(第1版)北京:北京航空航天大学出版社,1999 【4】徐惠民、安德宁单片微型计算机原理接口与应用 第1版 北京:北京邮电大学出版社,1996【5】何立民从Cygnal 80C51F看8位单片机发展之路 单片机与嵌入式系统应用,2002年,第5期:P5-8附录 附录1原器件清单:芯片器件数目芯片器件数目AT89C511电阻 1K1DS18B201按钮5LM016L1蜂鸣器1电容 33pF2三极管2N54011108排阻13.6V直流电源1喇叭1电解电容40uF1晶振11.0592MHz1附录2程序设计原理图:附录3主程序:#include#define uchar unsigned char#define uint unsigned intsbit rs=P05;sbit rw=P06;sbit e=P07; sbit k1=P32;sbit k2=P31;sbit k3=P30;uchar count,k1value;char year,month,day,hour,min,second;uchar code table=5-17 2009 sun;uchar code table1= 00:00:00;void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=120;y0;y-);void write_command(uchar command) rs=0; e=0; P2=command; delay(5); e=1; delay(5); e=0; void write_datas(uchar datas) rs=1; e=0; P2=datas; delay(5); e=1; delay(5); e=0; void write_time(uchar add,uchar datas) uchar high,low; high=datas/10; low=datas%10; write_command(0x80+0x40+add); write_datas(0x30+high); write_datas(0x30+low);void keyscan() if(k1=0) delay(5); if(k1=0) k1value+; while(!k1); if(k1value=1) TR0=0; write_command(0x0f); write_command(0x80+0x40+11); if(k1value=2) write_command(0x80+0x40+8); if(k1value=3) write_command(0x80+0x40+5); if(k1value=4) k1value=0; write_command(0x0c); TR0=1; if(k1value!=0) if(k2=0) delay(5); if(k2=0) while(!k2); if(k1value=1) second+; if(second=60) second=0; write_time(11,second); write_command(0x80+0x40+11); if(k1value=2) min+; if(min=60) min=0; write_time(8,min); write_command(0x80+0x40+8); if(k1value=3) hour+; if(hour=24) hour=0; write_time(5,hour); write_command(0x80+0x40+5); if (k1value!=0) if(k3=0) delay(5); if(k3=0) while(!k3); if(k1value=1) second-; if(second=-1) second=59; write_time(11,second); write_command(0x80+0x40+11); if(k1value=2) min-; if(min=-1) min=59; write_time(8,min); write_command(0x80+0x40+8); if(k1value=3) hour-; if(hour=-1) hour=23; write_time(5,hour); write_command(0x80+0x40+5); void main() uchar num; rw=0; e=0; write_command(0x38); write_command(0x0c); write_command(0x06); write_command(0x01); write_command(0x80); for(num=0;num15;num+) write_datas(tablenum); delay(20); write_command(0x80+0x40); for(num=0;num14;num+) write_datas(table1num); delay(20); TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; while(1) keyscan(); void timer0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; count+; if(count=20) count=0; second+; if(second=60) second=0; min+; if(min=60) min=0; hour+; if(hour=24) hour=0; write_time(5,hour); write_time(8,min); write_time(11,second); 键盘头文件:sbit k1=P11;sbit k2=P12;sbit k3=P13;sbit buzzer=P20;Uchar count,k1value,num,hour,min,yearh,yearl,day,Uchar month,second,ring_controler,I;uchar code table1=05:59:00;uchar code table2=Alarm : onoff;uchar code table3=Date: 2009-01-01;uchar code table5=Happy Every Day!;struct alarm char hour; char min;alarm1;void keyscan() if(k1=0) delay(5); if(k1=0) k1value+; TR0=0; while(!k1); switch(k1value) case 1:write_command(0x0f); write_command(0x80+0x40+15);break; case 2:write_command(0x80+0x40+12); break; case 3:write_command(0x80+0x40+9);break; case 4:write_command(0x80+15);break; case 5:write_command(0x80+12);break; case 6:write_command(0x80+9);break; case 7:write_command(0x01);write_command(0x02); write_command(0x80); for(num=0;num16;num+) write_datas(table5num); delay(20); write_command(0x80+0x40); for(num=0;num15;num+) write_datas(table2num); delay(20); write_num(1,7,alarm1.hour); write_num(1,10,alarm1.min); write_command(0x80+0x40+11); break; case 8:write_command(0x80+0x40+8); break; case 9:write_command(0x80+0x40+15); break; case 10:/切换DATE&TIME显示 write_command(0x01); /清屏 write_command(0x02); write_command(0x80); for(num=0;num5;num+) write_datas(table3num); delay(20); write_num(0,6,yearh); write_num(0,8,yearl); write_symbol(0,10,-); write_num(0,11,month); write_symbol(0,13,-); write_num(0,14,day); write_num(1,8,hour); write_symbol(1,10,:); write_num(1,11,min); write_symbol(1,13,:); write_num(1,14,second); I=ReadTemperature()/10; write_num(1,0,I); write_symbol(1,2,0xdf); write_symbol(1,3,C); k1value=0; write_command(0x0c); TR0=1; break; if(k1value!=0) if(k2=0) delay(5); if(k2=0) while(!k2); switch(k1value) case 1: second+;if(second=60)second=0;write_num(1,14,second); write_command(0x80+0x40+14); break; /调秒 case 2: min+;if(min=60)min=0;write_num(1,11,min);write_command(0x80+0x40+11); break; case 3: hour+;if(hour=24)hour=0;write_num(1,8,hour);write_command(0x80+0x40+8);break; case 4: day+;if(day=32)day=0;write_num(0,14,day);write_command(0x80+14);break; case 5: month+;if(month=13)month=1;write_num(0,11,month);write_command(0x80+11);break; case 6: yearl+;if(yearl=99)yearl=0;write_num(0,8,yearl);write_command(0x80+8);break; case 7: alarm1.min+;if(alarm1.min=60)alarm1.min=0;write_num(1,10,alarm1.min);write_command(0x80+0x40+11); break; case 8: alarm1.hour+;if(alarm1.hour=24)alarm1.hour=0;write_num(1,7,alarm1.hour);write_command(0x80+0x40+8); break; case 9:ring_controler=1;write_command(0x80+0x40+13);for(num=13;num14;num+)write_datas(table2num);delay(20); break; if (k1value!=0) if(k3=0) delay(5); if(k3=0) while(!k3); switch(k1value) case 1:second-;if(second=-1)second=59;write_num(1,14,second);write_command(0x80+0x40+14); break; /调秒 case 2:min-;if(min=-1)min=59;write_num(1,11,min);write_command(0x80+0x40+14); break; case 3:hour-;if(hour=-1)hour=23;write_num(1,8,hour);write_command(0x80+0x40+14);break; case 4:day-;if(day=0)day=31;write_num(0,14,day);write_command(0x80+14);break; case 5:month-;if(month
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑方案设计功能布局包括
- 建筑学方案设计方向
- 园区分管领导个人年度工作总结
- 电气安全培训收益课件
- 运城线上营销活动策划方案
- 毕节市安全培训课件
- 建筑水电节能方案设计
- 园建施工方案免.费下载
- 2025-2030中国生酮饮食食品市场竞争深度调查及营销创新战略规划报告
- 吉安钢结构防腐施工方案
- DB63-T 1921-2021 交通运输专业空间数据分类与编码规范
- 2025年部编版八年级道德与法治上册全册教案
- 2025年移动式压力容器充装R2作业证考试练习题库含答案
- 北师大版(2024版)三年级上册第七单元第6节《生活中的小数》教学设计
- 2025年中国银行招聘考试试题及答案
- 土石方工程的合作协议书
- 医疗质量安全专项整治行动自查清单8-患者隐私
- 字体设计字体标志与版式设计
- 2025人教版(2024)八年级上册英语教学计划
- 建筑垃圾处理厂运行管理方案
- 2025年重庆全国导游资格考试(政策与法律法规、导游业务)历年参考题库含答案详解(5套)
评论
0/150
提交评论