ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:267.61KB ,
资源ID:19886777      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19886777.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理课程设计报告时钟设计文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机原理课程设计报告时钟设计文档格式.docx

1、第四章 软件设计 124.1 流程图及其说明 124.2软件系统的使用说明 134.2.1 MAX7219驱动 134.2.2时钟进位部分 144.2.3调整时间部分 144.2.4延时函数及去抖 144.3源程序代码 15第五章 收获与体会 25参考文献 27第一章 微机应用系统课程设计的目的意义1.1 设计目的以单片机为控制核心的智能电子钟以时间准、功能强、外形美而越来越受到人们的青睐。本实验通过设计一个智能电子钟,旨在使学生能够做到以下几点。l了解智能电子钟的功能特点与工作原理。 2掌握以单片机为核心实现电子钟功能的思路和方法。3进一步掌握多位数码管显示的原理和接口方法。1.2 设计内容

2、及要求(1)编程语言为C语言;(2)基于单片机的硬件电路设计与调试;(3)从键盘上输入当前时间,格式为“XX(小时):XX(分):XX(秒),以此为起点,每秒刷新一次,1秒钟延迟方式采用软件方式并用子程序编写或者定时器实现,主程序用于显示时间结果和调用子程序,由于软件延迟产生的误差每小时调整一次,保证每小时误差不超过0.1秒。1.3 课程在教学计划中的地位和作用微机应用系统设计与综合实验课程是测控技术专业本科生必修的一门技术基础课程。通过该课程的学习使学生对微机系统有一个全面的了解、掌握常规芯片的使用方法、掌握简单微型计算机应用系统软硬的设计方法。为了使我们微机应用课程设计目标更明确,要求更具

3、体,学生收获更大,我们特编写课程设计任务书,学生可根据本人的爱好任选其中一个课题,要求独立完成课题,写出课程设计说明书,设计出电路原理图,说明工作原理,画出电路板图,编写程序及程序流程图。希望同学认真阅读本任务书,认真查阅资料与上机调试,圆满完成课程设计。通过课程设计进一步锻炼同学们在微型计算机应用方面的实际工作能力。计算机科学在应用上得到飞速发展,因此,学习这方面的知识必须紧密联系实际:掌握这方面的知识更要强调解决实际问题的能力。同学们要着重学会面对一个实际问题,如何去自己收集资料,如何自己去学习新的知识,如何自己去制定解决问题的方案并通过实践不断地去分析和解决前进道路上的一切问题,最终到达

4、胜利的彼岸。1.4 系统的主要功能及使用方法该单片机数字时钟的主要功能:可做时钟用,并且时间可自行设置。使用方法如下:系统中,单片机做控制器,实现时钟计时及时间设置的相关控制;数码管做显示,显示当前时间,由MAX7219完成译码;四个按钮开关用于实现时间的设置。按钮1:功能键;按钮2:增加键;按钮3:减少键;按钮4:进入计时键。线路连接好之后,开始计时,数码管显示时间,为正常计时状态。时间初值是00:00:00。当需要对时间进行设置时,按下按钮1,进入时间调节状态。按钮1按下的次数决定当前要调节的位。如:按一次调秒的个位,该位闪烁,此时如按下按钮2,秒的个位递增调节,按下按钮3,则秒的个位递减

5、调节。依次可对需要调节的任意位进行设置,当前设置的位闪烁。设置完时间后,按下按钮4即可从设置的时间开始计时,再次进入正常计时状态。第二章 总体设计方案2.1 设计思想要完成本实验任务要求的功能,可以将系统分为以下几个部分来设计:定时器/计数器电路、时间及功能设置电路、时间显示电路等。其中,定时器/计数器电路是整个电子钟设计的基础。一般都是用定时/计数器来产生定时中断信号(例如定时时间间隔为1/100s),然后通过软件计数器来相继获得实时时钟的秒、分、时等时间值。实现智能化电子钟的软件主要由主程序和中断服务程序两模块组成。 在主程序中,除了完成对系统的初始化和中断向量的设置外,需要对各种软件时间

6、计数器进行查询、比较和判断,并根据判断结果发出各种控制信号,以完成时钟的显示操作。 在定时中断服务程序中,需要设计1/100s计数器,秒个位、秒十位计数器,分个位、分十位计数器,时个位、时十位计数器以及由键盘设置的各定时时间计数器和各作息时间计数器等等,并对各计数器酌情作加1计数。然后,由主程序来完成对各种计数器内容的查询。 注意事项:向定时器通道写计数初值时,无论以二进制还是十进制形式写入,如果其值超过255,需分两次分别写入计数器的高、低字节,否则只需写一次。究竟写一次还是两次,要在写初值之前通过写控制字来设置。第三章 硬件设计3.1 硬件设计概要 这次做的是单片机时钟程序设计,顾名思义,

7、首先应该用到的是单片机。我们用单片机来驱动程序,完成程序的运行。由于我们以前没有学过单片机这方面的知识,我们运用起来比较陌生,只能是一边学一边用,所以做的设计比较简单,只有最基本的时钟功能和校准功能。当然既然是时钟,就少不了数码管,这还要用到一片7219芯片来驱动数码管,使它显示相应的时间。 这次我们的课程设计,主要目的在于熟悉单片机的原理和应用。由于时钟设计,所以相对的硬件设计较少且连线比较简单,这里不再详细介绍。3.2 所用到的芯片及其各自功能说明3.2.1单片机及其功能说明这次课程设计的主要目的就是熟悉单片机,下面我们先就单片机的一些功能加以介绍。首先我们来连接一下单片机的引脚图,如果,

8、具体功能在下面都有介绍。 单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。 电源: VCC - 芯片电源,接+5V; VSS - 接地端; 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 控制线:控制线共有4根, ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址 PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 PSEN:外ROM读选通信号。 RST/VPD:复位/备用电源。 RST(Reset)功能:复位信号输入端。 VPD功能:在Vcc掉电情况下,接备用电源。 EA/Vpp

9、:内外ROM选择/片内EPROM编程电源。 EA功能:内外ROM选择端。 Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。 I/O线 80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。STC 89C52图3.1 单片机引脚图及引脚功能 拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C52的芯片,下面我们就看一下如何给它连线。1、 电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40管脚,负极(地)接20管脚。 2、 振蒎电路:单片

10、机是一种时序电路,必须供给脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶体震荡器,电容,连上就能了,按图3.1接上即可。3、 复位管脚:按图3.1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。4、 EA管脚:EA管脚接到正电源端。 至此,一个单片机就接好,通上电,单片机就开始工作了。 我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个管脚相连,不然单片机就没法控制它了,那么和哪个管脚相连呢?单片机上除了刚才用掉的5个管脚,还有35个,我们将这个LED和1脚相连。(见图1,其中R1是限流电

11、阻) 按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1管脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不能由我们来更改。3.2.2 MAX7219及其功能说明设计题目做的是数字时钟,首先应该有数码管来显示相应的时间,这要用到一片7219芯片来驱动所用到的数码管。下面我们就7219的功能做一些简单的介绍。MAX7219是MAXIM公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219

12、可驱动8个7段(包括小数点共8段)数字LED、LED条线图形显示器、或64个分立的LED发光二级管。该芯片具有10MHz传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置所有LED的段电流。它的操作很简单,MCU只需通过模拟SPI三线接口就可以将相关的指令写入MAX7219的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。此外它还支持多片7219串联方式,这样MCU就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。MAX7219的外部引脚分配如图3.2所示及内部寄存器结构如表3.1所示。图3.2 MAX7219的外部引脚分配各引脚的功

13、能为:DIN:串行数据输入端DOUT:串行数据输出端,用于级连扩展LOAD:装载数据输入CLK:串行时钟输入DIG0DIG7:8位LED位选线,从共阴极LED中吸入电流SEG ASEG G DP 7段驱动和小数点驱动ISET: 通过一个10k电阻和Vcc相连,设置段电流MAX7219有下列几组寄存器:(如图3)MAX7219内部的寄存器如下图,主要有:译码控制寄存器、亮度控制寄存器、扫描界限寄存器、关断模式寄存器、测试控制寄存器。编程时只有正确操作这些寄存器,MAX7219才可工作。 表3.1 MAX7219内部的相关寄存器3.3硬件电路设计系统原理图及其说明由于第一次使用单片机,所做的课程设

14、计相对比较简单,只用到以上两片芯片,其具体硬件电路设计系统原理图如下图所示:基于硬件的设计相对比较简单,因为我们做的都是最简单的功能,没有什么多余的附加功能,所以不管是从编程还是软件设计方面都相对比较简单。只需要在电脑用C语言完成相应的功能,把程序下载到单片机,用单片机来实现相应的功能。用单片机的程序来驱动7219,使数码管显示相应的时间。硬件连线的时候要注意单片机应与试验箱共地,否则数码管不会显示时间。第四章 软件设计4.1 流程图及其说明软件编程我们可以分为几个模块来编程,这样可以是整个程序显得更清晰、容易理解。我们程序出现错误的时候也方便我们调试。具体整个程序的流程图如下所示:4.2软件

15、系统的使用说明我们可以把整个软件系统分成几个部分:7219驱动;时钟进位部分;调整时间部分;延时函数及去抖部分。下面我们对各个部分分别加以说明。4.2.1 MAX7219驱动对于时钟电路的设计我们首先做的是数码管驱动芯片7219。通过7219的驱动,是数码管能显示通过软件设置的时间。电路原理图如下图,MAX7219与单片机的连接只需要3条线:LOAD(CS)片选引脚、CLK串行时钟引脚、DIN串行数据引脚。其中C1 为电源滤波电容,R1用来设置段电流。图4.2 电路原理图通过上面的原理和相应的程序使数码管完成显示功能,具体程序将在下面的章节分析。4.2.2时钟进位部分这一部分是我们设计的主要部

16、分,主要完成时钟的进位和正常的时间显示问题。我们定义了一个长度为六的数组,分别用来表示时钟的时、分、秒的个位和十位。这当中主要考虑的就是时间的进位问题以及十、分、秒十位和各位的进制问题。其中时、分、秒的个位都是十进制。而十位是六进制。当分、秒的十位为六而个位为零的时候要同时清零,已达到时、分整体六十进制。这对于软件编程来说还是比较简单的,只需要用if语句就可以完成。这主要需要注意的就是时分秒的同时清零问题,让它完成时钟的具体功能。具体的程序后面源程序清单中会有介绍。4.2.3调整时间部分这部分主要做的是时间的初始化问题以及时间的调整问题。由于用的是51单片机,没有办法连接电脑的键盘,所以时间键

17、盘的初始化只能用按钮来代替。由于他和时间的调整问题属于一个功能,所以放在了一起进行编程,这样可以简化程序,变得更加容易理解同时便于调试。在这一个功能我们设置了四个功能键。一个用来管理中断,用来关和开中断,方便我们对时间进行调整。一个用来循环调整的哪一位,当处于调整的位是,数码管所对应的时间位的下面会出现一个亮点进行提示。另外两个就是负责对时间进行调整,一个是加位调整,一个是减位调整。具体的实现问题用了两个switch语句,来确认有键按下了时候就进行加一和减一的调整。4.2.4延时函数及去抖这个部分相对比较简单,延时函数主要是确定时间的精度问题。而调整时间是按键的去抖问题主要就是利用延时函数。这

18、里不在详细介绍,后面的源程序中会有详细的讲解。4.3源程序代码#include#define uint unsigned int#define uchar unsigned char/寄存器宏定义#define DECODE_MODE 0x09 /译码控制寄存器#define INTENSITY 0x0A /亮度控制寄存器#define SCAN_LIMIT 0x0B /扫描界限寄存器#define SHUT_DOWN 0x0C /关断模式寄存器#define DISPLAY_TEST 0x0F /测试控制寄存器/按键设置sbit key1=P30; /功能键 sbit key2=P31; /

19、增加键sbit key3=P32; /减少键sbit key4=P33; /重新计时键/管脚定义sbit LOAD=P12; /MAX7219片选 1口2脚sbit DIN=P11; /MAX7219串行数据 1口1脚sbit CLK=P10; /MAX7219串行时钟 1口0脚uchar t0,flash,j;char time7;/*毫秒延时程序*/void delayms(uchar aa) uchar i,j; for(i=aa;i0;i-) for(j=110;jj-);/函数声明void Write7219(unsigned char address,unsigned char d

20、at);void Initial(void);/*地址、数据发送子程序*/void write7219(unsigned char address,unsigned char dat) unsigned char i; LOAD=0; /拉低片选线,选中器件 /发送地址 for (i=0;i8;i+) /移位循环8次 CLK=0; /清零时钟总线 DIN=(bit)(address&0x80); /每次取高字节 address=1; /左移一位 CLK=1; /时钟上升沿,发送地址 /发送数据i+) DIN=(bit)(dat& dat /时钟上升沿,发送数据 LOAD=1; /发送结束,上升

21、沿锁存数据 void keyscan() uchar i; if(key4=0)/恢复计时键 delayms(5); if(key4=0) while(!key4); i=0; TH0=(65536-45870)/256; /初始化定时器0 TL0=(65536-45872)%256; t0=0; TR0=1; /开中断 if(key1=0)/功能键 delayms(50); if(key1=0)/确认按下 key1);/确认释放 TR0=0; /关定时器0 i+; if(i=7) i=1; if(i!=0) Write7219(i,-1);/该四行用于实现当前调节位的闪烁 delayms(2

22、000); Write7219(i,timei); if(key2=0) /增加键 if(key2=0) key2);/ 确认释放 switch(i)/根据功能键按下次数调节相应位的值 case 1:/调节秒的个位 time1+; if(time1=10) time1=0; Write7219(1,time1); break; case 2:/调节秒的十位 time2+; if(time2=6) time2=0; Write7219(2,time2); case 3:/调节分的个位 time3+; if(time3=10) time3=0; Write7219(3,time3); case 4

23、:/调节分的十位 time4+; if(time4=6) time4=0; Write7219(4,time4); case 5:/调节时的个位 time5+; if(time5=10) time5=0; Write7219(5,time5); case 6:/调节时的十位 time6+; if(time6=3) time6=0; Write7219(6,time6); if(key3=0)/减少键,实现数值向下调节 ,实现方式与增加类似 if(key3=0)key3); switch(i) time1-; if(time1=-1) time1=9; break; time2-; if(tim

24、e2=-1) time2=5; time3-; if(time3=-1) time3=9; time4-; if(time4=-1) time4=5; time5-; if(time5=-1) time5=9; time6-; if(time6=-1) time6=2;/*MAX7219初始化,设置MAX7219内部的控制寄存器*/void Initial(void) Write7219(SHUT_DOWN,0x01); /开启正常工作模式(0xX1) Write7219(DISPLAY_TEST,0x00); /选择工作模式(0xX0) Write7219(DECODE_MODE,0xff); /选用全译码模式 Write7219(SCAN_LIMIT,0x05); /只用6只LED Write7219(INTENSITY,0x04); /设置初始亮度

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1