当前位置:文档之家› 基于单片机的电子日历时钟

基于单片机的电子日历时钟

基于单片机的电子日历时钟
基于单片机的电子日历时钟

微机原理课程设计

报告

题目:电子日历时钟

学院电子与信息学院

专业08信息工程1班

组员陈晓伟05冯劲增06

指导教师林耀荣

提交日期2010.6.21

一课程设计题目:电子日历时钟

二实现的功能:

基本功能:

(1)显示北京时间,并且能够校准时间;

(2)程序使用汇编语言;

(3)显示的时、分、秒之间以及年、月、日间以小数点分隔;

(4)显示公历日期,并且能够校准日期;

发挥功能:

(5)运动秒表;

(6)闹钟功能;

(7)自动整点报时。

三课程设计的目的:

课程标志性内容的设计理解和综合运用,对所学内容进行一次实操,学以致用。

四、设计方案说明

1、硬件部分

(1)采用6位LED数码管显示日期或者时间。

(2)显示器的驱动采用“动态扫描驱动”,且采用“一键多用”的设计方案,系统电路大为简化。使用小数点表示闹钟设置状态;

(3)电路连接使用PCB,使电路连接简洁美观

2、软件部分

(1)“时钟”基准时间由单片机内部的定时中断提供,考虑因素:定时时间是“秒”的整除数,且长短适宜。最长不能超过16位定时器

的最长定时时间;最短不能少于中断服务程序的执行时间。基准时

间越短,越有利于提高时钟的运行精确度。基准时间定为0.05秒。

(2)用一个计数器对定时中断的次数进行计数,由基准时间为0.05秒知计数值为20即可实现实现“秒”定时,同理进行“分”﹑“时”

定时,以及“日”﹑“月”﹑“年”定时。

(3)LED 数码管显示器采用“动态扫描驱动”考虑问题:驱动信号的维持时间必须大于“起辉时间”(电流大起辉时间短),而驱动信号

的间歇时间必须小于“余辉时间”(电流大余辉时间长),但驱动电

流大小受硬件电路能力和LED数码管极限功耗的制约。

(4)动态扫描显示方式在更新显示内容时,考虑到因LED数码管余辉的存在可能会造成显示字符的模糊,所以新内容写入显示器之前将

所有的LED数码管熄灭。

(5)关于自动识别“月大﹑月小”和“平年﹑润年”问题的考虑

a)月大和月小

2月另外计算;

4月﹑6月﹑9月﹑11 月为月小30天,其余为月大31天。

b)平年和润年(年号能被4整除的就是润年)

平年的2月为28天;

润年的2月为29天。

五、使用说明

实物图请参照后面附带图片,从左至右为按键K2,K1,K0,以两个LED显示器为一组,左中右显示时分秒或者年月日,还有闹钟和秒表

K2:复位K1:设置闪烁 K0:切换时间/日期或者调整时间/日期

初始状态:接上电源之后,日期默认为10年6月21日,时间为0时0分秒,闹钟2点整但默认关闭,秒表为0状态

(1)显示状态切换:不断按K0键就会依次循环显示下面的状态

初始状态时间

日期

闹钟时间

闹钟状态

秒表状态

(2)调节时间,日期:按K0键切换到想要调节的显示状态,再按K1键选择要修改的位,不断按K1键会按左闪烁.中闪烁.右闪烁.确定.四个状态切换,闪烁的位可以修改,按K0键可以实现增加,不能递减,例如要调慢时间要按到循环到较慢时间。

(3)闹钟使用:闹钟默认响的时间为一分钟,闹钟的时间设置同时间日期的调节,只需把状态切换到闹钟时间的状态,闹钟的开关先按K0键切换到屏幕显示为OFF的状态,如下:

再按K1可切换到开状态,如下图,再按K1可关闭,不断循环

(4)秒表:K0键按4下就可切换到秒表状态,出示为0,此时按下K1键就可开始计时,再按一下K1键可停止,此时K1为秒表开关,按K0键可

再切换显示其他。

六、硬件连接图

1、原理图

2、pcb图

3、实物图

七、程序流程图:

1. 主程序

八、性能测试与故障排查

1、硬件部分

问题:断路。

现象:程序下载完之后可以工作但是6个LED显示器有2个没亮。

分析:因为其他几个显示器完全正常,这两个则完全没亮,所以推断是位选

的线路出故障。

检测:用万用表测试各点电压,着重测试两条位选线路的断路与短路情况,最终发现两处断路。

解决:焊锡接上,最终全亮

2、软件部分

偶数组实现基础功能的程序老师已经提供,该程序基本没有多大的问题,就是里面的几个参数需要修改,同时还有一个小bug。

修改一:由于提供的程序所默认采取的晶振计数频率是6MHz,但是所提供的现实原件则是12MHz,所以根据晶振的不同,定时器的定时时间变为0.05s。按照该程序直接跑的话,计数时间为0.5s。这就需要设置计数次数TICK_CNT为#14H,即0.05s*20=1s。代码段:MOV TICK_CNT,#14H

修改二:程序默认设置的外部中断延时过短,导致操作过于“灵敏”,也即按键K0、K1按下时,跳变过快。这里所说的延时是中断子程序EX0_INT和EX1_INT 中的语句

LCALL DIS_DELAY。解决这个情况只需修改DELAY 次数,则DIS_DELAY:

MOV D_CNT_DIS,#10H。

修改三:观察实物电路工作发现每一位:LED数码管的小数点都是亮的,没有起到用小数点区分时间/日期中的时分秒/年月日。要解决这个问题,在显示子程序中TSA代码段的MOV Rx A前插入语句ADD A,#80H(x=1、2、4、6)。

以及加上发挥部分的拓展功能:秒表和闹钟。

九、原件清单

十、心得体会与总结

这个学期做了两个与汇编有关的课程设计(不过这次是大作业),一次是开学初的微机原理课程设计,还有就是这次单片机原理大作业。上次基本上只与程序打交道,硬件部分实操不多。而这次大作业则是硬件、软件两方面都有兼顾,且两者所花的时间也都不少。虽然从老师那已经获取了原理图和程序,但这是我们第一次比较系统的从熟悉软件操作到软硬件设计了解整个流程。

硬件部分,由于先前我们都没有操作过protel之类的软件,所以一切从零开始,针对这次大作业需要,学习了protel软件的基本操作、原理图的绘制修改、原件的封装以及原件集成库的创建,当然还有PCB板的排线。之后就是PCB 图打印,电路板热压制、腐蚀、钻孔,元器件的焊接。流程很简洁,过程很纠结。我们一步一个脚印地制作着,生怕哪个步骤出错而导致前功尽废。不过在我们不懈努力下终于走完。但是焊接的不仔细——两个电阻虚焊,使后来电路出现问题,也排查了好久,需要记住教训。

软件部分,虽然老师已经给了具备基本功能的程序,但是仍需看懂弄懂,后期才能更好地发现问题以及修改添加功能。我发现这个过程也并非一件易事,清楚认识每一句的作用也需要经常查阅书籍。另外在硬件焊接已经实现后我们把两者结合在一起,通过下载器把程序烧进52单片机中实现既定功能,发现上面故障排查中出现的问题,继而针对每个问题分别从软硬件寻找解决方法,这个过程我认为收获更大,能让我们更清楚熟悉软硬件两者的运作方法。

而且我俩分工是按硬件、软件而分的,自个儿认为分工尚算明确,各司其职。

十一、程序附录

;wahaha.asm

; (Electronic Calendar and Clock)

; Reference for Grade 2008, s.c.u.t.

; Key0(for shift/adjust) connected to INT1

; Key1(for un-flash/flash) connected to INT0

; 学生姓名:陈晓伟、冯劲增

; 学生学号:200830240144,200830240229

; 分组编号:004

;变量定义

TICK_CNT EQU 20H ;T0倍乘

;------------------

SECOND_BCD EQU 21H ;时间记录

MINUTE_BCD EQU 22H

HOUR_BCD EQU 23H

DAY_BCD EQU 24H ;日期记录

MONTH_BCD EQU 25H

YEAR_BCD EQU 26H

;------------------

FLASH_FLAG EQU 27H ;是否闪烁

DIS_FLAG EQU R7 ;当前显示内容标志;DIS_FLAG: 0-时间;1-日期;2-闹钟;3-闹钟开关;4-秒表

;------------------

NSECOND_BCD EQU 2BH ;闹钟时间

NMINUTE_BCD EQU 2CH

NHOUR_BCD EQU 2DH

;------------------

TCC_BCD EQU 2EH ;秒表计时器

TBB_BCD EQU 2FH

TAA_BCD EQU 30H

;------------------

TIMER_FLAG EQU 31H ;秒表模式

TIMER_START_FLAG EQU 32H ;秒表开始

;------------------

ALAM_STA TE EQU 33H ;闹钟开启标志

;------------------

DI_40H EQU 34H ;提示音延时变量

DI_41H EQU 35H ;延时

;------------------

ALAM_ON1 EQU 36H ;闹钟状态显示

ALAM_ON2 EQU 37H

ALAM_ON3 EQU 38H

ALAM_OFF1 EQU 39H

ALAM_OFF2 EQU 3AH

ALAM_OFF3 EQU 3BH

;------------------

;中断向量表

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP EX0_INT ; port INT0

ORG 000BH

LJMP T0_INT ; port T0

ORG 0013H

LJMP EX1_INT ; port INT1

;主程序

ORG 0030H

MAIN: NOP ; main program

;初始化堆栈

MOV SP,#60H

;初始化变量

MOV SECOND_BCD,#00H ; BCD of "second"

MOV MINUTE_BCD,#00H ; BCD of "minute"

MOV HOUR_BCD,#00H ; BCD of "hour"

MOV NSECOND_BCD,#00H ;闹钟BCD of "second"

MOV NMINUTE_BCD,#00H ;闹钟BCD of "minute"

MOV NHOUR_BCD,#06H ;闹钟BCD of "hour"

MOV TCC_BCD,#00H ; 秒表BCD of "second"

MOV TBB_BCD,#00H ; 秒表BCD of "minute"

MOV TAA_BCD,#00H ; 秒表BCD of "hour"

MOV TIMER_START_FLAG,#00H ;秒表工作标志

MOV TIMER_FLAG,#00H ;秒表模式标志

MOV DAY_BCD,#21H ; BCD of "day"

MOV MONTH_BCD,#06H ; BCD of "month"

MOV YEAR_BCD,#010H ; BCD of "year"

MOV FLASH_FLAG,#00H ; flag for un-flash/flash MOV DIS_FLAG,#00H ; flag for shift(time/date)

MOV ALAM_ON1,#55H ; BCD OFF 闹钟状态显示

MOV ALAM_ON2,#01H

MOV ALAM_ON3,#55H

MOV ALAM_OFF1,#63H

MOV ALAM_OFF2,#42H

MOV ALAM_OFF3,#33H

MOV ALAM_STA TE,#00H ;初始化闹钟状态为OFF

;------------------

MOV TL0,#0B0H ; constant for 0.05s

MOV TH0,#3CH ; 65536-15536=50,000 for 12MHz MOV TICK_CNT,#14H ; times of overflow 0.05*20=1s

MOV TMOD,#01H ; Mode 1 for T0, Timer Mode

SETB ET0 ; open T0

SETB EX0 ; open INT0, Key1

SETB EX1 ; open INT1, Key0

SETB EA ; total open

SETB PT0 ; priority for T0,高优先级

SETB TR0 ; start T0, Run

SCAN_HOUR: ;闹钟扫描

MOV A,SECOND_BCD

CJNE A,#00H,SCANALARM

MOV A,MINUTE_BCD

CJNE A,#00H,SCANALARM

HOUR:

CLR P2.0

NOP ;整点,滴

SETB P2.0

SCANALARM: ;闹钟扫描

MOV A,ALAM_STA TE

JZ SCAN_HOUR ;闹钟开关已打开?

MOV A,NHOUR_BCD

CJNE A,HOUR_BCD,WAIT

MOV A,NMINUTE_BCD

CJNE A,MINUTE_BCD,WAIT

ALARM:

CLR P2.0 ;闹铃:滴滴滴滴``````

SETB P2.0

CLR P2.0

SETB P2.0

CLR P2.0

SETB P2.0

CLR P2.0

SETB P2.0

NOP

NOP

NOP

WAIT:

SETB P2.0

SJMP SCAN_HOUR ; wait for interrupt ; -------------------------------------------------

; sub: T0 interrupt

; 定时器0中断

T0_INT:

PUSH ACC

MOV TL0,#0B0H ; constant for 0.05s MOV TH0,#3CH ; Timer 0重装载

MOV A,TIMER_START_FLAG

CJNE A,#01H,TIMER_NEXT ;秒表模式?

LJMP TIMER_INC ;秒表计时

TIMER_NEXT:

DJNZ TICK_CNT,NOT_1S ; is up to 1 second ?

SJMP IS_1S

NOT_1S:

LJMP T0_RET

; 1秒时间到

IS_1S:

MOV A,SECOND_BCD ; take BCD of "second"

CJNE A,#59H,IN3 ; is up to 59 seconds ?

SJMP IN4

IN3:LJMP SECOND_INC ; 秒加1

IN4:MOV SECOND_BCD,#00H ; 秒进位

MOV A,MINUTE_BCD ; take BCD of "minute"

CJNE A,#59H,IN5 ; is up to 59 minutes ?

SJMP IN6

IN5: LJMP MINUTE_INC

IN6: MOV MINUTE_BCD,#00H ; 分进位

MOV A,HOUR_BCD ; take BCD of "hour"

CJNE A,#23H,HOUR_INC ; is up to 23 hours ?

MOV HOUR_BCD,#00H ; "时"进位

MOV A,MONTH_BCD ; take BCD of "month"

CJNE A,#02H,NOT_FEB ; is February ?

;2月处理

;--------------------------

FEB: NOP

ACALL BCD_DIV4 ; BCD of "year in 26H" divided by 4

MOV A,R3 ; remainder in R3

CJNE A,#00H,NOT_LEAP_Y ; "00" means leap year

;闰年,29天

LEAP_Y: M OV A,DAY_BCD ; take BCD of "day" in Feb.

CJNE A,#29H,DAY_INC ; is up to 29 days (leap year)?

MOV DAY_BCD,#01H ; keep the first day

MOV MONTH_BCD,#03H ; increase "month"

SJMP RESET_CNT

;非闰年

NOT_LEAP_Y: MOV A,DAY_BCD ; take BCD of "day" in Feb.

CJNE A,#28H,DAY_INC ; is up to 28 days (common year)?

MOV DAY_BCD,#01H ; keep the first day

MOV MONTH_BCD,#03H ; increase "month"

SJMP RESET_CNT

;---------------------------

;非2月处理

;30/31天?

NOT_FEB:NOP ; other "month" except Feb.

CJNE A,#04H,Y01 ; is April ?

AJMP MON_30D

Y01: CJNE A,#06H,Y02 ; is June ?

AJMP MON_30D

Y02: CJNE A,#09H,Y03 ; is September ?

AJMP MON_30D

Y03: CJNE A,#11H,T11 ; is November ?

AJMP MON_30D

;31天

T11: MOV A,DAY_BCD ; take BCD of "day"

CJNE A,#31H,DAY_INC ; is up to 31 days ?

AJMP NEXT_MONTH

;30天

MON_30D:MOV A,DAY_BCD ; take BCD of "day"

CJNE A,#30H,DAY_INC ; is up to 30 days ?

;天进位

NEXT_MONTH: MOV DAY_BCD,#01H ; keep the first day MOV A,MONTH_BCD ; take BCD of "month"

CJNE A,#12H,MONTH_INC ; is December ?

; 月进位

MOV MONTH_BCD,#01H ; keep the first month

MOV A,YEAR_BCD ; take BCD of "year"

CJNE A,#99H,YEAR_INC ; is up to 99 years ?

MOV YEAR_BCD,#00H ; keep the first year

SJMP RESET_CNT

;年加1

YEAR_INC: MOV A,YEAR_BCD ; take BCD of "year"

ADD A,#01H ; increase "year"

DA A ; adjust BCD

MOV YEAR_BCD,A ; keep "year"

SJMP RESET_CNT

MONTH_INC: MOV A,MONTH_BCD ; take BCD of "month"

ADD A,#01H ; increase "month"

DA A ; BCD码调整

MOV MONTH_BCD,A ; keep "month"

SJMP RESET_CNT

DAY_INC: MOV A,DAY_BCD ; take BCD of "day"

ADD A,#01H ; increase "day"

DA A ; BCD码调整

MOV DAY_BCD,A ; keep "day"

SJMP RESET_CNT

HOUR_INC: MOV A,HOUR_BCD ; take BCD of "hour"

ADD A,#01H ; increase "hour"

DA A ; BCD码调整

MOV HOUR_BCD,A ; keep "hour"

SJMP RESET_CNT

MINUTE_INC: MOV A,MINUTE_BCD ; take BCD of "minute"

ADD A,#01H ; increase "minute"

DA A ; BCD码调整

MOV MINUTE_BCD,A ; keep "minute"

SJMP RESET_CNT

SECOND_INC: MOV A,SECOND_BCD ; take BCD of "second"

ADD A,#01H ; increase "second"

DA A ; BCD码调整

MOV SECOND_BCD,A ; save back "second"

RESET_CNT: MOV TICK_CNT,#14H ; retrieve times of overflow

T0_RET:

POP ACC

RETI

;--------------------------------------------------------------------

;秒表增

TIMER_INC:

TCC_INC:

MOV A,TCC_BCD ; take BCD of "0.05S"

CLR C

SUBB A,#95H

JZ TBB_INC

MOV A,TCC_BCD

ADD A,#05H ; increase "0.05S"

DA A ; BCD码调整

MOV TCC_BCD,A ; keep "0.05S"

AJMP TIMER_OUT

TBB_INC:

MOV TCC_BCD,#00H

MOV A,TBB_BCD ; take BCD of "SECOND"

CLR C

SUBB A,#59H

JZ TAA_INC

MOV A,TBB_BCD

ADD A,#01H ; increase "SECOND"

DA A ; BCD码调整

MOV TBB_BCD,A ; keep "SECOND"

AJMP TIMER_OUT

TAA_INC:

MOV TBB_BCD,#00H

MOV A,TAA_BCD ; take BCD of "MINUTE"

CLR C

SUBB A,#59H

JZ TDD_INC

MOV A,TAA_BCD

ADD A,#01H ; increase "MINUTE"

DA A ; BCD码调整

MOV TAA_BCD,A ; save back "MINUTE"

AJMP TIMER_OUT

TDD_INC:MOV TAA_BCD,00H

TIMER_OUT: LJMP TIMER_NEXT;返回定时器中断;------------------------------------------------------------------

; -------------------------------------------------------------------

; sub: LED Display

;显示子程序

DISPLAY:

MOV A,DIS_FLAG

CJNE A,#03H,DISPLAY2 ;选择不同字模

MOV DPTR,#TAB2

SJMP DISPLAY3

DISPLAY2:

MOV DPTR,#TAB ; set address of code table DISPLAY3:

MOV A,DIS_FLAG ; take flag for shift

CJNE A,#00H,DISP_DA TE ; "00" 当前显示内容为时间

;R0: point to display buffer

DISP_TIME: MOV R0,#SECOND_BCD ; beginning from "second"

SJMP TSA

DISP_DA TE:

CJNE A,#01H,DISP_ALAM ; "01" 当前显示内容为日期

MOV R0,#DAY_BCD ; "FF" for showing date

SJMP TSA;显示时间或日期

DISP_ALAM:

CJNE A,#02H,DISP_ALAM_SET; "02" 当前显示内容为闹钟

MOV R0,#NSECOND_BCD ; beginning from "second"

SJMP TSA

DISP_ALAM_SET:

CJNE A,#03H,DISP_TIMER ; "03" 当前显示内容为闹钟设置MOV A,ALAM_STA TE ; 闹钟状态显示

JZ SHOWOFF

MOV R0,#ALAM_ON1 ; 显示"ON"

SJMP TSA

SHOWOFF:

MOV R0,#ALAM_OFF1 ;显示"OFF"

SJMP TSA

DISP_TIMER: ;"04"当前显示内容为秒表MOV R0,#TCC_BCD ; beginning from "second"

TSA: MOV A,@R0 ; begin from "day"

ANL A,#0FH ; get the "low half byte"

MOVC A,@A+DPTR ; take character from code table

MOV R1,A ; keep in R1 for DS6 showing

MOV A,@R0

SWAP A

ANL A,#0FH ; get the "high half byte"

MOVC A,@A+DPTR ; take character from code table

MOV R2,A ; keep in R2 for DS5 showing

;---------------

INC R0

MOV A,@R0 ; next one from "month"

ANL A,#0FH ; get the "low half byte"

MOVC A,@A+DPTR

MOV R3,A ; keep in R3 for DS4 showing

MOV A,@R0

SWAP A

ANL A,#0FH ; get the "high half byte"

MOVC A,@A+DPTR

MOV R4,A ; keep in R4 for DS3 showing

;-------------

INC R0

MOV A,@R0 ; next one from "year"

ANL A,#0FH ; get the "low half byte"

MOVC A,@A+DPTR

MOV R5,A ; keep in R5 for DS2 showing

MOV A,@R0

SWAP A

ANL A,#0FH ; get the "high half byte"

MOVC A,@A+DPTR

MOV R6,A ; keep in R6 for DS1 showing

;---------------------

;P1:位选线

;P0:段选线

NOP

TDP: MOV P1,#0FFH ; close all showing///

;Display DS6

MOV A,ALAM_STA TE ;是否显示闹钟状态位?(最末位小数点)

JZ DIS_NEXT

MOV A,R1

ANL A,#7FH

MOV R1,A

DIS_NEXT:

MOV A,R1

MOV P0,A ; send character to DS6

MOV A,FLASH_FLAG ; get flag of un-flash/flash

CJNE A,#03H,A02 ; "03" is flash on DS5&DS6

SJMP A03

A02: CJNE A,#03H,A04; ; "03" is flash on DS5&DS6

A03: MOV A,TICK_CNT; take Counter of overflow

RRC A

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

#include #define uchar unsigned char #define uint unsigned int //----端口定义--- sbit ACC_7=ACC^7; sbit RST1=P2^5; sbit IO=P2^6; sbit SCLK=P2^7; sbit k1=P3^2; sbit k2=P3^3; sbit k3=P2^2; sbit k4=P2^3; //uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 数码的位选,左到右 uchar tab_1302[7]={45,50,11,19,1,1,15}; uchar tab_time[8]={0,0,10,0,0,10,0,0}; //时间 uchar tab_day[8]={0,0,10,0,0,10,0,0,}; //年月日 uchar tab_num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; //0 1 2 3 4 5 6 7 8 9 - {"0123456789-"} ////////////=============函数声明============//////////////// void display_time(); void delayms(uint); void display_day(); void ds1302(); //获取DS1302的时间 void ds1302_init(); //DS1302的初始化 void write1302(uchar,uchar); //指定地址向DS1302写数据 uchar read1302(uchar); //指定地址向DS1302读数据 void ds1302(); void int0_init(); /////////=======中断初始化=======/////////// void int0_init() { EX0=1;

基于51单片机的电子台历设计

摘要 本设计是一个基于单片机AT89S51的简易电子台历,附有复位电路,时钟电路,键盘电路。复位电路是单片机的初始化操作,除了正常的初始化外,当程序运行出错后或者操作失误使系统进入死锁状态时,为摆脱困境,也需要能够通过独立式键盘电路进行启动,调整,再运行,时钟电路采用12MHZ的晶振,作为系统的时钟源,具有较高的准确性。 在上电或者复位时数码管显示年,月,日,时,分,秒。A键用于模式调整,形成一个循环,按一次键,即对秒调整。再按一次对分调整,如此循环。B键用于按下A键之后进行加1的操作,按一次加1,C键用于减1的操作,按一次减1。能够完成从00时00分00秒到23时59分59秒的循环计时,过23时59分59秒,日期增加1,当日期达到1个月后,月进位1,满12个月后,年进位1,年的首2位保持不变,始终为20。单片机并行口的电子台历的设计在AT89S51的P0口和P2口外接由14个LED数码管(LED7~LED0)构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P2.7~P2.0作LED的段码年月日的位控输出线(P2.7~P2.0对应于LED7~LED0),P1.7~P1.0对应时间的数码管,P3口外接三个按键A、B、C(对应于P3.0~P3.2)。数码管为4位一体的共阳极的数码管,数码管采用动态扫描法,从右往左依次点亮,显示数字。 关键字:单片机、电子台历、数码管 ABSTRACT The design is a single electrical calendar basing SCMC of AT89S51. There are restoration circuit, clock circuit and keyboard circuit. Restoration circuit is used as an original operation, besides normal start-up, when the program runs mistakenly and system loses its order ,in order to get rid of the trouble, it also need to restart ,adjust and run through keyboard. Clock circuit uses 12MHZ Crystal as the source of the calendar ,with a high accuracy. When the system starts, the display shows year, month ,day, week and time the A keyboard is used to start and adjust, the B keyboard is used to add 1,when press it ,the date will add 1, the C keyboard is used to minus 1, when press it , the date will minus 1.It can make a cycle from 00:00 to 23:59:59.The display includes 14 LEDS, the SCMC joins the display in the P1, P0 ports and P2 ports, the SCMC joins the keyboards in the P3 scan, lighting the LEDS from right to left , showing the numbers. Keywords: SCMC, Calendar LED

最全最好的课程设计-51单片机电子日历时钟( 含源程序)

LED日历时钟课程设计 院系: 班级: 姓名: 学号: 指导教师: 2012 年06 月16 日

目录

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 第一章前言 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k B ytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

基于单片机的电子日历

设计任务书 设计题目: 电子万年历 设计要求:显示范围:2001-2099;日月正常显示,并能识别闰年闰月;时间采用24 小时制。显示格式:日期按照年月日排列,如2006 年12 月20 日显示为:20061220;时间按时分秒排列,如 12 点 30 分 55 秒显示为 12:30:55。 显示位数:16位 7段 LED数码管作正常显示和节电显示。

目录 摘要 (1) 前言 (2) 1概论 (3) 1.1概述 (3) 1.2单片机的发展历程 (3) 1.3时钟日历的特性 (3) 2系统原理与硬件设计 (5) 2.1硬件选择 (5) 2.2AT89C51 单片机简介 (6) 2.3时钟芯片介绍 (12) 2.4LED 简介 (18) 2.574LS154 简介 (20) 2.6ULN2003 简介 (20) 3软件设计 (22) 3.1主程序 (22) 3.2读取时间的子程序 (24) 3.3显示刷新子程序 (27) 4调试过程及数据分析 (30) 4.1硬件调试 (30) 4.2软件调试 (30) 4.3K EI L 调试 (31) 4.4试验箱调试 (31) 结论 (32) 致谢 (33) 参考文献 (34)

附录 A: (35)

摘要 本次设计采用时钟日历芯片 DS12887,这种时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新在计算机汇编语言的驱动下每秒自动进行一次,但不需程序干预其输出状态。此外,这种时钟芯片带有锂电池做后备电源,具备永不停止的计时功能和可编程方波输出功能,可用作实时测控系统的采样信号等。这种时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。本次设计中的LED 数码管电子时钟电路采用24 小时制记时方式,日期和时间用16 位数码管显示。设计采用 AT98C51单片机,使用 5V电源供电,并且在按键的作用下可以进入省电(不显示LED 数码管)和正常显示两种状态。 本次设计采用AT89C51单片机的扩展芯片和UNL2003芯片做驱动,由多块LED数码管构成的显示系统,与传统的基于8/16位普通单片机的LED显示系统相比较,本系统在不显著地增加系统成本的情况下,可支持更多的LED数码管稳定显示。 关键词:时钟芯片、AT89C51、时钟日历

电子时钟单片机【完整版】

烟台南山学院 单片机课程设计题目电子时钟 姓名: 所在学院 所学专业: 班级: 学号: 指导教师: 完成时间:

随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。 由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。 在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。实验证明效果良好,可以投入使用。 本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS—51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。在本学期的开始我们进行了计算机工程实践,在实践中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。本系统为多功能数字钟的系统。本设计以单片机AT89c51为控制核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前时间、日期、星期。本电子时钟具有日期、时、分、秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。 关键词:单片机 AT89S52 电子时钟汇编语言

基于51单片机电子万年历设计

基于51单片机电子万年历设计 专业:机电设备维修与管理姓名:杜洪浦指导老师: 摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分和秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3到5V电压供电。 万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路以及串口下载电路等组成。在单片机的选择上使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用液晶LCD1602。软件方面主要包括日历程序、液晶驱动程序,显示程序等。程序采用汇编语言编写。所有程序编写完成后,在Keil C51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。 关键词时钟电钟,DS1302,液晶LCD1602,单片机 目录 1设计要求与方案论证 (2) 1.1 设计要求 (2) 1.2 系统基本方案选择和论证 (2) 1.2.1单片机芯片的选择方案和论证 (2) 1.2.2 显示模块选择方案和论证 (3) 1.2.3时钟芯片的选择方案和论证: (3) 1.3 电路设计最终方案决定 (3) 2系统的硬件设计与实现 (3) 2.1 电路设计框图 (4) 2.2 系统硬件概述 (4) 2.3 主要单元电路的设计 (4) 2.3.1单片机主控制模块的设计 (4)

用数码管显示实时日历时钟的应用设计

(用数码管显示实时日历时钟的应用设计)

摘要 本课题通过MCS-51单片机来设计电子时钟,采用汇编语言进行编程,可以实现以下一些功能:小时,分,秒和年,月,日的显示。本次设计的电子时钟系统由时钟电路,LED显示电路三部分组成。51单片机通过软件编程,在LED数码管上实现小时,分,秒和年,月,日的显示;利用时钟芯片DS1302来实现计时。本文详细介绍了DS1302 芯片的基本工作原理及其软件设计过程,运用PROTEUS软件进行电路连接和仿真,同时还介绍了74LS164,通过它来实现I|O口的扩展。 关键词:时钟芯片,仿真软件,74LS164 目录 前言 0.1设计思路 (8) 0.2研究意义 (8)

一、时钟芯片 1.1 了解时钟芯片……………………………………………….8-9 1.2 掌握时钟芯片的工作原理………………………………….10-11二、74LS164 2.1 了解74LS164........................................................11-12 2.2 掌握的74LS164工作原理. (12) 三、数码管 3.1 熟悉常用的LED数码管...........................................12-13 3.2 了解动态显示与静态显示. (13) 四、程序设计 4.0 程序流程图 (14) 4.1 DS1392的驱动.......................................................15-16 4.2 PROTUES实现电路连接. (17) 4.3 数码管的显示:小时;分;秒 (18) 4.4 数码管显示:年;月;日 (19) 五、总结…………………………………………………………………..20-21 六、附页程序………………………………………………………………22-31前言

本科毕业设计--基于51单片机的电子日历设计

成都电子机械高等专科学校成教院毕业设计(论文) 论文题目:基于51单片机的电子日历设计 教学点:重庆科创职业学院 指导老师:张忠雨职称:讲师 学生姓名:聂燕学号: 2011700558 专业:应用电子技术 成都电子机械高等专科学校成教院制 2012 年 3 月 9 日

成都电子机械高等专科学校成教院毕业设计(论文)任务书 题目:基于51单片机的电子日历设计 任务与要求: 通过单片机设计电子日历数码管正常显示阳历、阴历日期,显示的格式为年-月-日,利用外部按键的操作实现阳历和阴历之间的 转换,实现阴历和阳历显示的暂停、运行等功能。 时间:2011年12月15日至2012 年3月15日共12 周教学点:重庆科创职业学院 学生姓名:聂燕学号:2011700558 专业:应用电子技术 指导单位或教研室: 指导教师:张忠雨职称:讲师 成都电子机械高等专科学校成教院制

毕业设计(论文)进度计划表

摘要 设计以单片机AT89C51为核心部件的电子日历,利用74LS245作为驱动器,74LS138作为译码器使用,六个七段数码管均采用共阴极的方式,P0口作为段选码输出口,P2口作为位选码输出口。 本次设计的题目是基于单片机的电子日历设计,可以正常的显示年、月、日,还可以利用外部按键实现阴历和阳历之间的转换以及暂停等功能。电子日历具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。适用于家庭、公司、机关等众多场所。为人们的日常生活、出行安排提供了方便,成为人们日常生活中不可缺少的一部分。 本次设计可分为两部分:硬件系统、软件系统。 硬件系统包括:AT89S51单片机、74LS245驱动器、74LS138译码器、RC复位电路、+5V直流电源电路、去抖电路、动态显示扫描电路。 软件系统主要有单片机的编程构成。 关键词:单片机,日历,位码,段码,显示

基于stc51单片机的LCD1602显示时间_的电子万年历(显示当前温度)

1 课设所需软件简介 1.1 Keil uVision4的简要介绍 2009年2月发布Keil μVision4,Keil μVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。新版本支持更多最新的ARM芯片,还添加了一些其他新功能。 2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本的Keil uVision4,其编译器、调试工具实现与ARM器件的最完美匹配。 Keil C51开发系统基本知识Keil C51开发系统基本知识 1. 系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 2. Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

基于AT89C51单片机的电子万年历的设计_课程设计报告

课程设计报告 设计名称:电子万年历设计 专业班级:自动化10101班 完成时间:2013年6月9日 报告成绩:

摘要 本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。 关键字AT89C51;电子万年历; DS1302

1 绪论 1.1 课题研究的背景 随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89C51单片机作为核心,功耗小,能在3V 的低压工作,电压可选用3~5V电压供电。 此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 1.2课题的研究目的与意义 二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。 由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。 1.3课题解决的主要内容 本课题所研究的电子万年历是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面: (1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。 (2)根据选用的电子万年历芯片设计外围电路和单片机的接口电路。 (3)在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简单。 (4)根据设计的硬件电路,编写控制AT89C51芯片的单片机程序。 (5)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。 (6)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。 (7)软件设计时必须要有完善的思路,要做到程序简单,调试方便。

最新毕业设计:基于单片机的电子日历时钟

一课程设计题目:电子日历时钟 二实现的功能: 基本功能: (1)显示北京时间,并且能够校准时间; (2)程序使用汇编语言; (3)显示的时、分、秒之间以及年、月、日间以小数点分隔;(4)显示公历日期,并且能够校准日期; 发挥功能: (5)运动秒表; (6)闹钟功能; (7)自动整点报时。 三课程设计的目的: 课程标志性内容的设计理解和综合运用,对所学内容进行一次实操,学以致用。 四、设计方案说明 1、硬件部分 (1)采用6位LED数码管显示日期或者时间。 (2)显示器的驱动采用“动态扫描驱动”,且采用“一键多用”的设计方案,系统电路大为简化。使用小数点表示闹 钟设置状态; (3)电路连接使用PCB,使电路连接简洁美观

2、软件部分 (1)“时钟”基准时间由单片机内部的定时中断提供,考虑因素:定时时间是“秒”的整除数,且长短适宜。最长不 能超过16位定时器的最长定时时间;最短不能少于中断服 务程序的执行时间。基准时间越短,越有利于提高时钟的 运行精确度。基准时间定为0.05秒。 (2)用一个计数器对定时中断的次数进行计数,由基准时间为0.05秒知计数值为20即可实现实现“秒”定时,同理 进行“分”﹑“时”定时,以及“日”﹑“月”﹑“年” 定时。 (3)LED 数码管显示器采用“动态扫描驱动”考虑问题:驱动信号的维持时间必须大于“起辉时间”(电流大起辉时间 短),而驱动信号的间歇时间必须小于“余辉时间”(电流 大余辉时间长),但驱动电流大小受硬件电路能力和LED 数码管极限功耗的制约。 (4)动态扫描显示方式在更新显示内容时,考虑到因LED数码管余辉的存在可能会造成显示字符的模糊,所以新内容 写入显示器之前将所有的LED数码管熄灭。 (5)关于自动识别“月大﹑月小”和“平年﹑润年”问题的考虑 a)月大和月小 2月另外计算;

单片机课程设计 电子日历时钟显示器设计

目录 1.题目设计要求 (1) 2.开发平台简介 (1) 3.系统硬件设计 (2) 3.1设计原理 (2) 3.2器件的功能与作用 (2) 3.2.1 MCS51单片机AT89C51 (2) 3.2.2复位电路 (3) 3.2.3晶振电路 (4) 3.2.4 DS1302时钟模块 (4) 3.2.5 引脚功能及结构 (4) 3.2.6 DS1302的控制字节 (5) 3.2.7 数据输入输出(I/O) (5) 3.2.8 DS1302的寄存器 (6) 3.2.9 液晶显示LCD1602 (6) 3.2.10 串行时钟日历片DS1302 (8) 4.系统软件设计 (10) 4.1程序流程 (10) 4.2程序代码 (10) 5.系统仿真调试 (20) 5.1仿真原理图设计 (20) 5.2仿真运行过程 (21) 5.3仿真运行结果 (21) 6.总结 (21) 7.参考文献 (22)

1.题目设计要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2.开发平台简介 2.1系统仿真平台Proteus Proteus软件是由英国Labcenter Electronics公司开发的EDA工具软件,已有近20年的历史,在全球得到了广泛应用。Proteus软件的功能强大,它集电路设计、制版及仿真等多种功能于一身,不仅能够对电工、电子技术学科涉及的电路进行设计,还能够对微处理器进行设计和仿真,并且功能齐全,界面多彩。和我们手头其他的电路设计仿真软件,他最大的不同即它的功能不是单一的。另外,它独特的单片机仿真功能是任何其他仿真软件都不具备的。 2.2软件开发平台Keil C Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil C51生成的目标代码效率之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

基于单片机电子万年历的毕业设计说明

单片机课程设计报告 电子万年历设计 姓名:建强 学号: 专业班级: 08电气(2)班指导老师:吴永 所在学院:科技学院 2011年6月30日

摘要 随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。 具体实现功能: (1)显示年月日时分秒及星期信息 (2)具有可调整日期和时间功能 (3)与即时时间同步

目录 1方案论证 (3) 1.1单片机芯片的选择方案和论证 (3) 1.2显示模块选择方案和论证 (3) 1.3时钟芯片的选择方案和论证 (4) 1.4电路设计最终方案决定 (4) 2系统的硬件设计与实现 (5) 2.1电路设计框图 (5) 2.2系统硬件概述 (5) 2.3主要单元电路的设计 (5) 2.3.1单片机主控制模块的设计 (5) 2.3.2时钟电路模块的设计 (6) 2.3.3电路原理及说明 (7) 2.3.4显示模块的设计 (8) 3系统的软件设计 (9) 3.1程序流程框图 (9) 4测试与结果分析 (11) 4.1硬件测试 (10) 4.2软件测试 (10) 4.3测试结果分析与结论 (10) 4.3.1 测试结果分析 (10) 4.3.2 测试结论 (10) 5prodeus软件仿真........................................ ..........错误!未定义书签。 5.1Proteus ISIS简介 (12) 5.2Proteus运行流程 (13) 5.3Proteus功能仿真 (13) 6课程设计总结与体会.......................................... .....错误!未定义书签。 参考文献...........................................................错误!未定义书签。 附录一:系统电路图.................................................错误!未定义书签。 附录二:系统程序...................................................错误!未定义书签。

基于单片机及时钟芯片DS1302的电子时钟设计

目录 摘要 一、引言 (1) 二、硬件电路设计 (2) 2.1 主要芯片 (2) 2.1.1 微处理器 (2) 2.1.2 DS1302简介 (4) 2.1.3 DS1302引脚说明 (5) 2.1.4 74ls245简介及引脚说明 (5) 2.2 时钟硬件电路设计 (6) 2.2.1 时钟电路设计 (7) 2.2.2 整点报时功能 (8) 2.2.3 硬件原理图 (9) 三、proteus和keil软件仿真及调试 (9) 3.1 电路的仿真 (9) 3.2 软件调试 (9) 四、C语言程序 (10) 五、参考文献 (13)

电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。 本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。本设计应用AT89C52芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。 本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。 关键词:电子钟;多功能;AT89C52;时钟芯片

一、引言 时间是人类生活必不可少的重要元素,如果没有时间的概念,社会将不会有所发展和进步。从古代的水漏、十二天干地支,到后来的机械钟表以及当今的石英钟,都充分显现出了时间的重要,同时也代表着科技的进步。致力于计时器的研究和充分发挥时钟的作用,将有着重要的意义。 1.1 多功能电子时钟研究的背景和意义 20世纪末,电子技术获得了飞速的发展。在其推动下,现代电子产品几乎渗透到了社会的各个领域,有力的推动和提高了社会生产力的发展与信息化程度,同时也使现代电子产品性能进一步提升,产品更新换代的节奏也越来越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂容易使人忘记当前的时间。然而遇到重大事情的时候,一旦忘记时间,就会给自己或他人造成很大麻烦。平时我们要求上班准时,约会或召开会议必然要提及时间;火车要准点到达,航班要准点起飞;工业生产中,很多环节都需要用时间来确定工序替换时刻。所以说能随时准确的知道时间并利用时间,是我们生活和工作中必不可少的[1]。 电子钟是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、0按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。

实时日历时钟显示系统的设计

微机原理及应用课程设计任务书 20 xx -20 xx 学年第 x 学期第 xx 周- xx 周 题目实时日历时钟显示系统的设计 内容及要求 内容:实时日历时钟显示系统 要求:设计一个实时日历时钟显示系统的程序。用“年/月/日”,“时:分:秒”(都是两位)的形式连续显示系统时间 进度安排 课程设计内容时间分配 方案论证1天 分析、设计、调试、运行3天 检查、整理、写设计报告、小结1天 合计5天 学生姓名: xx 指导时间: xxxx 指导地点: xxxx 任务下达任务完成 考核方式 1.评阅√ 2.答辩√ 3.实际操作□ 4.其它□指导教师系(部)主任 注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。 2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。

此次微机原理课程设计要求设计一个实时日历时钟显示系统。 本程序利用DOS中断2AH号功能调用取系统年月日,再逐个显示各数据,利用2CH号功能调用取系统时间,逐个显示各数据。用“时:分:秒”(都是两位)的形式连续显示系统时间,并利用计算机提供的软件调试工具对所编写程序进行调试,记录下整个调试分析的过程与运行结果。 任务安排: 主程序: xx:主体程序和流程设计 xx:日历调用显示系统 xx:时间调用显示系统 子程序: xx:显示两位数字的子程序

一、课程名称 (2) 二、课程内容及要求 (2) 三、小组组成 (2) 四、设计思路 (3) 五、程序流程图及介绍 (4) 六、调试 (5) 七、总结 (7) 八、参考资料 (9) 附录 (9)

一、课程名称:实时日历时钟显示系统的设计 二、课程内容及要求 课程内容:实时日历时钟显示系统 要求:设计一个实时日历时钟显示系统的程序。用“年/月/日”,“时:分:秒”(都是两位)的形式连续显示系统时间 三、小组组成: 成员: xx, xx, xx, xx 任务安排: 主程序: xx:主体程序和流程设计 xx:日历系统 xx:时间系统 子程序: xx:显示两位数字的子程序

基于51单片机的电子日历+温度显示设计

2 电子日历设计与实现 2.1 任务分析 一、功能 本设计要求具有显示生肖、年、月、日、星期、时、分、秒等功能;阳历与阴历能够自动关联;具有温度计功能;具备年、月、日、星期、时、分、秒校准功能;设计最终达到效果如图2-1。 图2-1 设计效果图 二、系统原理 按照系统设计功能的要求,系统由单片机、时钟模块DS1302、显示模块12864、键盘以及温度采集模块DS18B20共5部分电路组成,电路构成框图如图2-2所示。 图2-2 系统设计原理框图 三、系统硬件要求 本设计电路采用AT89S51单片机为控制核心,AT89S51具有在线编程功能,低功耗,能在3V超低压工作。时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。DS1302内部有一个用于临时性存放数据的31*8RAM寄存器。器件在加电情况下,可自动生成年、月、日、周、时、分、秒时间数据,该器件具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能。 温度的采集采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。另外,温度传感器DS18B20还具有测量精度高、

测量范围广等优点。显示部分用12864LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形,显示多样,清晰可见,能够达到较好的显示效果。 2.2电路设计 一、单片机主控制模块的设计 AT89S51单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。 单片机的最小系统如图3-1所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端,单片机电路如图2-3 所示。 图2-3 单片机电路 二、时钟电路模块的设计 DSl302数据操作原理: DSl302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。 DS1302的引脚连接如图2-4所示。其中VCC1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由VCC1或VCC2两者中的较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电。当VCC2

电子日历时钟设计

目录 1题目设计的要求 (1) 2 系统硬件设计 (1) 2.1设计原理 (1) 2.2器件的功能与作用 (1) 2.2.1 MCS51单片机AT89C51 (1) 2.2.2 串行时钟日历片DS1302 (2) 2.2.3 液晶显示LCD1602 (3) 3 系统软件设计 (4) 3.1程序流程 (4) 3.2程序代码 (5) 4 系统仿真调试 (12) 4.1仿真原理图设计 (12) 4.2仿真运行过程 (12) 4.3仿真运行结果 (13) 5 总结 (13) 6 参考文献 (13)

1题目设计的要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2 系统硬件设计 2.1 设计原理 图3.1 电路原理图 2.2 器件的功能与作用 2.2.1 MCS51单片机AT89C51 XX AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件

采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。 由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。 AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 2.2.2 串行时钟日历片DS1302 系统的组成与工作原理: 系统由单片机AT89C52,串行日历时钟片DS1302,液晶显示模组LCD1602。 DS1302的CLOCK与AT89C52的P1.6相连,RST与P1.5相连,IO与P1.7相连。 LCD1602的D0~D7与AT89C51的P0.0~P.7相连,并接上拉电阻,RS与P2.0相连,RW与P2.1相连,E与P2.2相连。 DS1302是DALLAS公司拖出的涓流充电时钟芯片,内含有一个实时时钟/日历和31个季节静态RAM,通过简单地串行接口与单片机进行通信,实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24小时或12小时格式,DS1302与单片机之间能简单地采用同步串行方式进行通信,仅需用到RES复位、I/O 数据线、SCLK串行时钟3个口线。对时钟、RAM的读/写,可以改用单字节方式或多达31个字节的字符组方式。DS1302工作时功耗很低,保持数据和时钟信息是功率小于1mW。DS1302广泛应用于电话传真、便携式仪器及电池供电的仪器仪表等产品领域中。 RT-1602 字符型液晶模块是以两行16个子的5*7点阵吐信来显示字符的液晶显示器。 DS1302有8个引脚: X1、X2:32.768kHz晶振介入引脚。 GND:地。 RST:复位引脚,低电平有效。 I/O:数据输入/输出引脚,具有三态功能。 SCLK:串行时钟输入引脚。 Vcc1:工作电源引脚。 Vcc2:备用电源引脚。 DS1302有一个控制寄存器,12个日历,时钟寄存器和31个RAM。 控制寄存器 控制寄存器用于存放DS1302的控制命令字,DS1302的RST引脚回到高电平后写入的第一个字就为控制命令。它用于对DS1302读写过程进行控制,它的格式如下:

相关主题
文本预览
相关文档 最新文档