电子时钟的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专业综合设计报告项目名称:电子钟的设计
学生姓名:xx
专业名称:测控技术与仪器
班级:xx
指导教师:xx
项目起止日期:2012年10月25日至2012年10月31日
项目1:电子钟的设计
一、任务要求
设计一个电子钟,要求如下:
(1) 利用单片机最小系统设计一个电子钟(不能采用单片机开发系
统)
(2) 使用按键修改时间
(3) 显示方式:** 时** 分** 秒
(4) 时间可以任意修改
二、总体设计方案
设计一个电子产品,首先了解它能实现的功能,时钟系统最基本的功能就是实现计时,在这里设计的数字电子时钟,它能实现计时和校时的功能,给电子钟加上电自动计时,设计三个按键对时间进行调整。
硬件设计很简单,主要包括:单片机、按键电路、驱动显示电路,以及LED 显示器四个部分。单片机选用AT89C51芯片,它无须外扩程序存储器,设计电路很简单。由于只用了三个按键,所以采用独立式按键使设计更简单。显示时、分、秒加两个分隔符,采用两个共阴极数码管及键盘达到时间显示和修改的功能。
简易数字时钟可实现校时和整点报时功能,该软件采用C 语言来实现,主要包括主程序、键输入程序、显示程序、定时程序和中断程序等软件模块。把原程序加入原理图,做出电子钟的仿真,以秒计数并显示时、分、秒。其中秒和分为60进制,小时为24进制计数。
四、系统组成
电子钟的电路图主要由单片机(AT89C51)、键盘电路、驱动显示电路和LED 显示器四部分组成,它主要实现时钟的显示,以及对时、分、秒进行调整,即实现调时的功能。其数字钟系统整体结构如图2-1所示。 单 片 机 显示器 键盘
图2-1 电子钟系统整体结
Isis 仿真图设计如下
:
编程如下:
#include
#define uint unsigned int
#define uchar unsigned char
uchar led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X40};
uchar we[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uint a=0,miao=1,fen=1,shi=1,flag=0,s=0,sum=0;
bit flag1=1,flag2=1,flag3=1;
sbit k1=P1^0;
sbit k2=P1^1; AT89C51 驱动 LED 显示器 位选
按 键
sbit k3=P1^2;
void delay(uint i)
{
uint j,k;
for(j=0;j
for(k=0;k<120;k++);
}
void kai()
{
TMOD=0X11;
TH0=0X3C;
TL0=0XB0;
TH1=0X3C;
TL1=0XB0;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
}
void zd()interrupt 1
{
TH0=0X3C;
TL0=0XB0;
a++ ;
if(a>=15){miao++;a=0;}
if(miao>=60){fen++;miao=0;}
if(fen>=60){shi++;fen=0;}
if(shi>=24){shi=0;}
}
void zde()interrupt 3
{
TH1=0X3C;
TL1=0XB0;
if(s<=2)s++ ;
else {s=0;
if(flag==1){flag1=~flag1;}
if(flag==2){flag2=~flag2;}
if(flag==3){flag3=~flag3;}
}
}
void xian()
{if(flag1)
{P2=we[0];
delay(2);
P2=0xff;
delay(2);
P2=we[1];
P0=led[miao/10]; delay(2);
P2=0xff;
delay(2);}
P2=we[2];
P0=led[10]; delay(2);
P2=0xff;
delay(2);
if(flag2){
P2=we[3];
P0=led[fen%10]; delay(2);
P2=0xff;
delay(2);
P2=we[4];
P0=led[fen/10]; delay(2);
P2=0xff;
delay(2);}
P2=we[5];
P0=led[10]; delay(2);
P2=0xff;
delay(2);
if(flag3){
P2=we[6];
P0=led[shi%10]; delay(2);
P2=0xff;
delay(2);
P2=we[7];
delay(2);
P2=0xff;
delay(2); }
}
void main()
{kai();
while(1)
{
xian();
if (k1==0){while(k1==0)xian();sum++;
switch(sum%4)
{
case 1:flag=1;TR0=0;xian();break;
case 2:flag=2;TR0=0;flag1=1;xian();break;
case 3:flag=3;TR0=0;flag2=1;xian();break;
case 0:flag=0;TR0=1;flag3=1;xian();break;
}
}
if(flag==1)
{
if(!k2){while(!k2)xian();miao++;if(miao>=59)miao=0;xian();} if(!k3){while(!k3)xian();miao--;if(miao<=0)miao=59;xian();} }
if(flag==2)
{
if(!k2){while(!k2)xian();fen++;if(fen>=59)fen=0;xian();}
if(!k3){while(!k3)xian();fen--;if(fen<=0)fen=59;xian();}
}
if(flag==3)
{
if(!k2){while(!k2)xian();shi++;if(shi>=23)shi=0;xian();}
if(!k3){while(!k3)xian();shi--;if(shi<=0)shi=23;xian();}
}
}
}