1. 首页 > 电脑手机 >

单片机电子时钟课程设计报告 51单片机电子时钟课程设计报告

设计任务 基本要求:用单片机开发板和6个数码管设计一个显示小时分钟秒的电子时钟,一小时内误差小于5秒。

课程设计的目的和意义

单片机电子时钟课程设计报告 51单片机电子时钟课程设计报告单片机电子时钟课程设计报告 51单片机电子时钟课程设计报告


课程设计的目的与意义在于让我们将理论与实践相结合。培养我们综合运用电子课程中的理论知识解决实际性问题的能力。让我们对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。

课程设计的基本任务

利用89S51单片机最小系统,综合应用单片机定时器、中断、数码显示、键盘输入、蜂鸣报警等知识,设计一款单片机和简单外设控制的电子时钟。

主要功能要求

最基本要求

1)使用6位数码管,前两位显示小时(24小时制),中间两位显示分钟,后两位显示秒。时钟每走1秒,秒数码管加1显示,60秒后分钟数码管加1显示,60分钟后小时数码管加1显示。

2)设计89S51单片机最小系统

3)掌握使用Protel99 绘制原理图和布板的过程、方法和技巧。

4)掌握单片机开发软件(Keil C51或 Wave)的使用和调试。

5)编写并调试单片机定时及其中断程序,以实现电子时钟的功能。

6)设计八段数码管显示电路并编写驱动程序,输入并调试拆字程序和数码显示程序。

7)掌握硬件和软件联合调试的方法。

8)完成系统硬件电路的设计和制作。

9)完成系统程序的设计。

10)完成整个系统的设计、调试和制作。

11)完成课程设计报告。

我有一这样的程序原代码与框图; 板没有;自己得COPY 芯里的;

基本分基础语言和C语言,程序可以在课本或网络查到,用“电子时钟”编程查询

基本分基础语言和C语言,程序可以在课本或网络查到,用“电子时钟”编程查询

基本分基础语言和C语言,程序可以在课本或网络查到,用“电子时钟”编程查询

自己设计,还没达到这个水平

这要比较专业人士才行吧!

单片机做时钟相对比较麻烦的,没有免费的

慢慢调试就好了,不是很难

本设计以AT89S51单片机为核心芯片,与型号为1602的液晶显示器构成数字电子时钟电路。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4K Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及AT89C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案.液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。

我一直都是从电池-石英钟里面取秒信号。

注意,石英钟的线圈驱动,是用两个图腾柱输出驱动,有一种音频功放就是这种结构,每个图腾柱有上下两个串联的开关,两个图腾柱的上下开关交替导通,每次导通的时间大约几十毫秒。

要是从一个图腾柱取信号,好像是两秒一次,

从两个图腾柱取信号,经过或门,就是一秒一次脉冲。

再经过计数器,给定器,对前两者符合判别的异或门,就能达到要求。

特别要注意,石英钟的信号是1伏特多点,要用三极管进行电平放大!

计数器一般用二极管与门判别,符合后产生单稳触发计数器复位和定时输出信号。

下岗清洁工人答复

我这里有资料,现在没找着。等两天我再回答吧。

#include

#include

#include

#define

unit

unsigned

int

#define

uchar

unsigned

char

//#define

HZ

12

sbit

key0=P0^0;

//

分钟调整

sbit

key1=P0^1;

//

小时调整

sbit

P2_0=P2^7;

//秒

指示灯

sbit

MN_RXD=P3^6;

sbit

MN_TXD=P3^7;

uchar

data

CLOCK[4]={0,0,0,12};//存放时钟时间(百分秒,秒,分,和时位)

//数码管显示表0-f

灭uchar

code

TABLE[]={0xBE,0x06,0xEA,0x6E,0x56,0x7C,0xFC,0x0E,0xFE,0x7E,0x00};

//**********************************

//模拟串口发送一个字节数据

函数

//**********************************

void

SendData(unsigned

char

senddata)

{unsigned

char

i;

for(i=0;i<8;i++)

{if((senddata&0x01)==0)

MN_RXD=0;

else

MN_RXD=1;

_nop_();

MN_TXD=0;

_nop_();

MN_TXD=1;

senddata=senddata>>1;

}}

//**********************************

//显示程序函数

//**********************************

void

display(void)

{//

unsigned

int

n;

uchar

temp;

temp=CLOCK[1];

temp=temp%10;

SendData(TABLE[temp]);

temp=CLOCK[1];

temp=temp/10;

SendData(TABLE[temp]);

temp=CLOCK[2];

temp=temp%10;

SendData(TABLE[temp]);

temp=CLOCK[2];

temp=temp/10;

SendData(TABLE[temp]);

temp=CLOCK[3];

temp=temp%10;

SendData(TABLE[temp]);

temp=CLOCK[3];

temp=temp/10;

SendData(TABLE[temp]);

/*

for(n=0;n<5000;n++);

for(n=0;n<6;n++)

{SendData(TABLE[10]);

}*/

}//**********************************

//按键控制函数

//**********************************

void

keycan()

{unsigned

int

n;

EA=0;

if(key0==0)

//

分钟调整

{for(n=0;n<10000;n++);

//延时去抖动

while(key0==0);

CLOCK[2]=CLOCK[2]+1;

if(CLOCK[2]==60)

//到一时

{CLOCK[2]=0;

}display();

}if(key1==0)

//

小时调整

{for(n=0;n<10000;n++);

//延时去抖动

while(key1==0);

CLOCK[3]=CLOCK[3]+1;

if(CLOCK[3]==24)

{CLOCK[3]=0;

}display();

}EA=1;

}//**********************************

//T0中断服务函数

//**********************************

void

time0()

interrupt

1//using

1{

TH0=0xD8;

TL0=0xF0;

//重置初值

//

TH0=0xB1;

TL0=0xE0;

//时钟处理

CLOCK[0]=CLOCK[0]+1;

}//**********************************

//主函数

//**********************************

void

main()

{EA=1;

ET0=1;

TMOD=0x01;

//T0方式1定时

TH0=0xD8;

TL0=0xF0;

//D8F0

定时10ms

//

TH0=0xB1;

TL0=0xE0;

//定时

20ms

TR0=1;

for(;;)

{if(CLOCK[0]==100)

//到一秒

10ms*100

{CLOCK[0]=0;

P2_0=~P2_0;

CLOCK[1]=CLOCK[1]+1;

if(CLOCK[1]==60)

//到一分

{CLOCK[1]=0;

CLOCK[2]=CLOCK[2]+1;

if(CLOCK[2]==60)

//到一时

{CLOCK[2]=0;

CLOCK[3]=CLOCK[3]+1;

if(CLOCK[3]==24)

{CLOCK[3]=0;

}}

}display();

}keycan();

}}

一. 数码钟工作简介

本作品采用Atmel公司的AT89C51单片机,以汇编语言为程序设计的基础,设计一个用四位数码管显示时、分的时钟。在实物图中,左边靠近电源的绿色发光二极管(长亮)是电源指示灯,表示的是5V稳定电源工作正常;单片机左下角红色发光二极管是秒灯,每闪烁一次表示时间走动一秒钟;按键正上方绿色发光二极管是设置灯,当时间正常走动时此时不亮,当第一次按下设置键(右键)时,此绿灯亮,同时秒时熄灭,且分钟的两位数码管出现闪烁,时间停止走动,进入校时状态,表示此时可以进行分钟的调整,当按一次加一键(左键)可实现分钟的加一功能,分钟以60分为极限,超出60分则返回数值0,从0再重新算起;如果再次按下设置键时,这时秒灯和设置灯仍旧保持熄灭和点亮状态,表示分钟的数码管停止闪烁,反过来表示小时的两位数码管则开始闪烁,此时可进行小时的调整,按加1键可实现小时的加1功能,小时调整以24为上限,同样超出24小时则从新回0;当第三次按下设置键时,数码管停止闪烁,设置灯熄灭,秒灯重新闪烁,时间以设定值计时。

可以用1302做

我有现成的

LCD1602

显示的,51做的

基本思路是用单片机读取1302里面的信息,处理,然后送LCD1602显示。

有兴趣可以去我博客看,里面还上传了之前我做的实物图片和PCB,可以照着做。

源程序如下:

ORG

0000H

;程序开始入口

LJMP

START

ORG

0003H

;外中断0中断程序入口

RETI

ORG

000BH

;定时器T0中断程序入口

LJMP

INTT0

;跳至INTTO执行

ORG

0013H

;外中断1中断程序入口

RETI

ORG

001BH

;定时器T1中断程序入口

LJMP

INTT1

ORG

0023H

;串行中断程序入口地址

RETI

;---------------主程序----------------------;

START:MOV

R0,#70H

;70给R0,清70-7FH显示内存

MOV

R7,#0FH

CLEARDISP:MOV

@R0,#00H

;0给R0中的数为地址的内存中存放(70H)

INC

R0

DJNZ

R7,CLEARDISP

MOV

78H,#2

;默认时间为12:00,闹钟5:00

MOV

79H,#1

MOV

74H,#2

;防止上电时数码管显示00小时

MOV

75H,#1

MOV

66H,#1

;中断退出时66H为1时,分、时计时单元数据移入显存标志

MOV

68H,#1

;上电默认闹钟开状态

MOV

7DH,#6

;闹钟时十位

MOV

7CH,#3

MOV

69H,#0

MOV

7AH,#0AH

;放入"熄灭符"数据

MOV

TMOD,#11H

;设T0、T1为16位定时器

MOV

TL0,#0B0H

;50MS定时初值(T0计时用)

MOV

TH0,#3CH

SETB

EA

;总中断开放

SETB

ET0

;允许T0中断

SETB

TR0

;T0定时器开始计时

MOV

R4,#14H

;1秒定时用初值(50MS×20)

START1:LCALL

DISPLAY

;显示子程序

LCALL

BEEP

;闹钟查询

JNB

P1.7,SETTIME

;P1.7口为0时转时间调整程序

JMP

START1

;P1.7口为1时跳回START1

;-----------------------时间闹钟调整系统--------------------------;

NFLAG:MOV

A,68H

;设置闹钟开关状态

CJNE

A,#1,BEE68

MOV

68H,#0

JMP

E6

BEE68:MOV

68H,#1

E6:MOV

66H,#8

;中断退出66H不为1时分、时计时单元数据移入显存标志

MOV

72H,7BH

MOV

73H,7CH

MOV

74H,7DH

MOV

75H,7EH

LCALL

DDL

LCALL

DDL

MOV

72H,68H

MOV

73H,69H

MOV

74H,7AH

MOV

75H,7AH

LCALL

DDL

LCALL

DDL

MOV

66H,#1

LJMP

START1

SETTIME:LCALL

DDL

JB

P1.7,NFLAG

;键按下时间小于1秒,设置闹钟开关状态并查看闹钟时间,不关走时,确保准确,大于1秒调时

MOV

TL1,#0B0H

;T1闪烁定时初值

MOV

TH1,#3CH

MOV

R2,#06H

;进入调时状态,赋闪烁定时初值

MOV

66H,#8

;调闹钟时保持走时,关闭时钟显示数据

SETB

ET1

;允许T1中断

SETB

TR1

;开启定时器T1

SET1:LCALL

DISPLAY

;调用显示,防止键按下无显示

JNB

P1.7,SET1

;P1.7口为0等待键释放

MOV

R5,#00H

;清设置类型闪烁标志

SETN1:INC

R5

;闹钟分调整

SET5:LCALL

DISPLAY

JB

P1.7,SET5

SEETN1:LCALL

DDL

;有键按下大于1秒分时间连续加(0.5秒加1),小于1秒转调时状态

JB

P1.7,SET6

;键释放查询,键释放自动转调时

MOV

R0,#7CH

LCALL

ADD1

MOV

A,R3

CLR

CCJNE

A,#60H,HHN1

HHN1:JC

SEETN1

LCALL

CLR0

JMP

SEETN1

SET6:INC

R5

;闹钟时调整

SEET6:LCALL

DISPLAY

JB

P1.7,SEET6

SEETNH1:LCALL

DDL

JB

P1.7,SETF

MOV

R0,#7EH

LCALL

ADD1

MOV

A,R3

CLR

CCJNE

A,#24H,HOUU1

HOUU1:JC

SEETNH1

LCALL

CLR0

JMP

SEETNH1

SETF:LCALL

DISPLAY

JB

P1.7,SETF

LCALL

DDL

JNB

P1.7,SETOUT

;短按调时,长按退出

CLR

ET0

CLR

TR0

MOV

70H,#00H

;设定后的时间从00秒开始走时

MOV

71H,#00H

INC

R5

SET3:LCALL

DISPLAY

JB

P1.7,SET3

SETMM:LCALL

DDL

JB

P1.7,SET4

MOV

R0,#77H

LCALL

ADD1

MOV

A,R3

CLR

CCJNE

A,#60H,MMH

MMH:JC

SETMM

LCALL

CLR0

AJMP

SETMM

SET4:INC

R5

SEET4:LCALL

DISPLAY

JB

P1.7,SEET4

SETHH:LCALL

DDL

JB

P1.7,SETOUT1

MOV

R0,#79H

LCALL

ADD1

MOV

A,R3

CLR

CCJNE

A,#24H,HOUU

HOUU:JC

SETHH

LCALL

CLR0

AJMP

SETHH

SETOUT1:SETB

ET0

SETB

TR0

;计时开始

SETOUT:MOV

R5,#00H

;清设置类型闪烁标志

CLR

TR1

;关闭T1

CLR

ET1

;关T1中断

MOV

66H,#1

SETOUT2:LCALL

DISPLAY

JNB

P1.7,SETOUT2

LJMP

START1

;--------------------------延时1秒钟-----------------------;

DDL:MOV

18H,#36

DDL0:MOV

17H,#239

DDL1:LCALL

DISPLAY

DJNZ

17H,DDL1

DJNZ

18H,DDL0

RET

;----------------------------T0中断程序------------------------;

INTT0:

PUSH

ACC

;打包

PUSH

PSW

CLR

ET0

CLR

TR0

MOV

A,#0B7H

ADD

A,TL0

MOV

TL0,A

MOV

A,#3CH

ADDC

A,TH0

MOV

TH0,A

SETB

TR0

DJNZ

R4,

OUTT0

;20次中断未到中断退出

ADDSS:

MOV

R4,#14H

;20次中断到(1秒)重赋初值

MOV

R0,#71H

;指向秒计时单元(70-71H)

ACALL

ADD1

;调用加1程序(加1秒操作)

MOV

A,R3

;秒数据放入A(R3为2位十进制数组合)

CLR

C;清进位标志

CJNE

A,#60H,ADDMM

ADDMM:

JC

OUTT01

;小于60秒退出

ACALL

CLR0

;等于或大于60秒清0

MOV

R0,#77H

;指向分计时单元(76H-77H)

ACALL

ADD1

MOV

A,R3

CLR

CCJNE

A,#60H,ADDHH

ADDHH:

JC

OUTT0

ACALL

CLR0

MOV

R0,#79H

;指向小时计时单元(78H-79H)

ACALL

ADD1

MOV

A,R3

CLR

CCJNE

A,#24H,HOUR

HOUR:

JC

OUTT0

ACALL

CLR0

OUTT0:

MOV

A,66H

;查询标志

CJNE

A,#1,OUTT01

MOV

72H,76H

;中断退出时将分、时计时单元数据移入对应显示单元

MOV

73H,77H

MOV

74H,78H

MOV

75H,79H

OUTT01:POP

PSW

;出栈

POP

ACC

SETB

ET0

;开放T0

RETI

;中断返回

;---------------------------加1程序--------------------------;

ADD1:

MOV

A,@R0

;取当前计时单元数据到A

DEC

R0

;指向前一地址

SWAP

A;A中数据高四位与低四位交换

ORL

A,@R0

;前一地址中数据放入A中低四位

ADD

A,#01H

;A加1操作

DA

A;十进制调整

MOV

R3,A

;移入R3寄存器

ANL

A,#0FH

;高四位变0

MOV

@R0,A

;放回前一地址单元

MOV

A,R3

;取回R3中暂存数据

INC

R0

;指向当前地址单元

SWAP

A;A中数据高四位与低四位交换

ANL

A,#0FH

;高四位变0

MOV

@R0,A

;数据放入当削地址单元中

RET

CLR0:

CLR

CCLR

A;清累加器

MOV

@R0,A

;清当前地址单元

DEC

R0

;指向前一地址

MOV

@R0,A

;前一地址单元清0

RET

;子程序返回

;-------------------------调时闪烁程序----------------------;

INTT1:

PUSH

ACC

PUSH

PSW

MOV

TL1,#0B0H

MOV

TH1,#3CH

DJNZ

R2,INTT1OUT

;0.3秒未到退出中断(50MS中断6次)

MOV

R2,#06H

;重装0.3秒定时用初值

CPL

02H

;0.3秒定时到对闪烁标志取反

JB

02H,FLASH1

;02H位为1时显示单元"熄灭"

MOV

A,R5

CJNE

A,#01H,NL

JMP

NNN1

NL:CJNE

A,#02H,NL1

LJMP

NNN1

NL1:CJNE

A,#03H,NL2

LJMP

NLL

NL2:CJNE

A,#04H,INTT1OUT

LJMP

NLL

NLL:MOV

72H,76H

MOV

73H,77H

MOV

74H,78H

MOV

75H,79H

AJMP

INTT1OUT

NNN1:MOV

72H,7BH

MOV

73H,7CH

MOV

74H,7DH

MOV

75H,7EH

INTT1OUT:POP

PSW

;恢复现场

POP

ACC

RETI

;中断退出

FLASH1:MOV

A,R5

CJNE

A,#01H,ML

LJMP

MNN1

ML:CJNE

A,#02H,ML1

LJMP

MNN2

ML1:CJNE

A,#03H,MN

LJMP

MLL

MN:CJNE

A,#04H,INTT1OUT

LJMP

MHL

MLL:MOV

72H,7AH

MOV

73H,7AH

;显示单元(72-73H),将不显示分数据

MOV

74H,78H

MOV

75H,79H

AJMP

INTT1OUT

MHL:MOV

72H,76H

MOV

73H,77H

MOV

74H,7AH

;显示单元(74-75H),小时数据将不显示

MOV

75H,7AH

AJMP

INTT1OUT

MNN1:MOV

72H,7AH

MOV

73H,7AH

;显示单元(72-73H),将不显示闹钟分数据

MOV

74H,7DH

MOV

75H,7EH

AJMP

INTT1OUT

MNN2:MOV

72H,7BH

MOV

73H,7CH

MOV

74H,7AH

MOV

75H,7AH

;显示单元(74-75H),闹钟小时数据将不显示

AJMP

INTT1OUT

;-------------------------显示-------------------------------;

DISPLAY:MOV

DPTR,#DISDATA

MOV

A,70H

MOVC

A,@A+DPTR

MOV

P3,A

CLR

P1.0

NOP

NOP

NOP

SETB

P1.0

MOV

A,71H

MOVC

A,@A+DPTR

MOV

P3,A

CLR

P1.1

NOP

NOP

NOP

SETB

P1.1

MOV

A,72H

MOVC

A,@A+DPTR

MOV

P3,A

CLR

P1.2

NOP

NOP

NOP

SETB

P1.2

MOV

A,73H

MOVC

A,@A+DPTR

MOV

P3,A

CLR

P1.3

NOP

NOP

NOP

SETB

P1.3

MOV

A,74H

MOVC

A,@A+DPTR

MOV

P3,A

CLR

P1.4

NOP

NOP

NOP

SETB

P1.4

MOV

A,75H

MOVC

A,@A+DPTR

MOV

P3,A

CLR

P1.5

NOP

NOP

NOP

SETB

P1.5

RET

BEEP:MOV

A,68H

;查询标志

CJNE

A,#1,BEERE

MOV

A,78H

;查询闹钟时个位

CJNE

A,7DH,BEERE

MOV

A,79H

;查询闹钟时十位

CJNE

A,7EH,BEERE

MOV

A,76H

;查询闹钟分个位

CJNE

A,7BH,BEERE

MOV

A,77H

;查询闹钟分十位

CJNE

A,7CH,BEERE

BB:CLR

P1.6

LCALL

DDL

SETB

P1.6

LCALL

DDL

JNB

P1.7,BEERR

BEERE:RET

BEERR:SETB

P1.6

MOV

68H,#0

LCALL

DISPLAY

JNB

P1.7,BEERR

JMP

BEERE

DISDATA:DB

0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH

;0123456789空白

END

你这问的也太那个了吧,10分?

编程好编,但是前提是你的硬件电路连接得知道。包括是否用锁存器之类的东西

200分,都没人给你做。

建议,你在网上下个制作视频教程自己看去吧。

这么复杂的东西给这么少分 晕死了 你也太小气了吧,分多的话还可能帮你动动脑

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息