基于ATC单片机的电子表设计_第1页
基于ATC单片机的电子表设计_第2页
基于ATC单片机的电子表设计_第3页
基于ATC单片机的电子表设计_第4页
基于ATC单片机的电子表设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计说明书 课程:单片机应用技术课程设计 题目:基于AT89C51单片机的电子表设计 姓名: 学号:1 专业:机械设计制造及其自动化 班级:2011级机 院系:工学院机械系 指导老师:朱煜钰 课程设计时间:黄河科技学院课程设计任务书 工 学院 机械 系 机械设计制造及其自动化 专业 11 级 3 班学号 姓名 指导教师 朱煜钰 题目: 基于AT89C51单片机的电子表设计 课程: 单片机应用技术课程设计 课程设计时间 2014年 10月27 日 至2014年11 月 10 日 共 2 周课程设计工作内容与基本要求(设计要求、设计任务、工作计划、所需相关资料)(纸张不够可加页)1设计要求利用

2、AT89C51单片机作为微控制器,在数码管通过一个控制键转换来显示的时间和日期;能通过多个控制键用来实现时间和日期的调节。2. 设计任务与要求2.1系统硬件电路设计根据该系统设计的功能要求选择所用元器件,设计硬件电路。要求用Proteus绘制整个系统电路原理图。2.2软件设计根据该系统要求的功能进行软件设计,绘制整个系统的软件流程图;根据流程图编写程序并汇编调试通过;列出软件清单,软件清单要求逐条加以注释。2.3 Proteus仿真用Proteus对系统软硬件进行仿真调试并通过。2.4 编写设计说明书内容包括任务书、设计方案分析、硬件部分设计、软件部分设计、调试结果整理分析、设计调试的心得体会

3、等,字数不少于5000字;硬件部分设计要绘制整个系统电路原理图,对各部分电路设计原理做出说明;软件设计部分要(用visio2003画图软件)绘制整个系统框图及各部分的软件流程图,列出程序清单,逐条加以注释,并注明各程序功能块的功能。3工作计划 序号设计内容所用时间1布置任务及调研天3制作与调试天4撰写设计报告书2天合 计14天4主要参考资料单片机课程设计指导书 皮大能 北京理工大学出版社2012.78051单片机实践与应用 吴金戎 清华大学出版社2003.8单片机技术基础教程与实践 夏路易 电子工业出版社2008.1单片机原理及应用张毅刚 高等教育出版社 2012.11基于Proteus的单片

4、机系统设计与仿真实例 蒋辉平 机械工业出版社 2007.7 指导老师签字: 日 期: 目录第1章 概述4 1.1 内容摘要4 1.2 实验基本原理4第2章 设计思路及框图5 2.1 设计思路5 2.2 设计框图5第3章 硬件的设计6 3.1 主控制部件63.2 显示模块 73.3 晶振模块73.4 按键模块83.5 驱动模块8第4章 电路设计原理图9第5章 程序的设计10 5.1 程序流程图105.2 源程序12第6章 系统验证及调试23第7章 总结24第8章 参考文献25第1章 概述1.1内容摘要 本次课程设计基于单片机原理技术介绍了一款于AT89C51芯片作为核心控制器的单片机电子表的设计

5、与制作,主要有两个功能:时钟和秒表。其制作流程主要包括硬件电路原理的实现方案设计、软件程序编辑的实现、电子表正常工作的流程、原理图仿真实现、硬件实物的调试过程。该单片机数字电子表采用LED 数码管能够准确显示时间(显示格式为:时时,分分,秒秒),可随时进行时间调整,时间可采用24 小时制显示,还可实现时钟与秒表的切换,暂停与调时调分调秒,可按自己的要求设置扩展其它的功能。1.2 实验基本原理利用AT89C51单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数,设定定时1秒的中断计数初值为0,每中断一次中断计数初值加1,当加到100时,则表示1s到了,秒变量加1,

6、同理再判断是否1min钟到了,再判断是否1h到了。为了将时间在6位LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。第2章 设计思路及框图2.1 设计思路 针对要实现的功能,采用AT89S51单片机进行设计,AT89S51 单片机是一款低功耗,高性能CMOS8位单片机,第一,熟悉AT89S51单片机,在编程之前必须了解硬件结构尤其是各引脚的

7、用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。这是前期准备工作。第二,设计硬件部分:依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。第三,画图部分:设计好电路后进行画图。第四,软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。第六部分是硬件实现部分:连接电路并导入程序检查电路,实现想要的功能。2.2设计框图 此次设计主要是应用单片机来设计电子时钟,硬件部分主要分

8、以下电路模块:显示电路用8个共阴极数码显示管、按键模块、晶振模块。显示管分别显示:小时、分钟和秒,通过动态扫描进行显示。电路的总体设计框架如下:LED显示模块 单片机模块时钟模块按键模块晶振模块驱动模块图1第3章 硬件的设计3.1主控制部件89C51是一个8位单片机,片内ROM全部采用FLASH ROM技术,晶振时钟为12MHz。89C51是标准的40引脚双列直插式集成电路芯片,有4个八位的并行双向I/O端口,分别记作P0、P1、P2、P3。第31引脚需要接高电位使单片机选用内部程序存储器;第40脚为电源端VCC,接+5V电源,第20引脚为接地端VSS,通常在VCC和VSS引脚之间接0.1F高

9、频滤波电容。硬件原理图如图2所示图23.2显示模块方案一:静态显示。静态显示,即当显示器显示某一字符时,相应的发光二极管恒定导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小电流能获得较高的亮度,且字符不闪烁。但因当所需显示的位数较多时,静态显示所需的I/O口数较大,造成资源的浪费。方案二:动态显示。动态显示,即各位数码管轮流点亮,对于显示器各位数码管,每隔一段延时时间循环点亮一次。利用人的视觉暂留功能可以看到整个显示,但须保证扫描速度足够快,人的视觉暂留功能才可察觉不到字符闪烁。显示器的亮度与导通电流、点亮时间及间隔时间的比例有关。调整参数可实现较高稳定度的显示。动态显示节省

10、了I/O口,降低了能耗。从节省单片机芯片I/O口和降低能耗角度出发,本数字电子钟数码管显示选择设计采用方案二。3.3晶振模块单片机芯片可使用内部时钟电路和外部时钟电路两种方式产生电路所需的时钟脉冲,内部时钟电路实现可用石英晶体和微调电容外接即可达到,外部时钟电路实现需要一个外部脉冲源引入脉冲信号以保证个单片机之间时钟信号的同步。从硬件实现难易角度考虑,内部时钟电路的实现比外部时钟电路的实现更简易。既本数字电子钟设计所需的时钟源采用内部时钟电路实现。所用定时方式为工作方式1,石英晶振为12M,即最小定时时间为1us,最大定时时间约为65.5ms,其电路图如下图2所示。图33.4 按键模块本数字电

11、子钟设计所需按键用于进行显示时间的调整与设置扩展的小键盘。单片机芯片4个I/O口可与按键直接相连,通过编程,单片机芯片即可控制按键接口电平的高低,即按键的开与关,以达到用按键进行显示时间的调整与设置扩展的小键盘的设计要求,本电路采用P1口与按键相连。其电路图如图4所示: 图43.5驱动模块从实物制作简易程度与驱动数码管段码能力角度出发,本数字电子钟设计采用数码管段码与AT89C51P0口相连,单片机AT89C51的P2口控制数码管的片选信号,通过编程,单片机芯片即可控制段码电平的高低的方式实现数码管段码控制。第4章 电路设计原理图图5第5章 程序设计5.1 程序流程图在主程序的开始定义了一组固

12、定单元用来存储计数的分、秒、时的存储单元。在主程序中,对不同的按键进行扫描,实现秒表,时间调整。系统总体流程图如图6所示。图6T0中断入口通过查表方式显示数据位选数值=0秒计数加1秒计数=1000秒计数=0Seconds加1中断返回开始系统子程序流程图如图7所示:是否满24h?显示缓冲单元清0返回NY是否满60m?小时加1分值加1N计数器重新加载循环次数加1是否满1s?是否满60s?秒值加1N开始5.2 源程序程序清单如下:#include#define uchar unsigned char#define uint unsigned int/七段共阴数码显示管段码表/uchar code d

13、ispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/定义初始化变量/秒表部分/uchar Decisec=0;/分秒/uchar Sec=0;/秒/uchar Mint=0;/分/时钟部分/uchar Seconds=0;uchar Minutes=0;uchar Hours=0;uchar Count=0;uchar Numb=0;/按键部分/sbit CHANGE=P10; /切换:可实现跑表与时钟互切 /sbit START=P11; /开始/sbit STOP=P12; /暂停/sbit RST=P13;sbit rst

14、=P14;sbit jia1=P15;sbit jia2=P16;sbit jia3=P17; /复位/函数声明/void delay(uchar ms); /延迟函数/void time_pro1();/秒表处理函数/void time_pro2();/时钟处理函数/void keyscan(); /键盘扫描/void display1(); /数码管显示秒表/void display2(); /数码管显示时钟/*/ 主函数 /*/void main()P1=0xff;TMOD=0x11;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TH1=(655

15、36-10000)/256;TL1=(65536-10000)%256;EA=1;ET0=1;ET1=1;TR0=1;while(1)keyscan();if(Numb=1)display1();if(Numb=0)display2();if(rst=0) Hours=0;Seconds=0;Minutes=0; if(jia1=0) delay(5); if(jia1=1) Hours+; if(Hours=24) Hours=0; if(jia2=0) delay(5); if(jia2=1) Minutes+; if(Minutes=60) Minutes=0; if(jia3=0) d

16、elay(5);if(jia3=1)Seconds+; if(Seconds=60) Seconds=0; /*/ 延迟函数 /*/void delay(uchar ms)uchar i,j;for(i=ms;i0;i-)for(j=500;j0;j-);/*/ 秒表处理函数 /*/void time_pro1()if(Decisec=100)Decisec=0;Sec+;if(Sec=1000)Sec=0;/*/ 时钟处理函数 /*/void time_pro2()if(Seconds=60)Seconds=0;Minutes+;if(Minutes=60)Minutes=0;Hours+;

17、if(Hours=24)Hours=0;/*/ 键盘扫描函数/*/void keyscan()/ 秒表/时钟切换 /if(CHANGE=0) delay(5);if(CHANGE=0)&(Numb=0)display1();Numb=!Numb;while(!CHANGE)display1();if(CHANGE=0)&(Numb=1)Numb=!Numb;while(!CHANGE)display2(); / 开始计时 /if(START=0)&(Numb=1) delay(5);if(START=0)TR1=1;while(!START)display1();/ 暂停计时 /if(STOP

18、=0)&(Numb=1) delay(5);if(STOP=0)TR1=0;while(!STOP)display1(); / 重新计时 /if(RST=0)&(Numb=1) delay(5);if(RST=0) Hours=0;Seconds=0;Minutes=0;Decisec=0;Sec=0;while(!RST)Decisec=0;Sec=0;display1(); /*/ 数码管显示秒表 /*/void display1()P2=0x7f;P0=dispcodeDecisec/10;/ 显示分秒 /delay(1);P2=0xbf;P0=dispcode(Sec%100)%10|

19、0x80;/显示秒个位/delay(1);P2=0xdf;P0=dispcode(Sec%100)/10;/显示秒十位/delay(1);P2=0xef;P0=dispcodeSec/100;delay(1);/*/ 数码管显示时钟 /*/void display2() P2=0x7f;P0=dispcodeSeconds%10;/显示秒个位/delay(1);P2=0xbf;P0=dispcodeSeconds/10;/显示秒十位/delay(1);P2=0xdf;P0=dispcodeMinutes%10|0x80;/显示分个位/delay(1);P2=0xef;P0=dispcodeMi

20、nutes/10;/显示分十位/delay(1);P2=0xf7;P0=dispcodeHours%10|0x80;/显示时个位/delay(1);P2=0xfb;P0=dispcodeHours/10;/显示时十位/delay(1);/*/定时器T1中断服务程序/*/void time_T1()interrupt 3TH1=(65536-10000)/256;TL1=(65536-10000)%256;Decisec+;time_pro1();/秒表时间处理函数/*/定时器T0中断服务程序/*/void time_T0()interrupt 1TH0=(65536-10000)/256;TL

21、0=(65536-10000)%256;Count+;if(Count=100)Seconds+;time_pro2();/时钟时间处理函数/Count=0;第6章 系统的验证及调试时钟调试:秒表调试:第7章 总结这两周的课程设计学到了不少的东西,刚开始的时候我感觉毫无头绪,又要忙着安装软件,又要学习Proteus,以前没有用过,担心忙不过来,做完之后才明白原来用单片机做一个实物也不是想象中的那样困难重重,在这整个的设计过程中,不但复习了书本上的理论知识,提高了自己的动手能力,而且还强化了自己的编程水平,总的来感觉效果还是挺不错的。为期两星期的课程设计使我对单片机的理论知识有了具体的认识。通过这次设计,我的理论知识掌握得更扎实,动手能力明显提高。通过实践让我知道了单片机大致开发的步骤同时,通过网上搜索等多方面的查询资料。通过本次课程设计我学到许多在书本上没有的知识,也认识到理论联系实践的重要。理论学得好,但如果只

温馨提示

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

最新文档

评论

0/150

提交评论