单片机计时时钟制作.docx

上传人:b****5 文档编号:6870332 上传时间:2023-01-11 格式:DOCX 页数:27 大小:26.58KB
下载 相关 举报
单片机计时时钟制作.docx_第1页
第1页 / 共27页
单片机计时时钟制作.docx_第2页
第2页 / 共27页
单片机计时时钟制作.docx_第3页
第3页 / 共27页
单片机计时时钟制作.docx_第4页
第4页 / 共27页
单片机计时时钟制作.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

单片机计时时钟制作.docx

《单片机计时时钟制作.docx》由会员分享,可在线阅读,更多相关《单片机计时时钟制作.docx(27页珍藏版)》请在冰豆网上搜索。

单片机计时时钟制作.docx

单片机计时时钟制作

一、课题内容简介………………………………………………(3)

二、通过设计和实作,所能达到的效果………………………(3)

三、要求………………………………………………………(3)

四、电路组成及工作原理………………………………………(4)

五、单片机系统…………………………………………………(4)

六、AT89C51的主要性能参数………………………………(4-5)

七、显示部分……………………………………………………(5-6)

八、 系统调试……………………………………………………(6)

九、时钟计时检测…………………………………………………(6)

十、数码管动态显示汇编程序例子,显示12(时)34(分)………(6-9)

十一、秒信号程序………………………………………………(10)

十二、时分秒时钟程序………………………………………(10-13)

十三、键盘控制时钟程序…………………………………(13-17)

十四.时钟………………………………………(17-22)

 

一、课题内容简介:

可行性分析,方案确定,硬件设计,软件设计,软硬件调整,使用说明及软硬件测试等全部开发过程。

开发过程中,培养学生独立思考、独立分析问题、独立解决问题的能力,一次实习,终生受益。

实习内容 :

 

(1)protel99se设计. 

(2)印刷电路板设计 (3)汇编语言程序编写 (4)单片机系统开发 

(5)编程器的使用 (6)软硬件调试及测试 

I/O说明:

P1.0~P1.7为八个LED

P3.2,P3.3,P3.4,P3.5为四个按键

P0.0~P0.7为数码管的A,B,C,D,E,F,G,DP

P2.0为继电器控制

P2.1为蜂鸣器控制

P2.2,P2.3,P2.4,P2.5为四个数码管控制

二、通过设计和实作,所能达到的效果:

1、通过课程设计,加深对《单片机原理与接口技术》知识理解,巩固和提高学过的理论与专业知识,并予以适当的深化。

2、进一步掌握定时器的使用和编程方法及中断处理程序的编程方法。

3、掌握单片机控制系统设计的一般方法,包括硬、软件设计;计算机仿真技术等。

实验板I/O说明:

P1.0~P1.7为八个LED

P3.2,P3.3,P3.4,P3.5为四个按键

P0.0~P0.7为数码管的A,B,C,D,E,F,G,DP

P2.0为继电器控制

P2.1为蜂鸣器控制

P2.2,P2.3,P2.4,P2.5为四个数码管位选控制

三、要求:

1基本要求:

(每个同学要求)

1)采用STC89C51单片机,4位7段数码管显示,5伏供电。

2)具有显示“时时分分”

3)按键功能:

分调整,时调整。

2发挥部分:

1)能设定闹钟功能。

2)能演奏音乐。

四、电路组成及工作原理

本文时钟设计原理主要利用AT89C51单片机,由单片机的P0口控制数码管的位显示,P2口控制数码管的段显示,P1口与按键相接用于时间的校正。

在设计中引入两个电源电路,一个是外部电源系统产生+5V电压,用于给CPU及显示电路提供工作电压,这是数字时钟正常工作时的总电压。

另一个是备用电源,当外部电源关断时由它提供工作电压使CPU继续工作,利用单片机的空闲方式降低功耗,数码管不显示但能使计时保持正常,不会造成掉电时计时清零的现象。

针对内外两个电源情况又加入了MC34064电压检测电路,用于时实判断是哪各电源在工作。

整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。

“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。

“时计数器”采用24进制计时器,可实现对一天24小时的累计。

显示电路将“时”、“分”、“秒”计数器的输出,通过六个七段LED显示器显示出来。

校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”电路组成及工作原理

五、单片机系统

单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。

这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。

本文采用的单片机为AT89C51,AT89C51是一种低功耗、高性能的片内含有4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

它的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

六、AT89C51的主要性能参数:

与MCS-51产品指令系统完全兼容

4k字节可重擦写FLASH闪速存储器

1000次擦写周期

全静态操作:

0Hz—24MHz

三级加密程序存储器

128×8字节内部RAM

32个可编程I/O口线

2个16位定时/计数器

6个中断源

可编程串行URAR通道

低功耗空闲和掉电模式

AT89C51提供以下标准功能:

4k字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式。

空闲方式体制CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复

七、显示部分

单片机应用系统中使用的显示器主要有发光二极管显示器,简称LED(LightEmittingDiode);

它具有显示清晰、亮度高、使用电压低、寿命长的特点

单片机中通常用七段LED构成字型“8”,另外,还有一个小数点发光二极管以显示小数位!

这种显示器有共阴和共阳两种!

发光二极管的阳极连在一起的(公共端)称为共阳极显示器,阴极连在一起的称为共阴极显示器。

(如下图所示)

一位显示器由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个笔划(段)

a_g,另一个小数点为dp发光二极管。

当在某段发光二极管上施加一定的正向电压时,该段笔画即亮;不加电压则暗。

为了保护各段LED不被损坏,需外加限流电阻。

由于共阴极连接需加驱动,故在这里我采用的是共阳阳极连接。

以共阳极LED为例,如图(b)所示,各LED公共阳极K0接高电平,若向各控制端a,b, ┄,g,dp顺次送入00011110信号,则该显示器显示“⒎”字型。

共阴极7段LED显示数字0~F、文字、符号及小数点的编码(a段为最地位,dp点为最高位)如(图2-1)所示。

共阴极7段LED显示字型编码表

 显示字符  共阴极段选码  显示字符  共阴极段选码

   0     3FH     5     6DH

   1     06H     6     7DH

   2     5BH     7     07H

   3     4FH     8     7FH

   4     66H     9     6FH

  “灭”(黑)     00H    

LED显示器接口及显示方式

LED显示器有静态显示方式和动态显示方式两种。

静态显示就是当显示器显示某个字符时,相应的段恒定的导通或截止,直到显示另一个字符为止。

LED显示器工作于静态显示方式时,各位的共阴极接地;若为共阳极则接+5V电源。

每位的段选线分别与一个8位锁存器的输出口相连,显示器中的各位相互独立,而且各位的显示字符一经确定,相应锁存的输出将维持不变。

正因为如此,静态显示器的亮度较高。

这种显示方式编程容易,管理也较简单,但占用I/O口线资源较多。

因此,在显示位数较多的情况下,一般都采用动态显示方式。

由于所有6位段皆由一个I/O口控制,因此,在每一瞬间,6位LED会显示相同的字符。

要想每位显示不同的字符,就必须采用扫描方法流点亮各位LED,即在每一瞬间只使某一位显示字符。

在此瞬间,段选控制I/O口输出相应字符段选码(字型码),而位选则控制I/O口在该显示位送入选通电平(因为LED为共阴,故应送低电平),以保证该位显示相应字符。

如此轮流,使每位分时显示该位应显示字符。

例如,要求显示“LL0-20”时,I/O1和I/O2轮流送入段选码、位选码

八、 系统调试

硬件调试:

主要检查了电路板有无虚焊、短路、连线是否正常,尤其是单片机的各使能端的接线,I/O接口连线是否有误。

由于我们采用了六个数码管并联接入P2口的段选端,因此接线较多,经常容易出现管脚间短路现象。

这是硬件设计不足之处,今后将注意元件的选配使设计更简洁实用。

软件调试:

在LCA51仿真机上,对定时中断程序、显示子程序、按键中断子程序进行了分段调试,结果功能正常。

九、时钟计时检测

通过与其它计时器对比观察发现数字时钟走时过快,检查定时中断程序发现T0的初始值设定有误,因此重新设置:

根据T0选择工作模式1,定时时间为50ms, focs=12MHz,

由 T=(2^16-T0初始值)×振荡周期×12

设T0的初始值为X,

则:

(2^16-X)×1/12×10^6s×12=50ms

X=15625,   

转化二进制值为:

X=0011110010111010, 即TH=#3CH,TL=#0BAH

十、数码管动态显示汇编程序例子,显示12(时)34(分)

 H10   EQU35H

 H1    EQU36H

 M10   EQU37H

 M1    EQU38H

 SHOUR EQU39H

 SMIN  EQU3AH

 DISH10EQU3FH

 DISH1 EQU40H

 DISM10EQU41H

 DISM1 EQU42H

 MEMA  EQU 45H

 MEMB   EQU 49H

ORG   0000H

 AJMP  STAR

ORG   0030H

数码管数据表格

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H

   DB90H,88H,83H,0C6H,0A1H,86H,8EH      

ORG0050H

STAR:

MOVSHOUR,#12;设为12时

      MOVSMIN,#34;设为34分

      MOVMEMA,#0

      MOVMEMB,#0

      MOVSP,#60H

      MOVPSW,#00H     

MAIN:

 MOVSP,#60H

      MOVPSW,#00H

      MOVMEMA,SHOUR

      MOVMEMB,SMIN

      ACALLTLED;把要显示的数转换成数码管代码

      ACALLDISPLAY;显示小时,分钟

      MOVP0,#0FFH

      MOVP2,#0FFH

      AJMPMAIN      

显示小时,分钟      

DISPLAY:

MOVP0,DISH10

       MOVP2,#11011111B

       ACALLD1MS

       MOVP0,DISH1

       MOVP2,#11101111B

       ACALLD1MS

       MOVP0,DISM10

       MOVP2,#11110111B

       ACALLD1MS

       MOVP0,DISM1

       MOVP2,#11111011B

       ACALLD1MS

       RET      

把要显示的数转换成数码管代码

TLED:

  MOVP0,#0FFH

       MOVA,MEMA

       MOVB,#10

       DIVAB

       MOVH10,A

       MOVH1,B

       MOVA,MEMB

       MOVB,#10

       DIVAB

       MOVM10,A

       MOVM1,B

MOVA,H10

       MOVDPTR,#TAB

       MOVCA,@A+DPTR

       MOVDISH10,A

       MOVA,H1

       MOVDPTR,#TAB

       MOVCA,@A+DPTR

       MOVDISH1,A

       MOVA,M10

       MOVDPTR,#TAB

       MOVCA,@A+DPTR

       MOVDISM10,A

       MOVA,M1

       MOVDPTR,#TAB

       MOVCA,@A+DPTR

       MOVDISM1,A

       RET

延时

D1MS:

 MOVR7,#0AH

LOOP1:

MOVR6,#32H

LOOP2:

DJNZR6,LOOP2

      DJNZR7,LOOP1

      RET

END

 

新的12时34分显示程序

ORG0000H

MAIN:

MOVSP,#60H

MOVPSW,#00H

AA:

MOVR2,#1

MOVDPTR,#TAB

MOVA,R2

MOVCA,@A+DPTR

MOVP0,A

MOVR1,#11011111B

MOVP2,R1

ACALLD1MS

MOVR2,#2

MOVDPTR,#TAB

MOVA,R2

MOVCA,@A+DPTR

MOVP0,A

MOVR1,#11101111B

MOVP2,R1

ACALLD1MS

MOVR2,#3

MOVDPTR,#TAB

MOVA,R2

MOVCA,@A+DPTR

MOVP0,A

MOVR1,#11110111B

MOVP2,R1

ACALLD1MS

MOVR2,#4

MOVDPTR,#TAB

MOVA,R2

MOVCA,@A+DPTR

MOVP0,A

MOVR1,#11111011B

MOVP2,R1

ACALLD1MS

LJMPAA

D1MS:

MOVR7,#0AH

LOOP1:

MOVR6,#32H

LOOP2:

DJNZR6,LOOP2

DJNZR7,LOOP1

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H

DB90H,88H,83H,0C6H,0A1H,86H,8EH

END

 

十一、秒信号程序

ORG0000H

LJMPMain

ORG000BH

Ljmplto

Org0100h

Main:

MOVtmod,#01h

MOVth0,#0d8h

MOVtl0,#0f0h

MOVie,#10000010b

MOVr3,#100

Setbtr0

Sjmp$

Org0200h

Lto:

MOVth0,#0d8h

MOVtl0,#0f0h

Djnzr3,goret

Cplp1.0

MOVr3,#100

Goret:

reti

End

十二、时分秒时钟程序

h10equ35h

h1equ36h

m10equ37h

m1equ38h

dh10equ3fh

dh1equ40h

dm10equ41h

dm1equ42h

saequ45h

sbequ49h

org00h

ljmpstart

org0bh

ljmptime0

;数码管数据表格

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H

DB90H,88H,83H,0C6H,0A1H,86H,8EH;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

ORG0050H

start:

movr1,#0;秒计数器清零

movr2,#0;分计数器清零

movr3,#0;时计数器清零

movr4,#0;10ms计数器清0

movsa,#0

movsb,#0

movsp,#60h

movpsw,#00h

movtmod,#01h;定时器0,方式1

movth0,#0d8h;定时初值为10ms

movtl0,#0f0h

movie,#82h

setbtr0

main:

movsa,r3

movsb,r2

acalltled

acalldisplay

movp0,#0ffh

movp2,#0ffh

ajmpmain

display:

movp0,dh10

movp2,#11011111b

acalld1ms

movp0,dh1

movp2,#11101111b

acalld1ms

movp0,dm10

movp2,#11110111b

acalld1ms

movp0,dm1

movp2,#11111011b

acalld1ms

ret

tled:

movp0,#0ffh

mova,sa

movb,#10

divab

movh10,a

movh1,b

mova,sb

movb,#10

divab

movm10,a

movm1,b

mova,h10

movdptr,#tab

movca,@a+dptr

movdh10,a

mova,h1

movdptr,#tab

movca,@a+dptr

movdh1,a

mova,m10

movdptr,#tab

movca,@a+dptr

movdm10,a

mova,m1

movdptr,#tab

movca,@a+dptr

movdm1,a

ret

time0:

pushacc

pushpsw

movth0,#0d8h

movtl0,#0f0h

mova,r4

inca

movr4,a

cjnea,#100,loop

cplp1.0

movr4,#00

mova,r1

inca

movr1,a

cjnea,#60,loop

movr1,#00

mova,r2

inca

movr2,a

cjnea,#60,loop

movr2,#00

mova,r3

inca

movr3,a

cjnea,#24,loop

movr3,#00

djnzr5,loop;中断100次到否

movr5,#100

cplp1.0

loop:

poppsw;中断返回

popacc

ret

d1ms:

movr7,#0ah

loop1:

movr6,#32h

loop2:

djnzr6,loop2

djnzr7,loop1

ret

end

十三、键盘控制时钟程序

SECOND10MSEQU33H

SECONDEQU34

H10EQU35H

H1EQU36H

M10EQU37H

M1EQU38H

SHOUREQU39H

SMINEQU3AH

DISH10EQU3FH

DISH1EQU40H

DISM10EQU41H

DISM1EQU42H

MEMAEQU45H

MEMBEQU49H

ORG0000H

AJMPSTART

ORG000BH

LJMPTIME0

ORG0030H

;数码管数据表格

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H

DB90H,88H,83H,0C6H,0A1H,86H,8EH;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

ORG0050H

START:

MOVSECOND10MS,#00

MOVSECOND,#00

MOVSHOUR,#00;设为00时

MOVSMIN,#00;设为00分

MOVMEMA,#0

MOVMEMB,#0

MOVSP,#60H

MOVPSW,#00H

MOVTMOD,#01H

MOVTL0,#0F0H

MOVTH0,#0D8H

MOVIE,#82H

SETBTR0

MAIN:

MOVMEMA,SHOUR

MOVMEMB,SMIN

ACALLTLED;把要显示的数转换成数码管代码

ACALLDISPLAY;显示小时,分钟

JNBP3.2,HOURSET

JNBP3.3,MINSET

MOVP0,#0FFH

MOVP2,#0FFH

AJMPMAIN

HOURSET:

LCALLDELAY10MS

JBP3.2,MAIN

JNBP3.2,$

INCSHOUR

MOVA,SHOUR

CJNEA,#24,MAIN

MOVSHOUR,#00

LJMPMAIN

MINSET:

LCALLDELAY10MS

JBP3.3,MAIN

JNBP3.3,$

INCSMIN

MOVA,SMIN

CJNEA,#60,MAIN

MOVSMIN,#00

LJMPMAIN

;显示小时,分钟

DISPLAY:

MOVP

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

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

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