基于51单片机电子时钟设计

时间:2019-05-12 01:01:26下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《基于51单片机电子时钟设计》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《基于51单片机电子时钟设计》。

第一篇:基于51单片机电子时钟设计

基于51单片机的电子时钟设计

摘要

本电子时钟以STC89C52单片机作为主控芯片,采用DS12C887时钟芯片,使用1602液晶作为显示输出。该时钟走时精确,具有闹钟设置,以及可同时显示时间、日期等多种功能。本文将详细介绍该电子时钟涉及到的一些基本原理,从硬件和软件两方面进行分析。

【关键词】

STC89C52单片机

DS12C887时钟芯片

1602液晶

蜂鸣器

目录

一、绪论…………………………………………………………4

1.1 电子时钟功能…………………………………………1.2设计方案………………………………………………4

二、硬件设计……………………………………………………4

2.151

2.2 单片机部分设计………………………………4

USB供电电路设计………………………………5

2.3 串行通信电路设计………………………………6

2.4DS12C887时钟芯片电路的设计…………………6

2.51602LCD液晶屏显示电路设计………………7

2.6

蜂鸣器电路设计………………………………8

2.7

按键调整电路设计…………………………8

三、软件设计…………………………………………9

3.1 系统程序流程图设计…………………………9

3.2程序设计……………………………………11

四、心得体会………………………………………………22 参考文献……………………………………………………23

一、绪

1.1电子时钟功能

(1)在1602液晶上显示年、月、日、星期、时、分、秒,并且按秒实时更新显示。(2)具有闹铃设定即到时报警功能,报警响起时按任意键可取消报警。

(3)能够使用实验板上的按键随时调节各个参数,四个有效键分别为功能选择键、数值增大键、数值减小键和闹钟查看键。

(4)每次有键按下时,蜂鸣器都以短“滴”声报警。

(5)利用DS12C887自身掉电可继续走时的特性,该时钟可实现断电时间不停、再次上电时时间仍准确显示在液晶上的功能。

1.2设计方案

DS12C887时钟芯片+1602LCD液晶屏

DS12C887时钟芯片功能丰富、价格适中,能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部含有世纪寄存器,从而利用硬件电路解决“千年”问题。DS12C887中自带锂电池,外部掉电时,其内部时间信息还能保持10年之久。1602LCD液晶屏可以输出2行,每行显示16个字符。1602LCD液晶屏显示清晰且不会闪烁,由于液晶屏是数字式的,因此和单片机系统的接口简单,操作方便。

以STC89C52为主控芯片,DS12C887为时钟芯片,1602LCD液晶屏作为显示器。程序控制DS12C887时钟芯片实现小时、分、秒和年、月、日的计时,并在1602LCD液晶屏上显示出来。当时间走到程序所设定的时间时,蜂鸣器响起,起到闹钟功能。

二、硬

2.1 51单片机部分设计

单片机部分如图2—1所示:

以STC89C52单片机为核心,选用12MHZ的晶振,由于晶振的频率越高,单片机的运行速度就越快,考虑到单片机的运行速度快会导致对存储器的要求就会变高,因此12MHZ为最佳选择。外接电容的值虽然没有严格的要求,但是外接电容的大小会影响振荡器的频率高低、振荡器的稳定性和起振的快速性,因此选用30pF的电容作为起振电容。复位电路为按键高电平复位,当按键按下,RES端为高电平,当高电平持续4us的时间单片机即复位。

2.2 USB供电电路设计

USB供电电路如下图2—2所示:

该电子时钟采用USB端口的方式为单片机供电,LPOW1为电源显示灯,当按键S5按下,电源显示灯LPOW1亮,表示给单片机供+5V电。

2.3 串行通信电路设计

串行通信电路如下图2—3所示:

图中通过MAX232进行RS—232电平与单片机TTL电平之间的转换,从而为单片机和上位机之间通信提供通道。通信电路的目的就是让通信双方的电平匹配,单片机用的是TTL电平,上位机的串口用的是RS—232电平。TTL电平逻辑1的电压范围是+3.3V到+5V,逻辑0的电压范围是0到+3.3V;RS—232电平的逻辑1的电压范围是—15V到—5V,逻辑0的电压范围是+5V到+15V。MAX232可以把输入的+5V电源电压变换成为RS—232输出电平所需的+10V电压。所以采用此芯片接口的串行通信系统只需单一的+5V电源就可以了。对于没有+12V电源的场合,其适应性更强,2.4 DS12C887时钟芯片电路的设计

时钟芯片电路如下图2—4所示:

DS12C887时钟芯片共需要13条信号线,分别是并行数据地址复用线AD0~AD7,CS,AS,R/W,DS和IRQ。

MOT—总线操作时序选择端。它有两种工作模式,当MOT接

VCC时,选用Motorola模式;当MOT接GND或悬空时,选用Intel模式。NC—空引脚。

AD0~AD7—复用地址数据总线。在总线周期的前半部分,出现在AD0~AD7上的是地址信息,可用以选通DS12C887内的RAM,总线周期的后半部分出现在AD0~AD7上的是数据信息。GND,VCC—系统电源接入端。当

VCC输入为+5V时,用户可以访问DS12C887内RAM的输入小于+4.25V时,禁止用户对内部RAM中的数据,并可对其进行读/写操作;当

VCC进行读/写操作,此时用户不能正确芯片内的时间信息;当

VCC的输入小于+3V时,DS12C887会自动的将电源切换到内部自带的锂电池上,以保证内部的电路能正常工作。

CS—芯片片选端。

AS—地址选通输入端。在进行读/写操作时,AS的上升沿将AD0~AD7上出现的地址信息锁存到DS12C887上,而下一个下降沿清除AD0~AD7上的地址信息,不论CS是否有效,DS12C887都将执行该操作。

R/W—读/写输入端。该引接脚有两种工作模式,当MOT接

VCC时,R/W工作在Motorola模式。此时该引脚的作用是区分读操作还是写操作,R/W高电平时为读操作,R/W为低电平时为写操作;当MOT接GND时,该引脚工作在Intel模式,此时该引脚为写允许输入,此信号的上升沿锁存数据。

DS—数据选择或读输入脚。该引脚有两种工作模式,当MOT接

VCC时,选用Motorola模式,此时,每个总线周期后一部分的DS为高电平,称为数据选通。在读操作中,DS的上升沿使DS12C887将内部数据送往总线AD0~AD7上,以供外部读取。在写操作中,DS的下降沿将使总线AD0~AD7上的数据锁存在DS12C887中。当MOT接GND时,选用Intel模式,此时该引脚是读允许输入引脚。

RESET—芯片复位引脚。

IRQ—中断请求输出。用作处理器的中断申请输入。只要引起中断的状态位置位,并且相应中断使能位也置位,IRQ将一直保持低电平,处理器程序通常读取C存储器来清除IRQ引脚输出,RESET引脚也会清除未处理的中断。没有中断发生时,IRQ为高阻状态,可将多个中断器件接到一条IRQ总线上,只要它们均为漏极开路输出即可。IRQ引脚为漏极开路输出,需要使用一个外接上拉电阻与SQW—方波输出引脚。当供电电压

VCC相连。

VCC大于4.25V时,SQW引脚可输出方波。

2.5 1602LCD液晶屏显示电路设计

1602LCD液晶屏显示电路如下图2—5所示:

1602液晶为5V电压驱动,带背光,可显示2行,每行16个字符,不能显示汉字,内置含128个字符的ASCII字符集字库,只有并行接口,无串行接口。接口说明如下:(1)液晶1,2端为电源;15,16为背光电源;为防止直接加5V电压烧坏背光灯,在15脚串接一个1K电阻用于限流。

(2)液晶3端为液晶对比度调节端,通过一个10K电位器接地来调节液晶显示对比度。首次使用时,在液晶上电状态下,调节至液晶上面一行显示出黑色小格为止。

(3)液晶4端为向液晶控制器写数据/写命令选择端,接单片机的P3.5口。

(4)液晶5端为读/写选择端,因为我们不从液晶读取任何数据,只向其写入命令和显示数据,因此此端始终选择为写状态,即低电平接地。

(5)液晶6端为使能信号,是操作时必须的信号,接单片机的P3.4口。

2.6 蜂鸣器电路设计

蜂鸣器电路如下图2—6所示:

蜂鸣器电路接在单片机的P2.3引脚上,当该引脚一个低电平,三极管导通,蜂鸣器发出声音作为闹铃。

2.7 按键调整电路设计

按键调整电路如下图2—7所示:

四个独立键盘均采用查询方式,将按键的一端接地,另一端各接一根输入线直接与STC89C52的I/O口相连。当按键闭合时,相当于该I/O口通过按键与地相连,变成低电平,单片机通过检测I/O口的电平状态,即可识别出按下的键。通过四个键实现参数的调节,S1为功能选择键,S2为数值增大键,S3为数值减小键,S4为闹钟查看键。

三、软

3.1 系统程序流程图设计

流程图1:实验主程序流程图

流程图2:定时中断程序流程图

流程图3:调时功能流程图

3.2 程序设计

#include #include void delay(uint z)

//延时函数 {

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);} void di()

//蜂鸣器报警声音 {

beep=0;

delay(100);

beep=1;} void

write_com(uchar com)

//写液晶命令函数

{

rs=0;

lcden=0;

P0=com;

delay(3);

lcden=1;

delay(3);

lcden=0;} void write_data(uchar

data)

//写液晶数据函数 {

rs=1;

lcden=0;

P0=data;

delay(3);

lcden=1;

delay(3);

lcden=0;} void

init()

//初始化函数 {

uchar

num;

EA=1;

//打开总中断

EX1=1;

//开外部中断1

IT1=1;

//设置负跳变沿触发中断

flag1=0;

//变量初始化

t0_num=0;

s1num=0;

week=1;

dula=0;

//关闭数码管显示

wela=0;

lcden=0;

rd=0;/*以下几行在首次设置DS12C887时使用,以后不必再写入

write_ds(0x0A,0x20);

//打开振荡器

write_ds(0x0B,0x26);

//设置24小时模式,数据二进制格式,开启闹铃中断

set_time();

//设置上电默认时间

---------------*/

write_com(0x38);

//1602液晶初始化

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num<15;num++)

//写入液晶固定部分显示

{

write_data(table[num]);

delay(1);}

write_com(0x80+0x40);

for(num=0;num<11;num++)

{

write_data(table1[num]);

delay(1);

} } void write_sfm(uchar add,char data)

{ //1602液晶刷新时分秒函数,4为时,7为分,10为秒

char

shi,ge;

shi=data/10;

ge=data%10;

write_com(0x80+0x40+add);

write_data(0x30+shi);

write_data(0x30+ge);} void

write_nyr(uchar add,char

data)

{

//1602液晶刷新年月日函数,3为年,6为月,9为日

char

shi,ge;

shi=data/10;

ge=data%10;

write_com(0x80+add);

write_data(0x30+shi);

write_data(0x30+ge);void

write_week(char we)

//写液晶星期显示函数 {

write_com(0x80+12);

switch(we)

{

case 1:

write_data('M');delay(5);

write_data('O');delay(5);

write_data('N');

break;

case 2:

write_data('T');delay(5);

write_data('U');delay(5);

write_data('E');

break;

case 3:

write_data('W');delay(5);

write_data('E');delay(5);

write_data('D');

break;

case 4:

write_data('T');delay(5);

write_data('H');delay(5);

write_data('U');

break;

case 5:

write_data('F');delay(5);

write_data('R');delay(5);

write_data('I');

break;

case 6:

write_data('S');delay(5);

write_data('A');delay(5);

write_data('T');

break;

case 7:

write_data('S');delay(5);

write_data('U');delay(5);

write_data('N');

break;

} } void keyscan(){ if(flag_ri==1){

//这里用来取消闹钟报警,按任意键取消报警

if((s1==0)||(s2==0)||(s3==0)||(s4==0))

{

delay(5);

if((s1==0)||(s2==0)||(s3==0)||(s4==0))

{

while(!(s1&&s2&&s3&s&s4));di();

flag_ri=0;

//清除报警标志

}

}

}

if(s1==0)

//检测s1

{

delay(5);

if(s1==0)

{

s1num++;

//记录按下次数

if(flag1==1)

if(s1num==4)

s1num=1;

flag=1;

while(!s1);di();

switch(s1num)

{

//光标闪烁点定位

case 1: write_com(0x80+0x40+10);

write_com(0x0f);

break;

case 2: write_com(0x80+0x40+7);

break;

case 3: write_com(0x80+0x40+4);

break;

case 4: write_com(0x80+12);

break;

case 5: write_com(0x80+9);

break;

case 6: write_com(0x80+6);

break;

case 7: write_com(0x80+3);

break;

case 8: s1num=0;

write_com(0x0c);

flag=0;

write_ds(0,miao);

write_de(2,fen);

write_ds(4,shi);

write_ds(6,week);

write_ds(7,day);

write_ds(8,month);

write_ds(9,year);

break;

}

}

}

if(s1num!=0)

//只有当s1按下后,才检测s2和s3

{

if(s2==0)

{

delay(1);

if(s2==0)

while(!s2);di();

switch(s1num)

{

//根据功能键次数调节相应数值

case 1: miao++;

if(miao==60)

miao=0;

write_sfm(10,miao);

write_com(0x80+0x40+10);

break;

case 2: fen++;

if(fen==60)

fen=0;

write_sfm(7,fen);

write_com(0x80+0x40+7);

break;

case 3: shi++;

case 4:

case 5:

case 6:

case 7:

}

}

}

if(s3==0)

{

delay(1);

if(shi==24)

shi=0;

write_sfm(4,shi);

write_com(0x80+0x40+4);

break;week++;

if(week==8)

week=1;

write_week(week);

write_com(0x80+12);

break;day++;

if(day==32)

day=1;

write_nyr(9,day);

write_com(0x80+9);

break;month++;

if(month==13)

month=1;

write_nyr(6,month);

write_com(0x80+6);

break;year++;

if(year==100)

year=0;

write_nyr(3,year);

write_com(0x80+3);

break;

if(s3==0)

{

while(!s3);di();

switch(s1num)

{

//根据功能键次数调节相应数值

case 1: miao--;

if(miao==-1)

miao=59;

write_sfm(10,miao);

write_com(0x80+0x40+10);

break;

case 2: fen--;

if(fen==-1)

fen=59;

write_sfm(7,fen);

write_com(0x80+0x40+7);

break;

case 3: shi--;

if(shi==-1)

shi=23;

write_sfm(4,shi);

write_com(0x80+0x40+4);

break;

case 4: week--;

if(week==0)

week=7;

write_week(week);

write_com(0x80+12);

break;

case 5: day--;

if(day==0)

day=31;

write_nyr(9,day);

write_com(0x80+9);

break;

case 6: month--;

if(month==0)

month=12;

write_nyr(6,month);

write_com(0x80+6);

break;

case 7: year--;

if(year==-1)

year=99;

write_nyr(3,year);

write_com(0x80+3);

break;

}

}

}

}

if(s4==0)

//检测s4

{

delay(5);

if(s4==0)

{

flag1=~flag1;

while(!s4);di();

if(flag1==0)

{

//退出闹钟设置时保存数值

flag=0;

write_com(0x80+0x40);

write_data(' ');

write_data(' ');

write_com(0x0c);

write_ds(1,miao);

write_ds(3,fen);

write_ds(5,shi);

}

else

{

//进入闹钟设置

read_alarm();

//读取原始数据

miao=amiao;

//重新赋值用以按键调节

fen=afen;

shi=ashi;

write_com(0x80+0x40);

write_data('R');

//显示标志

write_data('i');

write_com(0x80+0x40+3);

write_sfm(4,ashi);

//送液晶显示闹钟时间

write_sfm(7,afen);

write_sfm(10,amiao);

}

}

} } void write_ds(uchar add,uchar

data){

//写12C887函数

dscs=0;

dsas=1;

dsds=1;

dsrw=1;

P0=add;

//先写地址

dsas=0;

dsrw=0;

P0=data;

//再写数据

dsrw=1;

dsas=1;

dscs=1;} uchar

read_ds(uchar add){

//读12C887函数

uchar

ds_data;

dsas=1;

dsds=1;

dsrw=1;

dscs=0;

P0=add;

//先写地址

dsas=0;

dsds=0;

P0=0xff;

ds_data=P0;

//再读数据

dsds=1;

dsas=1;

dscs=1;

return ds_data;} /*---首次操作12C887时给予寄存器初始化-----void set_time(){

//首次上电初始化时间函数

write_ds(0,0);

write_ds(1,0);

write_ds(2,0);

write_ds(3,0);

write_ds(4,0);

write_ds(5,0);

write_ds(6,0);

write_ds(7,0);

write_ds(8,0);

write_ds(9,0);}----------------------*/

void

read-alarm(){

//读取12C887闹钟值

amiao=read_ds(1);

afen=read_ds(3);

ashi=read_ds(5);} void main()

//主函数 {

init();

//调用初始化函数

while(1)

{

keyscan();

//按键扫描

if(flag_ri==1)

//当闹钟中断时进入这里

{

di();

delay(100);

di();

delay(500);

}

if(flag==0&&flag1==0)

//正常工作时进入这里

{

keyscan();

//按键扫描

year=read_ds(9);

//读取12C887数据

month=read_ds(8);

day=read_ds(7);

week=read_ds(6);

shi=read_ds(4);

fen=read_ds(2);

miao=read_ds(0);

write_sfm(10,miao);

//送液晶显示

write_sfm(7,fen);

write_sfm(4,shi);

write_week(week);

write_nyr(3,year);

write_nyr(6,month);

write_nyr(9,day);

}

} } void

exter()interrupt 2

//外部中断1服务程序 {

uchar

c;

//进入中断表示闹钟时间到

flag_ri=1;

//设置标志位,用于大程序中报警提示

c=read_ds(0x0c);

//读取12C887的C寄存器表示响应了中断 }

_______________________________________________________________________________ 以下为define.h源代码:

_______________________________________________________________________________ #define uchar unsigned char #define uint unsigned int sbit dula=P2^6;sbit wela=P2^7;sbit rs=P3^5;sbit lcden=P3^4;sbit s1=P3^0;

//功能键 sbit s2=P3^1;

//增大键 sbit s3=P3^2;

//减小键 sbit s4=P3^6;

//闹钟查看键 sbit rd=P3^7;sbit beep=P2^3;

//蜂鸣器 sbit dscs=P1^4;sbit dsas=P1^5;sbit dsrw=P1^6;sbit dsds=P1^7;sbit dsirq=P3^3;bit flag1,flag_ri;

//定义两个位变量

uchar count,s1num,flag,t0_num;

//其他变量定义 char miao,shi,fen,year,month,day,week,amiao,afen,ashi;uchar code

table[]=“201-

”;

//液晶固定显示内容 uchar code

table1[]=“

:

:

”;

void write_ds(uchar,uchar);

//函数申明 void set_alarm(uchar,uchar,uchar);void read_alarm();uchar read_ds(uchar);void set_time();

四、心

在本次电子时钟设计中对单片机的内部结构有了一定的了解,熟悉了各个引脚的功能,同时熟知了1602LCD液晶、DS12C887时钟芯片的使用,以及各种电路的功能。

通过此次课程设计,无论是从软件方面还是硬件方面,都进一步学习和巩固了程序的总体设计和单片机的应用。在软件方面,进一步熟悉了各条指令的功能及用法,定时、中断的用法,更深一步学习了用C语言编写实现电子时钟的功能。在硬件方面,进一步熟悉并使用了keil软件,在keil中编程,调试,运行;对电路的一些基本结构和设计有了更深一步的了解。在整个设计过程中,虽然出现了很多问题,有时确实叫人很心烦,但在发现问题后努力去解决,并获得成功,这时会感到无比的快乐和具有成就感。只有自己动手去做,去应用,才能将学到的知识变成自己的。

程序不要光看不写,一定要自己写一次。最开始的时候,可能自己啥都不懂,这时可以抄人家的程序过来。但在抄的时候一定要看看每一句是干什么用的,来达到什么目的,运行后有什么后果,看明白了之后,就要自己写一次。此时会发现,原来看明白别人的程序很容易,但到自己写的时候却一句也写不出来,这就是差距。

单片机提高重在实践,想要学好单片机,软件编程必不可少。但是熟悉硬件对于学好单片机也是非常重要的。如何学习好硬件,动手实践是必不可少的。我们可以通过自己动手做一个自己的电子制作,通过完成它,以提高对一些芯片的了解和熟练运用。这样我们就可以多了解一些芯片的结构。

我学习的目标是希望在若干年以后能够独立设计一个复杂的系统,包括硬件电路和软件部分。总之,通过这次电子技术设计我学到了许多,似乎离自己的目标又近了一步。

[1]郭天祥.51单片机C语言教程.电子工业出版社.2009 [2]谭浩强.C程序设计.清华大学出版社.1991 [3]孙育才 王荣兴

孙华芳.ATMEL新型AT89S52系列单片机及其应用.清华大学出版社.2006 [4]谢维成.单片机原理及应用与51程序设计.清华大学出版社.2006

[5]鲍宏亚.MCS—51系列单片机应用系统设计及实用技术.中国宇航出版社.2005 [6]赵文博

刘文涛.单片机语言C51程序设计.人民邮电出版社.2006 [7]求是科技.8051系列单片机C程序设计.人民邮电出版社.2006

第二篇:单片机课程设计电子时钟说明书

《电子时钟》 课程设计说明书

专业班级:

11级自动化<3>班

名: 欧阳明长 李徐军

陈龙

指导教师:

设计时间:

2013--12--17

物理与电气工程学院

2013年12月17日

摘要

电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用STC公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键S12、S13、S14和S15键,进行相应的操作就可实现小时调整、分钟调整和启停功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。

关键词 电子钟;AT89S52;硬件设计;软件设计

目录 设计课题任务、功能要求说明及方案介绍……………………………………3 1.1 设计课题任务………………………………………………………………3 1.2 功能要求说明………………………………………………………………3 1.3 设计总体方案介绍及原理说明……………………………………………3 2 设计课题硬件系统的设计………………………………………………………3 2.1 设计课题硬件系统各模块功能简要介绍…………………………………4 3 设计课题软件系统的设计………………………………………………………4 3.1 设计课题软件系统各模块功能简要介绍…………………………………4 3.2 设计课题软件系统程序流程框图…………………………………………4 4 设计结论、仿真结果、误差分析………………………………………………7 4.1 设计课题的设计结论及使用说明…………………………………………4 4.2 设计课题的误差分析………………………………………………………7 4.3 设计体会……………………………………………………………………7 参考文献 ……………………………………………………………………………7 附 录 ……………………………………………………………………………8 1 设计课题任务、功能要求说明及方案介绍

1.1 设计课题任务

设计一个具有特定功能的电子钟。具有启停、时间显示、报时等功能。并有时间设定,时间调整功能。

1.2 功能要求说明

设计一个具有特定功能的电子钟。电子钟上电从12时0分0秒开始运行,按下启停键进入时钟运行状态;再按启停键暂停运行,并且再次按下时能够在原来的时间上继续计时;运行到整点是能够自动响铃,通过外部按键可以进行实践的调整,并且在运行时相应的LED灯等同步亮灭。

1.3 设计课题总体方案介绍及工作原理说明

本电子钟主要由单片机、4*4独立键盘、显示接口电路和电源电路构成,设 计课题的总体方案如图1.1所示:

图1.1 总体设计方案图

本电子钟的所有的程序、参数均存放在AT89S52的内部RAM中。键盘采用动态扫描方式。利用单片机定时器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。设计课题硬件系统的设计 2.1 设计课题硬件系统各模块功能简要介绍

本设计的硬件系统主要采用以下基本模块来实现,单片机最小系统模块,输入模块、输出模块、电源模块。

(1)单片机最小系统模块:包括8位微控制器AT89S52;电源复位电路;晶振电路。本模块AT89S52系统控制核心,单片机系统复位由电源上电完成。

(2)输入模块:本模块共用到了4个按键(S12、S13、S14、S15),分别完成时间的调整、启停。1个电源开关(具有复位功能)。

(3)输出模块:本次设计显示为8位,采用两个四位一体数码管(共阳极)8个PNP三极管驱动,并且还有蜂鸣器模块。(4)电源模块:USB供电及下载器。

设计课题软件系统的设计

3.1 设计课题软件系统个模块功能简要介绍

本设计的软件系统主要采用以下基本模块来实现,主程序、中断服务程序、键盘输入程序模块、数码管及其驱动模块和延时模块。

主程序:主要是用于对输入信号的处理、输出信号的控制和对各个功能程序模块的控制。

中断服务程序:主要是用于电子钟的1S延时。键盘输入程序模块:主要是用于完成特定时间调整。

数码管及其驱动模块:主要是用于驱动数码管及利用数码管显示时间。延时模块:短延时用于数据的动态显示,按键的判断。

3.2 设计课题软件系统程序流程框图

系统程序采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程序转变成可烧写文件。

主循环程序框图如3.1所示;判断进位程序如3.2所示; 计时一秒中断程序如3.3所示; 启停中断框图如3.4所示; 延时子程序框图如3.5所示; 图3.1 主循环程序 5

图3.2 判断进位子程序

图3.3 计时一秒中断

图3.4 启停中断程序

图3.5 延时子程序 设计结论、运行结果、误差分析

4.1 设计课题的设计结论及使用说明

本设计为基于单片机的电子钟的设计。刚开始,我们很多地方理不清头绪,无从下手,只能从平时的实验中得到一些方法,但通过认真研究设计课题,找书上网查资料,确定基本设计方案,对所用芯片功能进行查找、调试,设计中有四个按键,其中S12为分钟加1调整,S13为小时加1调整,S14为外部响铃按键,S15为启停按键,另外当整点时间到时,蜂鸣器报警。这样的结果与设计基本相符,基本上完成了设计任务。

4.2 设计课题的误差分析

该电子钟在运行中存在一定的误差,误差产生有三种原因,首先是采用的计时利用中断来实现。而当电子钟运行时间1秒时,又得去执行中断程序,这个过程需要几个机器周期。第二,硬件系统有一定的影响。第三,设计用到12MHz晶振,计算是满20次为一秒钟,实际会慢很多。

4.3 设计体会

本次课程设计,让我们三人受益匪浅,认识到了自己的许多缺点和不足,使我深深的感受到了理论联系实际的必要性及其重要性。

参考文献

[1] 李全利.单片机原理与接口技术[M].高等教育出版社.2009.1.[2] 刘文秀.单片机应用系统仿真的研究[J].现代电子技术.2005, 第286 期.[3] 胡学海.单片机原理及应用系统设计[M],北京:电子工业出版社,2005.[4] 李广第.单片机基础[M],北京航空航天大学出版社,2006.7.附录

程序代码为:

ORG 0000H LJMP START ORG 0003H LJMP INTT0 ORG 0013H LJMP INTT1 ORG 000BH LJMP INTT ORG 0100H START:SETB EA SETB ET0 SETB IT0 SETB EX0 SETB IT0 SETB EX1 SETB IT1 MOV R7,#16 MOV TMOD,#01H MOV TH0,#15536/256 MOV TL0,#15536 MOD 256 MOV R0,#12 MOV R1,#0 MOV R2,#0 MOV R6,0FEH CLR TR0 L1:

LCALL PANDUAN;*****************

;记秒

MOV A,R2

MOV B,#10

DIV AB

MOV P2,#0FDH

LCALL XIANSHI

LCALL DELAY

MOV A,B

MOV P2,#0FEH

LCALL XIANSHI

LCALL DELAY;***************

;调分

JB P3.0,L40 L41:JB P3.0,L42 LJMP L41 L42:INC R1

;计分

L40: MOV A,R1

MOV B,#10

DIV AB

MOV P2,#0EFH

LCALL XIANSHI

LCALL DELAY

MOV A,B

MOV P2,#0F7H

LCALL XIANSHI

LCALL DELAY

MOV P2,#0FBH

MOV P0,#0BFH

LCALL DELAY;******************

;调时

JB P3.1,L45 L47:JB P3.1,L46 LJMP L47 L46:INC R0

;计时

L45: MOV A,R0

MOV B,#10

DIV AB

MOV P2,#07FH

LCALL XIANSHI

LCALL DELAY

MOV A,B

MOV P2,#0BFH

LCALL XIANSHI

LCALL DELAY

MOV P2,#0DFH

MOV P0,#0BFH

LCALL DELAY

;*************************;判断5分钟闹铃

CJNE R1,#5,L51

CLR P3.5

MOV P1,R6

MOV A,R6

RL A

MOV R6,A

LJMP L52 L51:CJNE R1,#6,L52

SETB P3.5 L52: LJMP L1

;***************;执行1秒钟

INTT:DJNZ R7,L33

MOV R7,#16

INC R2

MOV P1,R6

MOV A,R6

RL A

MOV R6,A L33:RETI;*********************

;外部中断

INTT0:CPL P3.5

MOV P1,#0

RETI;***********************

;启停功能

INTT1:MOV P1,#0

LCALL DELAY

JB P3.3,L97

CPL TR0

L97: RETI;**********************

;显示子程序

XIANSHI:MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

RET

;**********************

;延时子程序

DELAY:MOV R3,#20

DEL1:MOV R4,#50

DEL2:DJNZ R4,DEL2

DJNZ R3,DEL1

RET

;*******************

;判断进位子程序

PANDUAN:

CJNE R2,#60,L31

MOV R2,#0

INC R1

L31:CJNE R1,#60,L32

MOV R1,#0

INC R0

L32:CJNE R0,#24,L35

MOV R0,#0

L35:RET

;********************

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H

DB 92H,82H,0F8H,80H,90H

END

第三篇:单片机课程设计报告,单片机电子时钟

题 目:单片机课程设计报告

目 录

一、设计目的二、程设计具体要求

三、单片机发展简史

四、8051单片机系统简介

五、8051单片机内部定时器/计数器简介

六、程序电路

七、程序流程

八、程序代码

九 实验总结-要求写出完整的论文以及心得体会

十 参考资料及小结

原 文 :一.目的1. 进一步熟悉和掌握8051单片机的结构及工作原理。

2. 掌握单片机的接口技术及相关外围芯片的外特性,控制方法。

3. 通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。

4. 通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。

5. 通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。

二.课程设计的体要求

a)原理图设计。

1. 原理图设计要符合项目的工作原理,连线要正确,端了要不得有标号。

2. 图中所使用的元器件要合理选用,电阻,电容等器件的参数要正确标明。

3. 原理图要完整,CPU,外围器件,扩器接口,输入/输出装置要一应俱全。

b)程序调计

1. 根据要求,将总体项能分解成若干个子功能模块,每个功能模块完成一个特定的功能。

2. 根据总体要求及分解的功能模块,确定各功能模块之间的关系,设直出完整的程序流程图。c)程序调试将设计完的程序输入,汇编,排除语法错误,生成*OBJ文件。

1. 按所设计的原理图,在实验平台上连线,检查无误。

2. 将汇编后生成的*OBJ文件传送到实验装置的,执行该程序,检查该程序、是否达到设计要求,若未达

到,修改程序,直到达到要求为止,d)说明书

1. 原理图设计说明

简要说明设计目的,原理图中所使用的元器件功能及在图中的作用,各器件的工作过程及顺序。

2. 程序设计说明

对程序设计总体功能及结构进行说明,对各子模块的功能以及各子模块之间的关系作较详细的描述。

3. 画出工作原理图,程序流程图并给出程序清单。

目前,单片机已广泛应用到图民经济建设和日常生活的许多领域,成为测控技术现代化必不可少的重要工具。

单片机电子时钟

作者:佚名来源:本站原创点击数:

491更新时间:2007年06月27日

DS1302是Dallas公司生产的一种实时时钟芯片。它通过串行方式与单片机进 行数据传送,能够向单片机提供包括秒、分、时、日、月、年等在内的实时时间

信息,并可对月末日期、闰年天数自动进行调整;它还拥有用于主电源和备份电源的双电源引脚,在主电源关闭的情况下,也能保持时钟的连续运行。另外,它还能提供31字节的用于高速数据暂存的RAM。鉴于上述特点,DS1302已在许多单片机系统中得到应用,为系统提供所需的实时时钟信息。

一、DS1302的主要特性

1.引脚排列

500)this.width=500 border=0>

图1DS1302引脚排列图

DS1302的引脚排列如图1所示,各引脚的功能如下:

X1,X2——32768Hz晶振引脚端;

RST——复位端;

I/O——数据输入/输出端;

SCLK——串行时钟端;

GND——地;

VCC2,VCC1——主电源与后备电源引脚端。

2.主要功能

DS1302时钟芯片内主要包括移位寄存器、控制逻辑电路、振荡器、实时时钟电路以及用于高速暂存的31字节RAM。DS1302与单片机系统的数据传送依靠RST,I/O,SCLK三根端线即可完成。其工作过程可概括为:首先系统RST引脚驱动至高电平,然后在作用于SCLK时钟脉冲的作用下,通过I/O引脚向DS1302输入地址/命令字节,随后再在SCLK

时钟脉冲的配合下,从I/O引脚写入或读出相应的数据字节。因此,其与单片机之间的数据传送是十分容易实现的。

二、时钟的产生及存在的问题

(1)在实际使用中,我们发现DS1302的工作情况不够稳定,主要表现在实时时间的传送有时会出现误差,有时甚至整个芯片停止工作。我们对DS1302的工作电路进行了分析,其与单片机系统的连接如图2所示。从图中可以看出,DS1302的外部电路十分简单,惟一外接的元件是32768Hz的晶振。通过实验我们发现:当外接晶振电路振荡时,DS1302计时正确;当外接晶振电路停振时,DS1302计时停止。因此,我们认为32768Hz晶振是造成 DS1302工作不稳定的主要原因。

500)this.width=500 border=0>

图2DS1302与单片机系统的连接图

(2)DS1302时钟的产生基于外接的晶体振荡器,振荡器的频率为32768Hz。该晶振通过引脚X1、X2直接连接至DS1302,即DS1302是依靠外部晶振与其内部的电容配合来产生时钟脉冲的。由于DS1302在芯片本身已经集成了6pF的电容,所以,为了获得稳定可靠的时钟,必须选用具有6pF负载电容的晶振。

然而,许多人在选用晶振时仅仅注意了晶振的额定频率值,而忽视了晶振的负载电容大小,甚至连许多经销商也不能提供所售晶振的负载电容。所以即使在使用中选用了符合32768Hz的晶振,但如果该晶振的负载电容与DS1302提供的6pF不一致时,就会影响晶振的起振或导致振荡频率的偏移,出现上述在应用中的问题。

三、利用辅助电容实现负载匹配

(1)当所选的晶振负载电容不是6pF时,可以采用增加辅助电容的方法提高或降低DS1302振荡器的电容性负载,使之与晶体所需的电容值匹配。如果已知晶体的负载电容为CI,若CI<6pF,则可以增加一个并联电容CS以产生所需的总负载电容CI,即CI=6pF+CS;若CI>6pF,则可以在晶体的一端增加一个串联电容CS,以产生所需的负载电容CI,即1/CI=1/6pF+1/CS,通过计算即可得出应增加的辅助电容大小。辅助电容的接法如图3所示。

图3CS连接电路图

(2)在使用前对晶体的负载电容并不知道的情况下,通过测定晶体振荡频率的方法可以确定该晶体的负载电容。

对于晶体振荡器来说,其振荡频率与负载电容之间的关系是确定的。以本文讨论的DS1302使用的32768Hz晶振为例:当它工作于所要求的负载电容时,能较准确地产生 32768Hz的频率;当它的负载电容小于6pF时,其振荡频率会正向偏移;当它的负载电容大于6pF时,其振荡频率就会负向偏移。因此,对于未知负载电容的晶体应首先采用实验的方法,在其两端加入辅助电容使晶体起振,然后用频率计测出振荡频率。若测得频率大于32768Hz,说明负载电容偏小;若测得频率小于32768Hz,说明负载电容偏大。对辅助电容逐步调整,最终使振荡频率尽可能接近32768Hz,则此时晶体端所接负载电容的总和就是适合该晶体的负载电容。

结论

以上方法经我们在实际工作中多次使用,证明确实有效。它放宽了DS1302在使用中对晶振的条件要求,增强了DS1302在工作中的稳定性,对DS1302更广泛地应用具有积极的意义。

华东交大理工学院_2007-2008 _学年第_ 一 学期

课程设计安排计划

班级:_05应电__课程:_单片机原理及接口技术_

一、课程设计题目:数码管时钟电路的设计

二、设计内容及要求:

LED数码管时钟电路24小时计时方式,时、分、秒用6位数码管显示。选用AT89C2051单片机,12MHZ晶振,6位共阳数码管,要求有调时功能,其他功能学生可自由发挥。

三、设计方法与步骤:

1.设计硬件原理电路,选择元器件、确定其参数。

2.设计印刷电路板电路(用面包板做)、焊接硬件电路。

3.设计汇编语言程序,调试硬件电路和程序。

4.编写课程设计报告。

四、设计时间安排:

1.第十九周:周一、二,设计硬件原理电路,选择元器件、确定其参数。

周三、四、五,设计印刷电路板电路(用面包板做)、焊接硬件电路。

2.第二十周:周一、二,设计汇编语言程序。

周三、四,烧录程序,调试硬件电路和程序。

周五,编写课程设计报告。

指导老师: 杨威

时间: 2007、1

第四篇:单片机电子时钟课程设计报告

青岛理工大学琴岛学院 课题名称:单片机原理及应用课程设计学院:

专业班级:

学号:

学生:

指导教师:

设 计 报 告

第五篇:基于单片机的时钟控制器设计

时钟控制器设计任务书

1.设计目的与要求

设计出一个用于数字时钟的控制器,准确地理解有关要求,独立完成系统设计,要求所设计的电路具有以下功能:

(1)显示: 可以显示时、分和秒

(2)调时功能:时(0-24)、分和秒(0-60)可以连续可调(3)时间日误差< 2秒(4)增加整点报时功能(5)增加闹钟任意设定功能 2.设计内容

(1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出;(5)PCB文件生成与打印输出; 3.编写设计报告

写出设计的全过程,附上有关资料和图纸,有心得体会。4.答辩

在规定时间内,完成叙述并回答问题。

目录

1.引言…………………………………………………………………………-1-2 总体设计方案………………………………………………………………-1-2.1 设计思路…………………………………………………………………-1-2.2 方案确立…………………………………………………………………-1-2.3 设计方框图………………………………………………………………-2-3 设计原理分析………………………………………………………………-2-3.1 系统硬件电路设计 ……………………………………………………-2-3.2 主控器件AT89S51 ………………………………………………………-2-3.3 译码器74HC245 …………………………………………………………-3-3.4 显示电路 …………………………………………………………………3-3.5 按键电路…………………………………………………………………-4-3.6 复位电路…………………………………………………………………-4-3.7 蜂鸣电路…………………………………………………………………-5-3.8 时钟电路…………………………………………………………………-5-3.9 总体原理图………………………………………………………………-5-3.10程序框图…………………………………………………………………-5-4 结束语………………………………………………………………………-7-参考文献………………………………………………………………………-8-附录 1 电路总原理图 ………………………………………………………-9-附录 2 总程序………………………………………………………………-10-

基于单片机控制的时钟控制器

摘要:本设计以Atmel公司的AT89S51单片机为控制系统的核心,模型采用单片机作为主控制器,以汇编语言为程序设计的基础,设计的一个用两个四位一体数码管串口显示的时钟控制电路,包含了时钟控制电路的基本功能:数码显示,时间调整,闹钟设定,秒表显示等,按照二十四小时循环,具有调节方便,简单实用,可靠性强的优点,有很高的利用价值。关键词:单片机 AT89C51 74LS245 数码管 引言

数字钟是采用数字电路实现对时、分、秒及数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。为了适应时代的潮流,本设计采用AT89S51单片机为核心,使得计时的精度有了很大的提高,而且调节也变的简单实用,采用数字显示也跟加的直观方便。总体设计方案

2.1 设计思路

本设计采用AT89S51单片机为控制核心,产生精确的时钟震荡,来控制数码管显示电路来进行数码显示,外围电路主要有复位电路,震荡电路,按键电路,显示电路,蜂鸣电路组成;复位电路可及时的对单片机进行复位,恢复到初始的状态,震荡电路主要用于计数,定时,产生合适的波特率,按键电路主要是给人们提供一个合适的人机对话的界面,方便人们进行实时的调节,显示电路主要用于数码的显示,蜂鸣电路用于闹铃设定等辅助功能。2.2 方案确立

本设计主要有包含了时钟电路,按键扫描,显示电路等几个部分。由单片机实现时钟功能单片机内部具有定时器,可方便实现定时功能。按键电路:键盘分为矩阵式键盘扫描电路和独立式按键电路。。矩阵式键盘电路,此类键盘是采用行列扫描方式,优点是当按键较多时可以降低占用单片机的I/O口数目,缺点是电路复杂且会加大编程难度。独立按键电路,每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。缺点是当按键较多时占用单片机的I/O数目较多,优点是电路设计简单,且编程极其容易。由于该系统采用了常规钟表式的校对方式,用键较少,系统资源足够用,故采用了独立按键电路。显示电路分为:静态显示法与动态显示法,由于静态显示法需要数据锁存器等硬件,接口复杂一些,又考虑到时钟显示只有6位,且系统没有其它复杂的处理任务,所以决定采用动态显示法。2.3 硬件设计方框图

电路的设计以AT89S51单片机为核心,包含了按键电路,复位电路,震荡电路,数 码显示电路,整点报时电路等一系列独立环节,下面介绍一下电路设计过程中的总体框图,如图1所示。

图1 时钟电路总体框图 设计原理分析

用AT89S51单片机控制的数字时钟电路,外接震荡电路,按键电路,显示电路,蜂鸣电路等:用单片机电路P0口来输出7段码数据,P2.0~P2.5口作列扫描输出;按键用P1口控制,分别用于调节时,分,以及秒表和闹钟的设定;P1.7口接5V的小蜂鸣器,用于按键发音以及定时提醒,整点报时提醒等;采用74HC245作为数码管的段码驱动,为了提供共阳LED数码管的列扫描驱动电压,用三极管8550做电源的驱动输出;采用12MHZ晶振,可提高秒计时的精确性;在软件设计方面,应完成时钟控制电路的各项要求。

3.1 系统硬件电路设计

系统硬件电路主要组成:主控制器AT89S52、译码器74HC245、显示电路、蜂鸣器电路,复位电路时钟电路。3.2 主控器件AT89C51 AT89S51是一款低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。管脚如图2所示。

图2 DIP-40封装89C51引脚图

3.3译码器74LS245 74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。当89S51单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当CE为高电平时,A、B均为高阻态。P0口与74LS245输入端相连,E端接地,保证数据线畅通。管脚如图3所示。

图3 74LS245管脚图

3.4 显示电路

LED显示块是由发光二极管显示字段的显示器件。这种显示块有共阴与共阳两种结构。共阴极LED显示块的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,发光二极管点亮。共阳极LED显示块的放光二极管阳极并接。显示块与单片机接口非常容易,只要将一个8位并行输出口语显示块的发光二极管引脚相连即可(AT89S51需要加上拉电阻)。此次电路采用2个4位共阳LED数码管,从P0口输出段码,列扫描用P2.0~P2.7来实现。如图4所示。

图4 74LS245驱动段码显示电路图

3.5 按键电路

按键调节电路有四个独立的按键接到P1口的P1.0—P1.3端口,控制着电路的调时,调分以及秒表功能和闹钟的设定。具体电路如下图5所示。

图5 按键电路图

3.6 复位电路

AT89S51单片机的复位电路,如图5所示中左边电路。在RESET输入端出现高电平时实现复位和初始化。在震荡器运行的情况下,要实现复位操作,必须使RST引脚至少 保持两个机器周期的高电平。在CPU在第二个机器周期内执行内部复位操作,以后每一个机器周期重复一次,直至RST端电平变低复位期间不产生ALE信号。当RST引脚返回低电平以后,CPU从0地址开始执行程序。3.7 蜂鸣电路

蜂鸣器是广泛应用于各种电子产品的一种元器件,它用于提示、报警、音乐等许多应用场合。三极管8550作蜂鸣器的驱动,增加了蜂鸣器的驱动电流。蜂鸣器的正极性的一端接到三极管的集电极,另一端连接到地,三极管的基极由单片机的P1.7管脚控制,底电平时蜂鸣器响,高电平时不响。另外,蜂鸣器的声音大小及音调可以通过调整P1.7管脚的置低时间及输出的波形进行控制。蜂鸣器的连接电路的原理图如图5所示。3.8 时钟电路

AT89S51内部片内有一个由反相放大器构成的振荡电路,XTAL1和XTAL2分别为震荡电路的输入端和输出端。时钟可以由内部方式产生或外部方式产生。在XTAL1和XTAL2引脚上外接定时元件,内部震荡电路就产生自己震荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。外部方式的时钟电路,XTAL1接地,XTAL2接外部振荡器。一般要求输入方波信号的频率低于33Mhz。本文设计的系统采用的是内部方式的时钟电路。如图6所示。

图6 时钟电路原理图

3.9 总体原理图

见附录1 3.10程序框图

主程序如图7所示首先是初始化部分,主要是计时单元清零,中断初始化,启动定时器工作,然后是调用显示子程序,接着是判断有无按键。无按键则回到调用显示子程序处;有按键,则执行按键处理子程序,执行完后回到调用显示子程序处,重复循环。定时器T0中断如图8所示

图7 主程序流程图

图8 中断程序流程图 结束语

三周实习很快就过去了,通过自行设计、焊接和调试一个单片机系统,我熟悉了单片机基本的开发流程和单片机的深入学习。在完成这个设计的同时,我复习了书本上的许多相关内容,受益匪浅。因此我在获得理论知识的同时,实践中也获得了许多书本上没有的东西。提高了调试以及查找并解决问题的能力,我深入了解了焊普通元件与电路元件的技巧、数字时钟的工作原理及其它各电路元件的作用等。这些知识不仅在课堂上有效,对以后的学习工作有很大的指导意义,在日常生活中更是有着现实意义;也对自己的动手能力是个很大的锻炼。实践出真知,纵观古今,所有发明创造无一不是在实践中得到检验的。没有足够的动手能力,就奢谈在未来的科研尤其是实验研究中有所成就。最后,感谢老师对我们这次实习的辛勤指导和帮助。

参考文献

[1] 李光飞,楼然苗,胡佳文编著.单片机课程设计实例指导.北京:北京航空航天大学出版社.2004 [2] 黄仁欣主编.单片机原理及应用技术.北京: 清华大学出版社.2005.[3] 高吉祥主编.电子技术基础实验与课程设计.北京:电子工业出版社.2002 [4] 肖玲妮.印刷电路板设计教程.[M].北京:清华大学出版社,2003.[5] 康华光.电子技术基础.[M].北京;高等教育出版社,2006.[6] 余小平等.电子系统设计.[M].北京:北京航空航天大学出版社,2007.附录1: 11 电路总原理图

附录2: 总程序

ORG 0000H LJMP START ORG 000BH LJMP INIT0 START: MOV 70H,#0 MOV 71H,#0 MOV 72H,#0 MOV 73H,#0 MOV 74H,#0 MOV 75H,#0 MOV 76H,#0 MOV 77H,#0 MOV 78H,#0 MOV 79H,#0 MOV 7AH,#0 MOV 7BH,#0 MOV 7CH,#0 MOV 7DH,#0 MOV 7EH,#0 MOV 72H,#0AH;对连字符进行装值

MOV 75H,#0AH MOV 60H,#0 MOV 61H,#0 MOV 63H,#0 MOV 64H,#0 CLR P1.7 MOV TMOD,#01H;选择定时器/计数器T0的方式1 MOV TL0,#0B0H;对低位赋初值 MOV TH0,#03CH;高位赋初值 SETB EA SETB ET0 SETB TR0 START1: LCALL SCAN LCALL KEYSCAN SJMP START1 DL1MS: MOV R6,#14H;延时1子程序 DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET DELAY: MOV R6,#10 D1: MOV R7,#30 DJNZ R7,$ DJNZ R6,D1 RET

DL20MS: ACALL SCAN;延时20ms子程序 ACALL SCAN ACALL SCAN RET

;整点报时将秒和分的单元与零比较 SCAN: MOV A,7EH;7F单元的内容为0

CJNE A,79H,NEXT MOV A,7DH

CJNE A,7AH,NEXT SETB P1.7 AJMP NEXT1 NEXT: CLR P1.7 NEXT1:

MOV A,79H

CJNE A,#0,NEXT2 MOV A,78H

CJNE A,#0,NEXT2 SETB P1.7 LJMP NEXT3 NEXT2:CLR P1.7

;数码管总显示程序开始分两部分

;校正时间和数码管正常工作的显示程序 NEXT3: MOV A,78H MOV B,#0AH

DIV AB;时间秒的十位送给A,时间秒的个位送B

MOV 71H,A;时间秒要显示的十位

MOV 70H,B;时间秒要显示的个位

MOV A,79H MOV B,#0AH

DIV AB;时间分的十位送给A,时间分的个位送B

MOV 74H,A;时间分要显示的十位送地址

MOV 73H,B;时间分要显示的个位送地址

MOV A,7AH MOV B,#0AH DIV AB;时间时的十位送给A,时间时的个位送B MOV 77H,A;时间时显示的十位送地址

MOV 76H,B;时间时要显示的个位送地址

MOV R1,#70H LCALL DL1MS JB P1.2,LAST HERE3:JNB P1.2,HERE3 INC 7EH MOV A,7EH

CJNE A,#3CH,LOOP3 MOV 7EH,#00H;调制闹铃的时间显示 LOOP3: MOV DPTR,#TAB MOV R5,#0FEH MOV A,7DH MOV R3,#09H

MOV B,#10 SCAN1: MOV A,R5;数码管正常工作的显 DIV AB 示程序

MOV 64H,A MOV P2,A MOV 63H,B MOV A,@R1 MOV A,7EH MOV DPTR,#TAB

MOV B,#10 MOVC A,@A+DPTR;对字段表取值 DIV AB 显示

MOV 61H,A MOV P0,A MOV 60H,B MOV A,R5 MOV P2,#0F7H LCALL DL1MS MOV A,60H INC R1 MOVC A,@A+DPTR MOV A,R5 MOV P0,A RL A LCALL DELAY MOV R5,A MOV P2,#0EFH DJNZ R3,SCAN1 MOV A,61H MOV P2,#00H MOVC A,@A+DPTR MOV P0,#00H MOV P0,A JB P1.3,QQ LCALL DELAY LCALL DL1MS MOV P2,#0DFH JB P1.3,QQ MOV P0,#40H HERE: JNB P1.3,HERE LCALL DELAY SJMP LOOP1 MOV P2,#0BFH

MOV A,63H QQ: LJMP LAST MOVC A,@A+DPTR LOOP1:JB P1.1,LOOP2 MOV P0,A LCALL DL1MS LCALL DELAY JB P1.1,LOOP2 MOV P2,#07FH HERE1:JNB P1.1,HERE1 MOV A,64H INC 7DH MOVC A,@A+DPTR MOV A,7DH

MOV P0,A CJNE A,#18H,LOOP2 LCALL DELAY MOV 7DH,#00H JB P1.3,LOOP4 LOOP2:JB P1.2,LOOP3 LCALL DL1MS 14 JB P1.3,LOOP4 HERE4:JNB P1.3,HERE4 LJMP LAST LOOP4:LJMP LOOP1 LAST: RET;“0~9”和“-”的字段表 TAB:

DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H

;定时/计数器T0中断程序 INIT0: PUSH ACC PUSH PSW CLR ET0 CLR TR0 MOV TL0,#0B0H MOV TH0,#03CH SETB TR0 INC 7BH MOV A,7BH CJNE A,#14H,OUTT0;50ms是否到20次,没有到就继续执行50ms的延时

MOV 7BH,#00 INC 78H MOV A,78H CJNE A,#3CH,OUTT0;一秒的延时是否计到60次,没有就继续执行

MOV 78H,#00 INC 79H MOV A,79H CJNE A,#3CH,OUTT0 MOV 79H,#00 INC 7AH MOV A,7AH CJNE A,#18H,OUTT0;60分钟的延时是否计到24次,没有就继续执行程序 MOV 7AH,#00 OUTT0: SETB ET0;启动定时器T0 POP PSW POP ACC RETI;按键处理程序 KEYSCAN:CLR EA

JNB P1.0,KEYSCAN0;P1.0有按键按下则跳转到子程序

JNB P1.1,KEYSCAN1;P1.1有按键按下则跳转到子程序

JNB P1.2,KEYSCAN2;P1.2有按键按下则跳转到子程序

KEYOUT: SETB EA RET

KEYSCAN0:LCALL DL20MS;20ms的延时消抖

JB P1.0,KEYOUT WAIT0: JNB P1.0,WAIT0;判断按键是否松手,松手就往下执行程序 INC 7CH MOV A,7CH CLR ET0 CLR TR0

CJNE A,#04H,KEYOUT;按下第一次和第二次对时、分选定

MOV 7CH,#00;按下第三次时就启动计时

SETB ET0 SETB TR0 LJMP KEYOUT

KEYSCAN1:LCALL DL20MS;按键加一的程序

JB P1.1,KEYOUT WAIT1: JNB P1.1,WAIT1 MOV A,7CH

CJNE A,#03H,KSCAN11;如果功能键按下则对时加一调整 INC 78H MOV A,78H

CJNE A,#60,KEYOUT MOV 78H,#00 LJMP KEYOUT

KSCAN11: CJNE A,#02H,KSCAN12 INC 79H MOV A,79H

CJNE A,#60,KEYOUT;如果加到60则清零

MOV 79H,#00 LJMP KEYOUT KSCAN12:CJNE A,#01H,KEYOUT INC 7AH;如果功能键是按下第二次则对分进行加一调整

MOV A,7AH CJNE A,#18H,KEYOUT MOV 7AH,#00 LJMP KEYOUT KEYSCAN2:LCALL DL20MS;延时消抖程序 JB P1.2,KEYOUT WAIT2: JNB P1.2,WAIT2;判断是否放开按键

MOV A,7CH;如果功能键是按下第一次对时进行减一 CJNE A,#03H,KSCAN22 DEC 78H MOV A,78H CJNE A,#00H,KEYOUT MOV 78H,#3BH LJMP KEYOUT KSCAN22:CJNE A,#02H,KSCAN23 DEC 79H MOV A,79H CJNE A,#00H,KEYOUT1 MOV 79H,#3BH LJMP KEYOUT KSCAN23:CJNE A,#01H,KEYOUT1 DEC 7AH MOV A,7AH;如果功能键是按下第二次则对分进行减一 CJNE A,#00H,KEYOUT1 MOV 7AH,#17H LJMP KEYOUT1 KEYOUT1: SETB EA RET END

下载基于51单片机电子时钟设计word格式文档
下载基于51单片机电子时钟设计.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    AVR单片机的时钟设计(范文)

    基于AVR单片机Mega16的时钟设计报告1摘 要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,......

    数字电子时钟设计

    (电子技术课程) 设计说明书 数字电子时钟 起止日期: 2016 年11月23日 至2016年 11月 27 日 学生姓名 班级 学号 成绩 指导教师(签字) 交通工程学院(部) 2016年11月29日 数字......

    单片机课程设计 (51单片机实现电子时钟)(精选五篇)

    湖北文理学院 单片机课程设计 题目:用51单片机实现电子时钟 院 部 物理与电子信息工程学院 专 业 名 称 电子信息科学与技术 班 级 1111 姓 名 杨庆月 学 号 2011111136 指......

    电子时钟 单片机实习报告(写写帮推荐)

    桂林理工大学博文管理学院 实习名称:专业班级:学生姓名:指导老师:实习时间: 实习报告 单片机应用实践 学号: 2015年12月14日至 2016年1月4日 题目名称:基于MSP430G2231实现的简......

    基于单片机的时钟控制器设计论文

    单片机原理与应用技术课程设计报告 基于单片机控制的时钟控制器 专业班级: _电气XX班_ __ 姓名:__ ___XXX__ ___ 时 间:2013/11/25~12/15 指导教师: XXXX XXX 2013年12月11日......

    数字电路电子时钟课件设计

    数字电路电子时钟课程设计 数字电路电子时钟课程设计 整个数字钟由时间计数电路、晶体振荡电路、校正电路、整点报时电路组成。 其中以校正电路代替时间计数电路中的时、分......

    电子时钟电子CAD设计报告

    电子电路CAD课程设计 流水灯 内 容 摘 要 《电子线路CAD Protel》是一门实践性要求很高的课程,学生需要通过上机实习和设计环节巩固所学知识,进而综合运用所学知识针对不同的......

    89C51单片机时钟程序

    SECOND EQU 40H ;给内存RAM空间中40H单元起名SECOND MINUTE EQU 41H ;给内存RAM空间中41H单元起名MINUTE HOUR EQU 42H ;给内存RAM空间中42H单元起名HOUR SECONDGEWEI EQ......