电子时钟程序.doc_第1页
电子时钟程序.doc_第2页
电子时钟程序.doc_第3页
电子时钟程序.doc_第4页
电子时钟程序.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

武汉理工大学单片微型计算机课程设计说明书1系统概述1.1 基本要求运用51单片机及其接口芯片组成系统方案,独立设计一个电子秒表与闹钟的系统,对系统运行过程进行分析和说明,给出系统的流程图,编写出整个系统的程序,并进行仿真。1.2 系统功能(1) 用并行口设计一个具有显示功能的秒表,要求有时间校准功能。(2) 用定时器实现一个电子闹钟,能设定和修改定时的时间,并能到时响铃通知。2 软件支持2.1 proteus简介Proteus是英国Labcenter electronics公司出版的EDA工具软件。它既有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件,包括51系列,AVR,PIC,ARM等常用主流单片机,将电路仿真软件、PCB设计软件和虚拟模型仿真软件合而为一;另一方面它还支持IAR、Keil和MPLAB等多种编译器。这就是我选择用proteus来进行设计的原因。2.2 keil简介在本次设计中我所采用的编译软件是Keil C51,作为51系列兼容单片机C语言软件开发系统,在功能上、结构性、可读性、可维护性上比汇编语言有明显的优势,同时编译生成的“.hex”文件能被proteus所支持,为我提供了很大的方便。2.3 AT89C2051介绍AT89C2051是一种低电压、高性能CMOS8位单片机,片内含2k bytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机数据存储器,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。是一种强劲的微型处理器,对许多嵌入式控制应用提供一定高度灵活和成本低的解决办法。下图为其芯片引脚:图2-1 AT89C2051引脚图各引脚功能如下:(1) VCC:电源电压。 (2) GND:地。 (3) P1口:P1口是一个8位双向I/O口。口引脚P1.2P1.7提供内部上拉电阻,P1.0和P1.1要求外部上拉电阻。P1.0和P1.1还分别作为片内精密模拟比较器的同相输入(ANI0)和反相输入(AIN1)。P1口输出缓冲器可吸收20mA电流并能直接驱动LED显示。当引脚P1.2P1.7用作输入并被外部拉低时,它们将因内部的写入“1”时,其可用作输入端。当引脚P1.2P1.7用作输入并被外部拉低时,它们将因内部的上拉电阻而流出电流。 (4) P3口:P3口的P3.0P3.5,P3.7是带有内部上拉电阻的七个双向I/O口引脚。P3.6用于固定输入片内比较器的输出信号并且它作为一通用I/O引脚而不可访问。P3口缓冲器可吸收20mA电流。当P3口写入“1”时,它们被内部上拉电阻拉高并可用作输入端。用作输入时,被外部拉低的P3口脚将用上拉电阻而流出电流。 P3口还用于实现AT89C2051的各种第二功能,如下表所列:引脚口功能P3.0RXD串行输入端口P3.1TXD串行输入端口P3.2INT0 外中断0P3.3INT1 外中断1P3.4T0定时器 0外部输入P3.5T1定时器 1外部输入P3口还接收一些用于闪速存储器编程和程序校验的控制信号。 (5) RST:复位输入。RST一旦变成高电平所有的I/O引脚就复位到“1”。当振荡器正在运行时,持续给出RST引脚两个机器周期的高电平便可完成复位。每一个机器周期需12个振荡器或时钟周期。 (6) XTAL1:作为振荡器反相器的输入和内部时钟发生器的输入。 (7) XTAL2:作为振荡器反相放大器的输出。3 方案设计(1) “时钟”基准时间由单片机内部的定时中断提供,定时时间应是“秒” 的整除数,且长短适宜。最长不能超过16位定时器的最长定时时间;最短不能少于中断服务程序的执行时间。(2) 用一个计数器对定时中断的次数进行计数,可以进行“分”、“时” 定时。 (3) LED数码管显示器采用“动态扫描驱动”时要注意的是:驱动信号的 维持时间必须大于“起辉时间”,而驱动信号的间歇时间必须小于“余辉时间”,但驱动电流大小受硬件电路能力和LED数码管极限功耗的制约。(4) 设计闹铃时,先设计一个存储功能,可以将设定的闹铃值存储下来,再在主程序中设定一个查询按键服务程序,检查当前时间是否与闹铃子程序中设定时间相等,若相等,则在此时给蜂鸣器提供电流。4 系统流程图设计开始寄存器赋初值初始化,开定时器0显示时间按键扫描闹铃程序秒表计时显示模式调整闪烁位移位闪烁加一程序图41 主程序流程图如图,我采用通过查询模式,通过按下不同的键,就会进入相应的子程序,同时判断有无达到闹铃所设置的时间。5 硬件实现及proteus仿真图图51 电子表系统设计及proteus仿真图6 模块响应流程图6.1 秒表模块流程图图6-1 秒表程序流程图6.2 闹铃模块设计流程图图6-2 闹铃响应流程图7 功能说明功能按键解释: S1为功能选择按键,S2为功能扩展按键,S3为数值加一按键。操作时,连续短时间(小于1秒)按动S1,即可在以上的几个功能中连续循环。中途如果长按(大于2秒)S1,则立回到时钟功能的状态。功能说明:(1) 时钟功能:上电后LED数码管会显示已设定好的10:10:00。(2) 校时功能:短按一次S1,当前时间变为闪烁状态,按动S2小时位加1,按动S3分钟位加1。(3) 闹钟功能:短按二次S1,显示状态为22:10:00。冒号为长亮。按动S2小时位加1,按动S3分钟位加1,秒时不可调。(4) 倒计时功能:该功能为拓展功能。短按三次S1,显示状态为0。按动S2则从低位依次显示高位,按动S3则相应位加1,当S2按到第6次时会是所设定的时间状态下开始倒计时,再次按动S2将再次进入调整功能,并且停止倒计时。(5) 秒表功能:短按四次S1,显示状态为00:00:00.冒号为长亮。按动S2则开始秒表计时,再次按动S2则停止计时,当停止计时的时候按动S3则秒表清零。(6) 计数器功能:短按五次S1,显示状态为00:00:00。冒号为长灭,按动S2则计数器加1.按动S3则计数器清零。心得体会单片微型计算机作为一门专业必修课,对我们学习专业知识,甚至是工作用处极大,所以要认真的学习。通过此次程序编写的过程,我发现要要重视程序的模块化,这样修改起来会比较方便;其次设计完成后一定要进行调试,检查系统是否具有自己所设定的功能,当然没有实物的话可以通过仿真来检查。对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的多半问题多数都是由于我们不够严谨。另外,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。短暂的课程设计一转眼就过去了,虽然历尽艰辛但却让我加深了对课堂上所学的东西的理解,明白了理论与实际相结合是很重要的,我们需要提高自己的实际动手能力和独立思考的能力,以及解决问题的能力。总之,中间虽然经过了很多的波折,但最终还是成功了,其实不管成功与否这次经历对于我们来说都是一笔宝贵的财富,它对于我们以后的生活和工作都将意义深远。参考文献1 谢瑞和 串行技术大全北京:清华大学出版社20032 张迎新 单片微型计算机原理,应用及接口技术 武汉:华中科技大学出版社19993 马忠梅 单片机C语言应用程序设计 北京:北京航空航天大学出版社 20014张靖武,周灵彬 单片机系统的PROTEUS设计与仿真电子工业出版社 20075 金炯泰编著金奎焕等译 如何使用KEIL 8051 C编译器 北京:北京航空航天大学出版社 20026 林立等 单片机原理及应用基于Proteus和Keil C 电子工业出版社 2009附录:#include #define uchar unsigned char#define uint unsigned intuchar code table=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7F,0x3F;uchar code table1=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0x3F;uchar code table2=0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x37;sbit key1=P35;sbit key2=P34;sbit key3=P32;sbit L5=P31;sbit L3=P33;sbit L1=P35;sbit L4=P32;sbit L2=P34;sbit L6=P30;sbit P3_7=P37;sbit led=P17;char miao=0,fen=10,shi=10,count1,count1_1,count2,count3,count4,num,ci,wei1,wei2,wei3,wei4,wei5,wei6,time,dingmiao,dingfen=10,dingshi=22,miaobiao;char ji1,ji2,ji3,ji4,ji5,ji6;char miao_ge,miao_shi,fen_ge,fen_shi,shi_ge,shi_shi;uint kai,change1,xun1,change2,xun2;uint xiao1,xiao2,xiao3,xiao4,xiao5,xiao6;uint naozhong; void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void didi() P3_7=1; delay(2); P3_7=0; delay(2); void xianshi(uchar a,uchar b) if(num!=1) if(num=2|num=4)P1=tablea; else if(num=3|num=5|change1=1) P1=table1a; else P1=tablea; else if(change2=1)P1=table2a; else P1=table1a; if(b=1) L5=0; delay(2); L5=1; if(b=2) L3=0; delay(2); L3=1; if(b=3) L1=0; delay(2); L1=1; if(b=4) L4=0; delay(2); L4=1; if(b=5) L2=0; delay(2); L2=1; if(b=6) L6=0; delay(2); L6=1; void miaox(uchar t) uchar y1,y2;y1=t%10;y2=t/10; xianshi(y1,1); xianshi(y2,2); void fenx(uchar t) uchar y3,y4;y3=t%10;y4=t/10; xianshi(y3,3); xianshi(y4,4); void shix(uchar t) uchar y5,y6;y5=t%10;y6=t/10; xianshi(y5,5); xianshi(y6,6); void display() if(num=2) if(dingshi=6)num=0; if(num!=0) if(key2=0) delay(4); if(key2=0) while(key2=0)display();if(num=1) shi+;if(shi23)shi=0; display(); if(num=2) kai=0; dingshi+; if(dingshi=25) kai=0; dingfen=0; dingshi=0; dingmiao=0; if(num=3) ci+;if(ci=1)xiao1=1;if(ci=2)xiao1=1;xiao2=1;if(ci=3)xiao1=1;xiao2=1;xiao3=1; if(ci=4) xiao1=1;xiao2=1;xiao3=1;xiao4=1;if(ci=5)xiao1=1;xiao2=1;xiao3=1;xiao4=1;xiao5=1;if(ci=6)xiao1=1;xiao2=1;xiao3=1;xiao4=1;xiao5=1;xiao6=1;if(ci=7)TR1=1;if(ci=8)TR1=0; xiao1=0;xiao2=0;xiao3=0;xiao4=0;xiao5=0;xiao6=0;ci=0; if(num=4) miaobiao+;if(miaobiao=1) TH1=(65536-10000)/256; TL1=(65536-10000)%256; TR1=1; display(); if(miaobiao=2) if(miaobiao%2=0)TR1=0; else TH1=(65536-10000)/256; TL1=(65536-10000)%256; TR1=1; display(); if(num=5) ji1+; if(ji19) ji1=0; ji2+; if(ji29) ji2=0; ji3+; if(ji39) ji3=0; ji4+; if(ji49) ji4=0; ji5+; if(ji59) ji5=0; ji6+; if(num!=0) if(key3=0) display(); delay(4); display(); if(key3=0) while(key3=0)display();if(num=1) fen+;if(fen59)fen=0;display();if(num=2) kai=0; dingfen+;if(dingfen59)dingfen=0; display(); if(num=3) if(ci=1) miao_ge+; if(miao_ge9)miao_ge=0; if(ci=2) miao_shi+; if(miao_shi5)miao_shi=0; if(ci=3) fen_ge+; if(fen_ge9)fen_ge=0; if(ci=4) fen_shi+; if(fen_shi5)fen_shi=0; if(ci=5) shi_ge+; if(shi_ge9)shi_ge=0; if(ci=6) shi_shi+; if(shi_shi2)shi_shi=0; if(num=4) wei1=0; wei2=0; wei3=0; wei4=0; wei5=0; wei6=0; miaobiao=0; TR1=0; if(num=5) ji1=0;ji2=0;ji3=0;ji4=0;ji5=0;ji6=0; void init() TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;TR0=1;TR1=0;EA=1;ET0=1;ET1=1; void main() init();while(1) scan(); display(); if(dingmiao=miao&dingfen=fen&dingshi=shi&kai=0) kai=1; naozhong=1; TR1=1; if(naozhong=1) didi(); void t0(void ) interrupt 1using 0 TH0=(65536-50000)/256;TL0=(65536-50000)%256;count1+;count1_1+;if(count1_1=10) count1_1=0; xun1+; if(xun1=1) change1=0;if(xun1=2) xun1=0; change1=1; if(num=1) xun2+; if(xun2=1) change2=0; if(xun2=2) xun2=0; change2=1; if(count1=20) count1=0; miao+; if(miao59) miao=0; fen+; if(fen59) fen=0; shi+; if(shi23)shi=0; void t1(v

温馨提示

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

评论

0/150

提交评论