综合课程设计—数字时钟秒表的设计.doc_第1页
综合课程设计—数字时钟秒表的设计.doc_第2页
综合课程设计—数字时钟秒表的设计.doc_第3页
综合课程设计—数字时钟秒表的设计.doc_第4页
综合课程设计—数字时钟秒表的设计.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

综合课程设计数字时钟_秒表的设计姓名:学号:班级:学院:自动化联系方式:数字时钟_秒表设计1.1 项目要求设计基于AT89C51单片机的数字可调时钟,晶振采用12HZ,要求如下:(1) 设计采用显示。(2) 可以显示时、分、秒,24小时制。(3) 具有校时功能:可以对小时和分单独校时。对分校时的时候,停止分向小时的进位。(4) 具有秒表功能。1.2系统设计数字时钟以AT89C51为核心,通过按键1切换模式、调试时间。由内部振荡电路模块、按键复位电路模块、数码管显示模块和功能按键模块组成。1.2.1 框图设计数码管显示总线驱动AT89C51振荡电路复位电路功能按键1.2.2 知识点本项目通过学习和查阅资料,了解和掌握以下知识:l AT89C51单片机原理及设计;l 单片机内部振荡电路工作原理及设计;l 单片机按键复位电路工作原理及设计;l 74LS2458路同相三态双向总线收发器引脚及原理;如果用C51的P0口输出到数码管,那就要考虑到数码管的亮度以及P0口带负载的能力,选用74LS245提高驱动能力。P0口的输出经过74LS245提高驱动后,输出到数码管显示电路。74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。当 片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当CE为高电平时,A、B均为高阻态。由于P2口始终输出地址的高8位,接口时74LS245的三态控制端1G和2G接地,P2口与 驱动器输入线对应相连。P0口与74LS245输入端相连,E端接地,保证数据线畅通。8051的/RD和/PSEN相与后接DIR,使得RD和PSEN有效时,74LS245输入(P0.1D1),其它时间处于输出(P0.1D1)。l 7SEG-MPX6-CC 7段六位共阴级数码管的特性及使用。7SEG-MPX6-CC 7是8段(其中有一段是小数点,可以忽略不计)六位共阴极数码管。如果要实现动态显示必须位码,(16)轮流通低电位,也就是片选,段选控制数码管的显示。l C语言及程序设计。l Keil Vision中的源程序设计与编译;在Keil集成开发环境下使用工程的方法来管理文件而不是单一文件的模式所有的文件包括源程序(如C程序、汇编程序)、头文件等都可以放在工程项目文件里统一管理。对于刚刚使用Keil的用户一般可以按照下面的步骤来创建一个自己的应用程序(1) 一个工程项目文件(2) 选择目标器件(例如选择ATMEL公司的AT89C51)(3) 为工程项目设置软硬件调试环境(4) 创建源程序文件并输入程序代码(5) 保存创建的源程序项目文件(6) 把源程序文件添加到项目中。l Proteus与单片机电路的交互式仿真与调试。双击单片机AT89C51打开其属性编辑框。在“Program File”栏中单击打开按钮,选取目标代码文件。在“Clock Frequency”栏中设置时钟频率为12MHz,因为运行时的时钟频率是以单片机属性中设置的频率值为准,所以在Proteus ISIS界面中设计电路原理图时,可以略去单片机的时钟电路。另外复位电路也可略去。对于MCS-51系列单片机而言,在不进行电路电气检测时EA引脚也可悬空。1.3 硬件设计基于AT89C51单片机数字可调时钟的元件清单如表1-1所示:表 1-2 数字时钟-秒表电路图元件名称型号数量用途单片机AT89C511个控制核心电解电容10uF1个复位电路电阻10k10个上拉电阻数码管显示7SEG-MPX6-CC1个显示模块按键4个复位及功能按键电源+5V/0.5A1个提供+5V电源三态双向总线收发器74LS2451个总线驱动晶振12MHZ1个晶振电路电容12pF2个振荡电路表1-1 基于AT89C51 单片机数字时钟-秒表元件清单1.4 软件设计 程序清单#include#define uchar unsigned char#define uint unsigned intuchar code Tab0=/定义数码管数组,没有小数点0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar code Tab1=/定义数码管数组,有小数点0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;sbit K1=P32;/模式选择键,本程序三种模式,分别是时间显示、秒表、时间设置sbit K2=P33;/设置时间时加一/开始(暂停)秒表按键sbit K3=P34;/切换设置位/清零秒表按键void Delay(uchar x);/延时函数void Init(); /中断初始化函数void Mode_K1();/模式切换函数void Display0(); /时间显示函数void Display1(); /秒表显示函数void KEY_MiaoBiao();/检测秒表操作按键void Display2();/时间设置显示函数void KEY_Time_Set(); /检测时间设置按键uchar Hours=00,Minutes=00,seconds=00;/分别定义三个变量表示时、分、秒uchar K1_bit=0; /用于模式切换的标志(当K1_bit为0时显示时钟,为1时进入秒表,为2时进入时间设置模式)uchar Time0_bit=0;/用于定时器0的溢出标志bit Set_Time=0;/设置时 闪烁时长的标志位bit Set0=0;/设置时间标志,确定是设置分还设置时uchar Miao_Biao0,Miao_Biao1,Miao_Biao2,Miao_Biao3,Miao_Biao4;/用于秒表的变量void main()Init();/中断初始化while(1)/死循环Mode_K1();/模式扫描switch(K1_bit) /模式选择case 0:Display0();/显示时间break;case 1:Display1(); /显示秒表KEY_MiaoBiao();/扫描秒表操作break;case 2:Display2();/设置时间时的显示程序,可闪烁定位KEY_Time_Set();/扫描按键break;void Init() /中断初始化函数EA=1; /开总中断TMOD=0X11; /定时器工作方式选择,定时器0和定时器1都选择第1种工作方式TH0=(65536-50000)/256;/定时器0装初值,定时50msTL0=(65536-50000)%256;ET0=1;/开定时器0开关TR0=1; /开定时器0小开关TH1=(65536-50000)/256;/定时器1装初值,定时50msTL1=(65536-50000)%256;ET1=1; /开定时器1开关TR1=0;/关定时器1小开关 void Delay(uchar x) /延时uchar i,j;for(i=x;i0;i-)for(j=110;j0;j-);void Time0() interrupt 1 /定时器0函数TH0=(65536-50000)/256; /重装初值TL0=(65536-50000)%256;Time0_bit+;if(Time0_bit%10)=0)/每溢出10次Time0_bit取反一次Set_Time=Set_Time; /0.5秒闪烁一次if(Time0_bit=20)/以下为时间数据处理Time0_bit=0;seconds+;if(seconds=60)seconds=0;Minutes+;if(Minutes=60)Minutes=0;Hours+;if(Hours=24)Hours=0;void Time1() interrupt 1 /定时器1函数TH1=(65536-50000)/256;/重装初值TL1=(65536-50000)%256;Miao_Biao0+;if(Miao_Biao0=2)/以下为秒表数据处理Miao_Biao0=0;Miao_Biao1+; /Miao_Biao1每加1次为100ms,if(Miao_Biao1=10)Miao_Biao1=0;Miao_Biao2+;if(Miao_Biao2=60)Miao_Biao2=0;Miao_Biao3+;if(Miao_Biao3=60)Miao_Biao3=0;Miao_Biao4+;if(Miao_Biao4=10)Miao_Biao4=0;void Mode_K1()/模式选择键,本程序三种模式,分别是时间显示、秒表、时间设置if(K1=0)Delay(10);if(K1=0)K1_bit+;if(K1_bit=3)K1_bit=0;while(!K1);void Display0()/显示时钟P0=Tab0seconds%10;/显示秒的个位P1=0xdf;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0seconds/10;/显示秒的十位P1=0xef;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab1Minutes%10;/显示分的个位,需要加上小数点做分隔符P1=0xf7;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0Minutes/10;/显示分的十位P1=0xfb;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab1Hours%10;/显示时的个位,需要加上小数点做分隔符P1=0xfd;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0Hours/10;/显示时的十位P1=0xfe;/段选Delay(10);/延时P0=0X00;/消隐void KEY_MiaoBiao()/检测秒表按键操作if(K1_bit=1)/判断是否为秒表模式if(K2=0)Delay(10);if(K2=0)TR1=TR1;/K2每按一次TR1取反,暂停或开始定时器1,达到暂停或开始秒表的目的while(!K2);if(K3=0)Delay(10);if(K3=0) /当K3按下时秒表所有数据清零,并停止定时器1TR1=0; /停止定时器1Miao_Biao0=0; /清零数据Miao_Biao1=0;Miao_Biao2=0;Miao_Biao3=0;Miao_Biao4=0;while(!K3);void Display1()/显示秒表P0=Tab0Miao_Biao1%10;/显示1/10秒的个位P1=0xdf;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab1Miao_Biao2%10;/显示秒的个位,需要加上小数点做分隔符P1=0xef;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0Miao_Biao2/10;/显示秒的十位P1=0xf7;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab1Miao_Biao3%10;/显示分的个位,需要加上小数点做分隔符P1=0xfb;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0Miao_Biao3/10;/显示分的十位P1=0xfd;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab1Miao_Biao4%10;/显示时的个位,需要加上小数点做分隔符P1=0xfe;/段选Delay(10);/延时P0=0X00;/消隐void Display2()/时间设置时的显示函数if(Set0=0)/判断是否为设置时还是分P0=Tab0seconds%10;/显示秒的个位P1=0xdf;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0seconds/10;/显示秒的十位P1=0xef;/段选Delay(10);/延时P0=0X00;/消隐if(Set_Time)/这个if语句实现分钟以0.5秒的频率闪烁P0=Tab1Minutes%10;/显示分的个位,需要加上小数点做分隔符P1=0xf7;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0Minutes/10;/显示分的十位P1=0xfb;/段选Delay(10);/延时P0=0X00;/消隐elseP0=0x00;/显示分的个位,需要加上小数点做分隔符P1=0xf7;/段选Delay(10);/延时P0=0X00;/消隐P0=0x00;/显示分的十位P1=0xfb;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab1Hours%10;/显示时的个位,需要加上小数点做分隔符P1=0xfd;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0Hours/10;/显示时的十位P1=0xfe;/段选Delay(10);/延时P0=0X00;/消隐else/时钟闪烁P0=Tab0seconds%10;/显示秒的个位P1=0xdf;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0seconds/10;/显示秒的十位P1=0xef;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab1Minutes%10;/显示分的个位,需要加上小数点做分隔符P1=0xf7;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0Minutes/10;/显示分的十位P1=0xfb;/段选Delay(10);/延时P0=0X00;/消隐if(Set_Time)/这个if语句实现时钟以0.5秒的频率闪烁P0=Tab1Hours%10;/显示时的个位,需要加上小数点做分隔符P1=0xfd;/段选Delay(10);/延时P0=0X00;/消隐P0=Tab0Hours/10;/显示时的十位P1=0xfe;/段选Delay(10);/延时P0=0X00;/消隐elseP0=0x00;/显示时的个位,需要加上小数点做分隔符P1=0xFF;/段选Delay(10);/延时P0=0X00;/消隐P0=0X00;/显示时的十位P1=0xFF;/段选Delay(10);/延时P0=0X00;/消隐void KEY_Time_Set() /设置时间时的按键扫描函数if(K1_bit=2)

温馨提示

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

评论

0/150

提交评论