当前位置:文档之家› LCD电子钟万年历程序代码

LCD电子钟万年历程序代码

LCD电子钟万年历程序代码
LCD电子钟万年历程序代码

源程序代码

XTAL2

18

XTAL1

19

ALE 30EA

31

PSEN 29RST

9

P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78

P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD

17

P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1

AT89C51

D 714

D 613D 512D 411D 310D 29D 18D 07

E 6

R W 5R S 4V S S

1V D D 2V E E

3

LCD1

LM016L

R11k R21k R31k R41k R51k R61k R71k R8

1k

R9

1k

Q1

2N5088

R10

100

LS1

SPEAKER

R11

1k

K1K2

X1

CRYSTAL

C1

220p

C2

220p

电气04-404010104赵化正

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

;按K1键,依次进入闹钟功能,闹钟时间,年,月,日和时,分,秒模式,直致退出设置状态* ;按K2键,调整是否起用闹钟和调节闹钟时,分,秒,年,月,日,时间的时,分,秒的数字*

;闹钟响时,按K2 即可停止闹钟的声响*

;K2和K1需要配合使用

;设置状态,LCD 上排最前面显示"P",下排最前面设置闹钟时显示"alarm:",其他显示"time:" * ;闹钟启用时,在LCD 下排中间显示一小喇叭,闹钟禁用时,无此小喇叭*

;年代变化2000--2099,星期自动转换*

;**************变量的定义*****************

RS BIT P2.0 ;LCD 数据/命令选择端(H/L)

RW BIT P2.1 ;LCD读/写选择端(H/L)

EP BIT P2.2 ;LCD 使能控制

PRE BIT P1.7 ;调整键(K1)

ADJ BIT P1.6 ;调整键(K2)

SPK BIT P3.7 ;闹钟声音输出口

YEAR DATA 18H ;年,月,日变量

MONTH DATA 19H

DATE DATA 1AH

WEEK DATA 1BH

HOUR DATA 1CH ;时,分,秒,百分之一秒变量

MIN DATA 1DH

SEC DATA 1EH

SEC100 DATA 1FH

HOUR_ARM DA TA 20H ;闹钟时,分,秒,变量

MIN_ARM DA TA 21H

SEC_ARM DATA 22H

STA TE DATA 23H

ALARM BIT STA TE.0 ;闹钟是否启用标志1--启用,0--禁止

LEAP BIT STATE.1 ;是否闰年标志1--闰年,0--平年

KEY_S DATA 24H ;当前扫描键值

KEY_V DATA 25H ;上次扫描键值

DIS_BUF_U0 DATA 26H ;LCD 上排显示缓冲区

DIS_BUF_U1 DATA 27H

DIS_BUF_U2 DATA 28H

DIS_BUF_U3 DATA 29H

DIS_BUF_U4 DATA 2AH

DIS_BUF_U5 DATA 2BH

DIS_BUF_U6 DATA 2CH

DIS_BUF_U7 DATA 2DH

DIS_BUF_U8 DATA 2EH

DIS_BUF_U9 DATA 2FH

DIS_BUF_U10 DA TA 30H

DIS_BUF_U11 DA TA 31H

DIS_BUF_U12 DA TA 32H

DIS_BUF_U13 DA TA 33H

DIS_BUF_U14 DA TA 34H

DIS_BUF_U15 DA TA 35H

DIS_BUF_L0 DATA 36H ;LCD 下排显示缓冲区

DIS_BUF_L1 DATA 37H

DIS_BUF_L2 DATA 38H

DIS_BUF_L3 DATA 39H

DIS_BUF_L4 DATA 3AH

DIS_BUF_L5 DATA 3BH

DIS_BUF_L6 DATA 3CH

DIS_BUF_L7 DATA 3DH

DIS_BUF_L8 DATA 3EH

DIS_BUF_L9 DATA 3FH

DIS_BUF_L10 DATA 40H

DIS_BUF_L11 DA TA 41H

DIS_BUF_L12 DATA 42H

DIS_BUF_L13 DATA 43H

DIS_BUF_L14 DATA 44H

DIS_BUF_L15 DATA 45H

FLAG DATA 46H ;标识调整状态0-闹钟功能,1-闹钟时,2-闹钟分,3-闹钟秒;4-年,5-月,6-日,7-时,8-分,9-秒,10-退出调整。

DIS_H DATA 47H

DIS_M DATA 48H

DIS_S DATA 49H

DIS_S0 DATA 4AH

DIS_S1 DATA 4BH

DIS_S2 DATA 4CH

DIS_S3 DATA 4DH

DIS_S4 DATA 4EH

DIS_S5 DATA 4FH

;**************初始化********************

ORG 0000H

LJMP START

ORG 000BH

LJMP TIMER0

ORG 001BH

LJMP TIMER1

ORG 0100H

START: MOV SP,#60H

MOV R0,#18H

MOV A,#00H

MEM_INI: MOV @R0,A

INC R0

CJNE R0,#5FH,MEM_INI

LCALL DELAY_5ms ;初始化LCD

MOV R0,#38H ;设置LCD 为16X2 显示,5X7 点阵,八位数据接口

LCALL LCD_WCMD

LCALL DELAY_5ms

MOV R0,#0CH ;设置LCD 开显示及光标形式(光标不闪烁,不显示"-")

LCALL LCD_WCMD

LCALL DELAY_5ms

MOV R0,#06H ;LCD 显示光标移动设置(光标地址指针加1,整屏显示不移动)

LCALL LCD_WCMD

LCALL DELAY_5ms

MOV R0,#01H ;清除LCD的显示内容

LCALL LCD_WCMD

LCALL DELAY_5ms

;第一自定义字符:

MOV R0,#40H

LCALL lcd_wcmd ;"01 000 000"第1 行地址(D7D6 为地址设定命令形式D5D4D3 为字符存放位置

MOV R0,#1FH

LCALL lcd_wdat ;"XXX 11111"第1 行数据(D7D6D5 为XXX,表示为任意数(一般用000),MOV R0,#41H

LCALL lcd_wcmd ;"01 000 001"第2 行地址

MOV R0,#11H

LCALL lcd_wdat ;"XXX 10001"第2 行数据

MOV R0,#42H

LCALL lcd_wcmd ;"01 000 010"第3 行地址

MOV R0,#15H

LCALL lcd_wdat ;"XXX 10101"第3 行数据

MOV R0,#43H

LCALL lcd_wcmd ;"01 000 011"第4 行地址

MOV R0,#11H

LCALL lcd_wdat ;"XXX 10001"第4 行数据

MOV R0,#44H

LCALL lcd_wcmd ;"01 000 100"第5 行地址

MOV R0,#1FH

LCALL lcd_wdat ;"XXX 11111"第5 行数据

MOV R0,#45H

LCALL lcd_wcmd ;"01 000 101"第6 行地址

MOV R0,#0AH

LCALL lcd_wdat ;"XXX 01010"第6 行数据

MOV R0,#46H

LCALL lcd_wcmd ;"01 000 110"第7 行地址

MOV R0,#1FH

LCALL lcd_wdat ;"XXX 11111"第7 行数据MOV R0,#47H

LCALL lcd_wcmd ;"01 000 111"第8 行地址MOV R0,#00H

LCALL lcd_wdat ;"XXX 00000"第8 行数据;第二个自定义字符:

MOV R0,#48H

LCALL lcd_wcmd ;"01 001 000"第1 行地址MOV R0,#01H

LCALL lcd_wdat ;"XXX 00001"第1 行数据MOV R0,#49H

LCALL lcd_wcmd ;"01 001 001"第2 行地址MOV R0,#1BH

LCALL lcd_wdat ;"XXX 11011"第2 行数据MOV R0,#4AH

LCALL lcd_wcmd ;"01 001 010"第3 行地址MOV R0,#1DH

LCALL lcd_wdat ;"XXX 11101"第3 行数据MOV R0,#4BH

LCALL lcd_wcmd ;"01 001 011"第4 行地址MOV R0,#19H

LCALL lcd_wdat ;"XXX 11001"第4 行数据MOV R0,#4CH

LCALL lcd_wcmd ;"01 001 100"第5 行地址MOV R0,#1DH

LCALL lcd_wdat ;"XXX 11101"第5 行数据MOV R0,#4DH

LCALL lcd_wcmd ;"01 001 101"第6 行地址MOV R0,#1BH

LCALL lcd_wdat ;"XXX 11011"第6 行数据MOV R0,#4EH

LCALL lcd_wcmd ;"01 001 110"第7 行地址MOV R0,#01H

LCALL lcd_wdat ;"XXX 00001"第7 行数据MOV R0,#4FH

LCALL lcd_wcmd ;"01 001 111"第8 行地址MOV R0,#00H

LCALL lcd_wdat ;"XXX 00000"第8 行数据MOV YEAR,#5 ;置年初值

MOV MONTH,#1 ;置月初值

MOV DATE,#1 ;置日初值

MOV DIS_S0,#43H ;"C"

MOV DIS_S1,#72H ;"r"

MOV DIS_S2,#61H ;"a"

MOV DIS_S3,#73H ;"s"

MOV DIS_S4,#79H ;"y"

MOV DIS_S5,#20H ;" "

MOV R1,#00H ;显示一自定义字符

LCALL WEEK_PRO

LCALL UPDATE_BUF

LCALL DISPLAY_PRO ;屏显初始化

;*************主程序*********************

MAIN: MOV IE,#8AH ;CPU 开中断,Timer0,Timer1 开中断MOV TMOD,#11H ;Timer0,Timer1 工作于模式1, 16 位定时方式MOV TH0,#0DCH ;Timer0 置10ms 定时初值

MOV TL0,#00H

MOV TH1,#0FFH ;Timer1 置闹钟声音初值

MOV TL1,#00H

SETB ALARM ;初始启动闹钟功能

CLR TR1 ;Timer1 禁止

SETB TR0 ;Timer0 启动

MOV KEY_V,#03H

MAIN_1: LCALL KEY_SCAN

MOV A,KEY_S

XRL A,KEY_V

JZ MAIN_1

LCALL DELAY_5ms

LCALL DELAY_5ms

LCALL KEY_SCAN

MOV A,KEY_S

XRL A,KEY_V

JZ MAIN_1

MOV KEY_V,KEY_S

MOV A,KEY_V

XRL A,#01H

JNZ MAIN_2

CLR TR0 ;进入调整状态,禁止Timer0

MOV IE,#00H ;CPU 禁止中断

LCALL KEY_PRE_PRO ;PRE 按键按下,调用PRE 按键处理程序SJMP MAIN_1

MAIN_2: MOV A,KEY_V

XRL A,#02H

JNZ MAIN_1

LCALL KEY_ADJ_PRO ;ADJ 按键按下,调用PRE 按键处理程序SJMP MAIN_1

;*************按键扫描程序******************

KEY_SCAN: CLR A

MOV P1,#0FFH

MOV C,PRE

MOV ACC.1,C

MOV C,ADJ

MOV ACC.0,C

MOV KEY_S,A ;本次扫描键值存入KEY_S

RET

;*********PRE 按键处理程序***************** KEY_PRE_PRO: INC FLAG

MOV R4,FLAG

CJNE R4,#1,KEY_PRE_1 ;注意,该指令不改变操作MOV R0,#0EH

LCALL LCD_WCMD ;显示光标"_",整个光标不闪烁MOV DIS_S0,#61H ;"a"

MOV DIS_S1,#6cH ;"l"

MOV DIS_S2,#61H ;"a"

MOV DIS_S3,#72H ;"r"

MOV DIS_S4,#6dH ;"m"

MOV DIS_S5,#3aH ;":"

MOV R1,#50H ;"P"

MOV DIS_H,HOUR_ARM

MOV DIS_M,MIN_ARM

MOV DIS_S,SEC_ARM

LCALL UPDATE_BUF

LCALL DISPLAY_PRO ;更新屏显内容

MOV R0,#47H

LCALL LCD_POS ;使光标位于第一个调整项下JMP KEY_PRE_E

KEY_PRE_1: CJNE R4,#2,KEY_PRE_2

MOV R0,#49H

LCALL LCD_POS ;光标置小时报警设置位置

JMP KEY_PRE_E

KEY_PRE_2: CJNE R4,#3,KEY_PRE_3

MOV R0,#4CH

LCALL LCD_POS ;光标置分钟报警设置位置

JMP KEY_PRE_E

KEY_PRE_3: CJNE R4,#4,KEY_PRE_4

MOV R0,#4FH

LCALL LCD_POS ;光标置秒时报警设置位置

JMP KEY_PRE_E

KEY_PRE_4: CJNE R4,#5,KEY_PRE_5

MOV DIS_S0,#74H ;"t"

MOV DIS_S1,#69H ;"i"

MOV DIS_S2,#6dH ;"m"

MOV DIS_S3,#65H ;"e"

MOV DIS_S4,#3aH ;":"

MOV DIS_S5,#20H ;" "

MOV R1,#50H ;"P"

MOV DIS_H,HOUR

MOV DIS_M,MIN

MOV DIS_S,SEC

LCALL UPDATE_BUF

LCALL DISPLAY_PRO ;更新屏显内容

MOV R0,#05H

LCALL LCD_POS ;光标置年调整位置

JMP KEY_PRE_E

KEY_PRE_5: CJNE R4,#6, KEY_PRE_6

MOV R0,#08H

LCALL LCD_POS ;光标置月调整位置

JMP KEY_PRE_E

KEY_PRE_6: CJNE R4,#7,KEY_PRE_7

MOV R0,#0bH

LCALL LCD_POS ;光标置日调整位置

JMP KEY_PRE_E

KEY_PRE_7: CJNE R4,#8,KEY_PRE_8

MOV R0,#49H

LCALL LCD_POS ;光标置时调整位置

JMP KEY_PRE_E

KEY_PRE_8: CJNE R4,#9,KEY_PRE_9

MOV R0,#4cH

LCALL LCD_POS ;光标置分调整位置

JMP KEY_PRE_E

KEY_PRE_9: CJNE R4,#10,KEY_PRE_10

MOV R0,#4fH

LCALL LCD_POS ;光标置秒调整位置

JMP KEY_PRE_E

KEY_PRE_10: MOV FLAG,#0 ;FLAG 到11,就清零

MOV R0,#0CH

LCALL LCD_WCMD ;设置LCD 开显示及光标不闪烁,不显示"-" MOV R0,#01H

LCALL LCD_WCMD ;清除LCD的显示内容

MOV IE,#8AH ;CPU 开中断,TIMER0,TIMER1 开中断

SETB TR0 ;启动TIMER0

KEY_PRE_E:

RET

;******* ADJ 按键处理程序******************

KEY_ADJ_PRO: MOV R5,FLAG

CJNE R5,#0,KEY_ADJ_0 ;FLAG=0,如果有闹钟声音,就停止闹钟声音

MOV C,TR1

JNC KEY_ADJ_A

CLR TR1

KEY_ADJ_A: JMP KEY_ADJ_E

KEY_ADJ_0: CJNE R5,#1,KEY_ADJ_1 ;FLAG=1,调整是否启用闹钟CPL ALARM

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

MOV R0,#47H

LCALL LCD_POS

JMP KEY_ADJ_E

KEY_ADJ_1: CJNE R5,#2,KEY_ADJ_2 ;FLAG=2,调整闹钟时

INC HOUR_ARM

MOV A,HOUR_ARM

CJNE A,#24,KEY_ADJ_1_1

MOV HOUR_ARM,#0

KEY_ADJ_1_1: MOV DIS_H,HOUR_ARM

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

MOV R0,#49H

LCALL LCD_POS

JMP KEY_ADJ_E

KEY_ADJ_2: CJNE R5,#3,KEY_ADJ_3 ;FLAG=3,调整闹钟分

INC MIN_ARM

MOV A,MIN_ARM

CJNE A,#60,KEY_ADJ_2_1

MOV MIN_ARM,#0

KEY_ADJ_2_1: MOV DIS_M,MIN_ARM

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

MOV R0,#4CH

LCALL LCD_POS

JMP KEY_ADJ_E

KEY_ADJ_3: CJNE R5,#4,KEY_ADJ_4 ;FLAG=4,调整闹钟秒

INC SEC_ARM

MOV A,SEC_ARM

CJNE A,#60,KEY_ADJ_3_1

MOV SEC_ARM,#0

KEY_ADJ_3_1: MOV DIS_S,SEC_ARM

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

MOV R0,#4FH

LCALL LCD_POS

JMP KEY_ADJ_E

KEY_ADJ_4: CJNE R5,#5,KEY_ADJ_5 ;FLAG=5,调整年INC YEAR

MOV A,YEAR

CJNE A,#100,KEY_ADJ_4_1

MOV YEAR,#0

KEY_ADJ_4_1: LCALL WEEK_PRO

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

MOV R0,#05H

LCALL LCD_POS

JMP KEY_ADJ_E

KEY_ADJ_5: CJNE R5,#6,KEY_ADJ_6 ;FLAG=6,调整月INC MONTH

MOV A,MONTH

CJNE A,#13,KEY_ADJ_5_1

MOV MONTH,#1

KEY_ADJ_5_1: LCALL WEEK_PRO

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

MOV R0,#08H

LCALL LCD_POS

JMP KEY_ADJ_E

KEY_ADJ_6: CJNE R5,#7,KEY_ADJ_7 ;FLAG=7,调整日INC DATE

MOV A,MONTH

XRL A,#2

JNZ KEY_ADJ_6_2 ;不是二月跳转

MOV A,DATE ;

MOV C,LEAP ;判断是否闰年

JC KEY_ADJ_6_1

XRL A,#29 ;平年二月日期28 天

JNZ KEY_ADJ_6_5

JMP KEY_ADJ_6_4

KEY_ADJ_6_1: XRL A,#30 ;闰年二月日期29 天

JNZ KEY_ADJ_6_5

JMP KEY_ADJ_6_4 ;跳转到月处理

KEY_ADJ_6_2: MOV A,MONTH

XRL A,#4

JZ KEY_ADJ_6_3

MOV A,MONTH

XRL A,#6

JZ KEY_ADJ_6_3

MOV A,MONTH

XRL A,#9

JZ KEY_ADJ_6_3

MOV A,MONTH

XRL A,#11

JZ KEY_ADJ_6_3

MOV A,DATE

XRL A,#32 ;大月日期31 天

JNZ KEY_ADJ_6_5

JMP KEY_ADJ_6_4

KEY_ADJ_6_3: MOV A,DATE

XRL A,#31 ;小月日期30 天

JNZ KEY_ADJ_6_5

KEY_ADJ_6_4: MOV DATE,#1

KEY_ADJ_6_5: LCALL WEEK_PRO

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

MOV R0,#0BH

LCALL LCD_POS

JMP KEY_ADJ_E

KEY_ADJ_7: CJNE R5,#8,KEY_ADJ_8 ;FLAG=8,调整时INC HOUR

MOV A,HOUR

CJNE A,#24,KEY_ADJ_7_1

MOV HOUR,#0

KEY_ADJ_7_1: MOV DIS_H,HOUR

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

MOV R0,#49H

LCALL LCD_POS

JMP KEY_ADJ_E

KEY_ADJ_8: CJNE R5,#9,KEY_ADJ_9 ;FLAG=9,调整分INC MIN

MOV A,MIN

CJNE A,#60,KEY_ADJ_8_1

MOV MIN,#0

KEY_ADJ_8_1: MOV DIS_M,MIN

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

MOV R0,#4CH

LCALL LCD_POS

JMP KEY_ADJ_E

KEY_ADJ_9: CJNE R5,#10,KEY_ADJ_E ;FLAG=10,调整秒INC SEC

MOV A,SEC

CJNE A,#60,KEY_ADJ_9_1

KEY_ADJ_9_1: MOV DIS_S,SEC

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

MOV R0,#4FH

LCALL LCD_POS

JMP KEY_ADJ_E

KEY_ADJ_E:

RET

;****** Timer0 定时中断程序*****************

TIMER0: MOV TH0,#0DCH

MOV TL0,#00H

INC SEC100

MOV A,SEC100

CJNE A,#100,TIMER0_E

MOV SEC100,#0

LCALL TIME_PRO

MOV A,SEC ;"51C51 显示1 秒钟,消失一秒种,形成闪动ANL A,#01

JZ TIMER0_1

MOV DIS_S0,#20H ;" "

MOV DIS_S1,#20H ;" "

MOV DIS_S2,#20H ;" "

MOV DIS_S3,#20H ;" "

MOV DIS_S4,#20H ;" "

MOV DIS_S5,#20H ;" "

SJMP TIMER0_2

TIMER0_1:

MOV DIS_S0,#43H ;"C"

MOV DIS_S1,#72H ;"r"

MOV DIS_S2,#61H ;"a"

MOV DIS_S3,#73H ;"s"

MOV DIS_S4,#79H ;"y"

MOV DIS_S5,#20H ;" "

TIMER0_2: MOV R1,#00H

MOV DIS_H,HOUR

MOV DIS_M,MIN

MOV DIS_S,SEC

LCALL UPDATE_BUF

LCALL DISPLAY_PRO

TIMER0_E:

RETI

;***** Timer1 定时中断程序******************

TIMER1: MOV TH1,#0FFH

CPL SPK

RETI

;********时间日期处理函数******************

TIME_PRO: INC SEC ;秒处理

MOV A,SEC

CJNE A,#60,TIME_PRO_A

MOV SEC,#0

INC MIN ;分处理

MOV A,MIN

CJNE A,#60,TIME_PRO_A

MOV MIN,#0

INC HOUR ;时处理

MOV A,HOUR

CJNE A,#24,TIME_PRO_A

MOV HOUR,#0

INC DATE ;日处理(日处理要考虑是否闰年,大月,小月)MOV A,MONTH

XRL A,#2

JNZ TIME_PRO_D2 ;不是二月,转TIME_PRO_D2

MOV A,DATE ;

MOV C,LEAP ;判断是否闰年

JC TIME_PRO_D1

XRL A,#29 ;平年二月日期28 天

JNZ TIME_PRO_W

SJMP TIME_PRO_M ;跳转到月处理

TIME_PRO_D1: XRL A,#30 ;闰年二月日期29 天

JNZ TIME_PRO_W

SJMP TIME_PRO_M ;跳转到月处理

TIME_PRO_D2: MOV A,MONTH

XRL A,#4

JZ TIME_PRO_D3

MOV A,MONTH

XRL A,#6

JZ TIME_PRO_D3

MOV A,MONTH

XRL A,#9

JZ TIME_PRO_D3

MOV A,MONTH

XRL A,#11

JZ TIME_PRO_D3

MOV A,DATE

XRL A,#32 ;大月日期31 天

JNZ TIME_PRO_W

SJMP TIME_PRO_M ;跳转到月处理

TIME_PRO_D3: MOV A,DATE

XRL A,#31 ;小月日期30 天

JNZ TIME_PRO_W

TIME_PRO_M: MOV DATE,#1

INC MONTH ;月处理

MOV A,MONTH

CJNE A,#13,TIME_PRO_W

MOV MONTH,#1

INC YEAR ;年处理

MOV A,YEAR

CJNE A,#100,TIME_PRO_W

MOV YEAR,#0

TIME_PRO_W: LCALL WEEK_PRO ;星期处理

TIME_PRO_A: JNB ALARM,TIME_PRO_E ;alarm=0,闹钟功能禁用,不判断闹钟时间是否到MOV A,SEC

CJNE A,SEC_ARM,TIME_PRO_E ;alarm=1,闹钟功能启用,判断秒

MOV A,MIN

CJNE A,MIN_ARM,TIME_PRO_E ;alarm=1,闹钟功能启用,判断分

MOV A,HOUR

CJNE A,HOUR_ARM,TIME_PRO_E ;alarm=1,闹钟功能启用,判断时

SETB TR1 ;闹钟时间到,启动Timer1(TR1=1)

TIME_PRO_E:

RET

;******星期自动运算函数*********************

;星期运算常数W(5 或6)

;闰年的数目L(0--99 年:L=YEAR/4 整除)

;年数YEAR

;月参变数MONTH_TAB(0,3,3,6,1,4,6,2,5,0,3,5)

;日期DATE

;星期数=(W+L+YEAR+MONTH_TAB+DATE)%7 (求余)

WEEK_PRO: MOV A,MONTH ;确定星期运算常数W

XRL A,#1

JZ WEEK_PRO_1

MOV A,MONTH

XRL A,#2

JZ WEEK_PRO_1

SJMP WEEK_PRO_2

WEEK_PRO_1: LCALL LEAP_PRO

MOV C,LEAP

JNC WEEK_PRO_2

MOV R3,#5

SJMP WEEK_PRO_3

WEEK_PRO_2: MOV R3,#6

WEEK_PRO_3: MOV A,YEAR ;计算闰年的数目L

MOV B,#4

DIV AB

ADD A,R3 ;W+L

MOV R3,A

MOV A,YEAR

ADD A,R3 ;(W+L)+YEAR

MOV R3,A

MOV DPTR,#MONTH_TAB

MOV A,MONTH

MOVC A,@A+DPTR

ADD A,R3 ;(W+L+YEAR)+MONTH_TAB

MOV R3,A

MOV A,DATE

ADD A,R3 ;(W+L+YEAR+MONTH_TAB+DA TE)

MOV B,#7

DIV AB ;余数即为星期数

MOV WEEK,B

RET

;********闰年的判断函数*********************

;闰年的条件:年(YEAR)能被4 整除、但不能被100 整除;或者被400 整除。

;如果我们只考虑(00--99),则只需考虑年(YEAR)能被4 整除即可。

LEAP_PRO: MOV A,YEAR

MOV B,#4

DIV AB

MOV A,B

JZ LEAP_PRO_1 ;能被4整除

CLR LEAP ;平年,清零LEAP

LJMP LEAP_PRO_E

LEAP_PRO_1: SETB LEAP ;闰年,置位LEAP

LEAP_PRO_E:

RET

;******更新显示缓冲区********************

;入口R1,

UPDA TE_BUF: MOV DIS_BUF_U0,R1 ;调整时,"P",正常工作,显示一自定义字符MOV DIS_BUF_U1,#20H ;空格

MOV DIS_BUF_U2,#32H ;"2"

MOV DIS_BUF_U3,#30H ;"0"

MOV A,YEAR ;更新年数据

MOV B,#10

DIV AB

ADD A,#48 ;二进制转换为ASCMA 码

MOV DIS_BUF_U4,A

MOV A,B

ADD A,#48

MOV DIS_BUF_U5,A

MOV DIS_BUF_U6,#2DH ;"-" MOV A,MONTH ;更新月数据MOV B,#10

DIV AB

ADD A,#48

MOV DIS_BUF_U7,A

MOV A,B

ADD A,#48

MOV DIS_BUF_U8,A

MOV DIS_BUF_U9,#2DH ;"-" MOV A,DATE ;更新日数据MOV B,#10

DIV AB

ADD A,#48

MOV DIS_BUF_U10,A

MOV A,B

ADD A,#48

MOV DIS_BUF_U11,A

MOV DIS_BUF_U12,#20H;空格MOV B,WEEK ;更新星期数据MOV A,#3

MUL AB

MOV B,A

MOV DPTR,#WEEK_TAB MOVC A,@A+DPTR

MOV DIS_BUF_U13,A

MOV A,B

INC A

MOVC A,@A+DPTR

MOV DIS_BUF_U14,A

MOV A,B

INC A

INC A

MOVC A,@A+DPTR

MOV DIS_BUF_U15,A

MOV A,DIS_S0

MOV DIS_BUF_L0,A

MOV A,DIS_S1

MOV DIS_BUF_L1,A

MOV A,DIS_S2

MOV DIS_BUF_L2,A

MOV A,DIS_S3

MOV DIS_BUF_L3,A

MOV A,DIS_S4

MOV DIS_BUF_L4,A

MOV A,DIS_S5

MOV DIS_BUF_L5,A

MOV DIS_BUF_L6,#20H ;空格

MOV C,ALARM

JC UPDATE_BUF_1

MOV DIS_BUF_L7,#20H ;闹钟禁用时,显示空格

SJMP UPDATE_BUF_2

UPDA TE_BUF_1: MOV DIS_BUF_L7,#01H ;闹钟启用时,显示小喇叭UPDA TE_BUF_2: MOV A,DIS_H

MOV B,#10

DIV AB

ADD A,#48

MOV DIS_BUF_L8,A

MOV A,B

ADD A,#48

MOV DIS_BUF_L9,A

MOV DIS_BUF_L10,#3AH;":"

MOV A,DIS_M

MOV B,#10

DIV AB

ADD A,#48

MOV DIS_BUF_L11,A

MOV A,B

ADD A,#48

MOV DIS_BUF_L12,A

MOV DIS_BUF_L13,#3AH;":"

MOV A,DIS_S

MOV B,#10

DIV AB

ADD A,#48

MOV DIS_BUF_L14,A

MOV A,B

ADD A,#48

MOV DIS_BUF_L15,A

RET

;*******显示处理程序*********************

DISPLAY_PRO: MOV R0,#00H

LCALL LCD_POS

MOV R0,DIS_BUF_U0

LCALL LCD_WDA T

MOV R0,DIS_BUF_U1

MOV R0,DIS_BUF_U2 LCALL LCD_WDA T MOV R0,DIS_BUF_U3 LCALL LCD_WDA T MOV R0,DIS_BUF_U4 LCALL LCD_WDA T MOV R0,DIS_BUF_U5 LCALL LCD_WDA T MOV R0,DIS_BUF_U6 LCALL LCD_WDA T MOV R0,DIS_BUF_U7 LCALL LCD_WDA T MOV R0,DIS_BUF_U8 LCALL LCD_WDA T MOV R0,DIS_BUF_U9 LCALL LCD_WDA T MOV R0,DIS_BUF_U10 LCALL LCD_WDA T MOV R0,DIS_BUF_U11 LCALL LCD_WDA T MOV R0,DIS_BUF_U12 LCALL LCD_WDA T MOV R0,DIS_BUF_U13 LCALL LCD_WDA T MOV R0,DIS_BUF_U14 LCALL LCD_WDA T MOV R0,DIS_BUF_U15 LCALL LCD_WDA T MOV R0,#40H

LCALL LCD_POS MOV R0,DIS_BUF_L0 LCALL LCD_WDA T MOV R0,DIS_BUF_L1 LCALL LCD_WDA T MOV R0,DIS_BUF_L2 LCALL LCD_WDA T MOV R0,DIS_BUF_L3 LCALL LCD_WDA T MOV R0,DIS_BUF_L4 LCALL LCD_WDA T MOV R0,DIS_BUF_L5 LCALL LCD_WDA T MOV R0,DIS_BUF_L6

MOV R0,DIS_BUF_L7

LCALL LCD_WDA T

MOV R0,DIS_BUF_L8

LCALL LCD_WDA T

MOV R0,DIS_BUF_L9

LCALL LCD_WDA T

MOV R0,DIS_BUF_L10

LCALL LCD_WDA T

MOV R0,DIS_BUF_L11

LCALL LCD_WDA T

MOV R0,DIS_BUF_L12

LCALL LCD_WDA T

MOV R0,DIS_BUF_L13

LCALL LCD_WDA T

MOV R0,DIS_BUF_L14

LCALL LCD_WDA T

MOV R0,DIS_BUF_L15

LCALL LCD_WDA T

RET

;**** LCD忙标志BF 测试程序**************

BF_TEST: PUSH ACC ;保护ACC 数据

CLR RS ;RS=0

SETB RW ;RW=1

SETB EP ;E=高电平

NOP

NOP

NOP

NOP

MOV P0,#0FFH ;将p0 口置1,保证后面数据正确读入(由P0 口结构决定)WT_BF: NOP ;

JB P0.7,WT_BF ;DB7=0 LCD 控制器空闲,DB7=1 LCD 控制器忙

CLR EP

POP ACC ;释放ACC 数据

RET

;****** LCD指令写入程序******************

;程序入口:R0

LCD_WCMD: LCALL BF_TEST ;检测忙标志

CLR RS

CLR RW

CLR EP

NOP

NOP

MOV P0,R0

NOP

NOP

NOP

NOP

SETB EP

NOP

NOP

NOP

NOP

CLR EP

RET

;**********LCD数据写入程序****************

;程序入口:R0

LCD_WDAT: LCALL BF_TEST ;检测忙标志

SETB RS

CLR RW

CLR EP

NOP

NOP

MOV P0,R0

NOP

NOP

NOP

NOP

SETB EP

NOP

NOP

NOP

NOP

CLR EP

RET

;***** LCD数据指针位置子程序**************

;程序入口:R0

LCD_POS: MOV A,R0

ORL A,#80H

MOV R0,A

LCALL LCD_WCMD

RET

;******延时约5ms 子程序********************

;晶振f=11.0592Mhz

;延时时间=(1+(1+2*100+2)*25)*12/11.0592=5507us(约5ms) DELAY_5ms: MOV R7,#25

DELAY1: MOV R6,#100

DELAY2: DJNZ R6,DELAY2

万年历电子钟设计报告

课程设计报告课程设计名称 SOPC原理及应用专业电子科学与技术 班级电子13-1班 学号 姓名郑航 指导教师冯丽 成绩

2016年1月13日

目录 一、设计目的 (1) 二、设计内容要求 (1) 三、系统软、硬件需求分析 (1) 1. 硬件系统组成规划 (1) 2. 软件系统规划 (2) 四、设计步骤 (3) 3. 新建工程“count_binary” (3) 4. 添加ip核 (4) 5. 添加SDRAM Controller (5) 6. 添加flash (6) 7. 添加外部RAM总线(Avalon三态桥) (7) 8. 添加pio核 (7) 9. 添加cpu核 (8) 10. 添加LCD核 (9) 11. 自动分配基地址并生成系统 (9) 12. 设置顶层模块图 (10) 13. 管脚分配并编译 (11) 14. 启动Nios II IDE,新建工程 (12)

15. 导入设计程序 (12) 16. 编译工程并烧录 (13) 五、设计结果 (14) 六、源程序 (16) 1. 程序......................................... 错误!未定义书签。 2. 程序......................................... 错误!未定义书签。 3. 程序......................................... 错误!未定义书签。 4. 程序 (16) 七、实验心得 (28)

项目基于NiosII系统的电子钟设计 一、设计目的 1.掌握基本的开发流程。 2.熟悉QUARTUS II软件的使用。 3.熟悉NIOS II软件的使用。 4.掌握SOPC硬件系统的搭建和NIOSII软件编程方法。 5.掌握SOPC系统设计方法。 6.进一步了解简单的设置及其编程。 二、设计内容要求 NiosII系统的硬件设计,软件设计,该系统能实现一个电子钟功能。 三、系统软、硬件需求分析 1.硬件系统组成规划 根据系统要实现的功能和开发板配置,本项目中需要用到的Cyclone II开发板上的外围器件有: LCD:电子钟显示屏幕 按钮:电子钟设置功能键 Flash存储器:存储软、硬件程序 SRAM存储器:程序运行时将其导入SRAM 根据所用到的外设和器件特性,在SOPC Builder中建立系统要添加的模块包括:NiosII CPU定时器,按键PIO,LCD,外部RAM总线(Avalon三态桥),

基于51单片机的万年历的设计

单片机课程实训SCM PRACTICAL TRAINING

目录 第一部分课程设计任务书 (1) 一、课程设计题目 (1) 二、课程设计时间 (1) 三、实训提交方式 (1) 四、设计要求 (1) 第二部分课程设计报告 (2) 一、单片机发展概况 (2) 二、MCS-51单片机系统简介 (2) 三、设计思想 (3) 四、硬件电路设计 (3) 1. 总体设计 (3) 2. 晶振电路 (4) 3. 复位电路 (4) 4. DS1302时钟电路 (5) 5. 温度采集系统电路 (5) 6. 按键调整电路 (6) 7. 闹钟提示电路 (6) 五、软件设计框图 (7) 六、程序源代码 (8) 1. 主程序 (8) 2. 温度控制程序 (11) 3. 日历设置程序 (13) 4. 时钟控制程序 (18) 5. 显示设置程序 (20) 七、结束语 (23) 八、课程设计小组分工 (23) 九、参考文献 (23)

第一部分课程设计任务书 一、课程设计题目 用中小规模集成芯片设计制作万年历。 二、课程设计时间 五天 三、实训提交方式 提交实训设计报告电子版与纸质版 四、设计要求 (1)显示年、月、日、时、分、秒和星期,并有相应的农历显示。(2)可通过键盘自动调整时间。 (3)具有闹钟功能。 (4)能够显示环境温度,误差小于±1℃ (5)计时精度:月误差小于20秒。

第二部分课程设计报告 一、单片机发展概况 单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段: 第一阶段(1976-1978):初级单片机微处理阶段。该时期的单片机具有 8 位CPU,并行 I/O 端口、8 位时序同步计数器,寻址范围 4KB,但是没有串行口。 第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O 串行端口,有多级中断处理系统,15 位时序同步技术器,RAM、ROM 容量加大,寻址范围可达 64KB。 第三阶段(1982-至今)位单片机微处理改良型及 16 位单片机微处理阶段民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。 二、MCS-51单片机系统简介 MCS-51系列单片机产品都是以Intel公司最早的典型产品8051为核心构成的。MCS-51单片机由CPU 、RAM 、ROM 、I/O接口、定时器/计数器、中断系统、内部总线等部件组成。8051单片机的基本性能有: ◆8位CPU; ◆布尔代数处理器,具有位寻址能力; ◆128B内部RAM,21个专用寄存器; ◆4KB内部掩膜ROM; ◆2个16位可编程二进制加1定时器/计数器; ◆32个(4×8位)双向可独立寻址的I/O口; ◆1个全双工UART(异步串行通信口); ◆5个中断源,两级中断结构; ◆片内振荡器及时钟电路,晶振频率为1.2MHz~12MHz; ◆外部程序/数据存储器寻址空间均为64KB; ◆111条指令,大部分为单字节指令; ◆单一+5V电源供电,双列直插40引脚DIP封装。

电子万年历课程设计报告

课程:创新与综合课程设计 电子与电气工程系 实践教学环节说明书 题目名称电子万年历 院(系)电子与电气工程学院 专业电子信息工程 班级119411 学号1109635010 学生姓名11 指导教师q1 起止日期13周周一~14周周五

电子万年历 一.设计目的 设计一个具有报时功能、停电正常运行(来电无需校时)、带有年月日、时分秒及星期显示的电子日历。 二.方案设计 硬件控制电路主要用了AT89S52芯片处理器、LCD1602显示器等。根据各自芯片的功能互相连接成电子万年历的控制电路。软件控制程序主要有主控程序、电子万年历的时间控制程序、时间显示及星期显示程序等组成。主控程序中对整个程序进行控制,进行了初始化程序及计数器、还有键盘功能程序、以及显示程序等工作,时间控制程序是电子万年历中比较重要的部分。时间控制程序体现了年、月、日、时、分、秒及星期的计算方法。时间控制程序主要是定时器0计时中断程序每隔10ms中断一次当作一个计数,每中断一次则计数加1,当计数100次时,则表示1秒到了,秒变量加1,同理再判断是否1分钟到了,再判断是否1小时到了,再判断是否1天到了,再判断是否1月到了,再判断是否1年到了,若计数到了则相关变量清除0。先给出一般年份的每月天数。如果是闰年,第二个月天数不为28天,而是29天。再用公式s=v-1 +〔(y-1/4〕-〔(y-1/100〕+〔(y-1/400〕+ d计算当前显示日期是星期几,当调节日期时,星期自动的调整过来。闰年的判断规则为,如果该年份是4或100的整数倍或者是400的整数倍,则为闰年;否则为非闰年。在我们的这个设计中由于只涉及100年范围内,所以判断是否闰年就只需要用该年份除4来判断就行了。 三.系统的设计框图 本系统以AT89S52单片机为核心,结合时钟芯片DS1302,LCD1602,键盘等外围器件,实现电子万年历的一系列功能,并通过液晶屏和按键控制完成人机交互的功能。系统总体设计框图如图(1)所示

电子时钟万年历设计

计算机科学与技术学院硬件课程设计报告

在日常生活中,手表,闹钟是不可或缺的。在实际生活生产活动中,也要考虑时间的因素,如工时的计算,霓虹灯的亮灭。 因为集成电路制造技术的不断提高,出现了高性能、高可靠的集成芯片。电子时钟在工业领域,日常生活中得到了广泛的应用。电子时钟在性能方面具有精度高,实时性好,易于调整等优点。这些使得温度控制系统的研究和开发得到的各方面的广泛关注和支持。 本次课程设计,我利用8254计数芯片,8255芯片,4*4小键盘,12864LCD 液晶显示器,蜂鸣器制作了一个带有闹钟功能的电子时钟万年历。它可以实现由4*4小键盘输入初始时间(包括年月日时分秒星期),利用8254计数,通过程序处理进位,判断闰年,在液晶显示屏上实时显示时间。还可以由小键盘选择不同的闹钟模式,设定闹钟时间。 关键词: 电子时钟; 8255A芯片; 8254芯片; 12864LCD液晶显示器;键盘输入;蜂鸣器;闹钟功能;万年历

1.设计任务与要求...........................................................................6- 1.1实验目的 (6) 1.2具体要求 (6) 2.总体方案与说明...........................................................................6- 2.1使用硬件 (6) 2.1流程设计 (6) 2.1.1系统程序模块 (6) 2.1.1系统流程图 (7) 3.硬件方案 (7) 3.1硬件说明 (7) 3.1.1计数芯片8254 (7) 3.1.2可编程外围接口芯片8255A (8) 3.1.2 128×64字符液晶显示器 (11) 3.2电路原理图与说明 (12) 3.2.1键盘电路 (13) 3.2.2 8254计数电路 (13) 3.2.3 液晶显示电路 (14) 3.3电路连接图 (14) 3.3.1 8254计数芯片 (14) 3.3.2 整体电路 (15) 4.软件方案 (15) 4.1软件主要模块流程图 (15) 4.1.1输入子程序模块流程图 (16) 4.1.2显示子程序模块流程图 (18) 4.1.2闰年子程序模块流程图 (18) 4.1.2蜂鸣器子程序模块流程图 (18) 4.1.2时间进位程序模块流程图 (19) 4.1.2主程序模块流程图 (20) 4.2源程序清单与注释 (21) 5.分析与测试 (38) 6.运行结果 (38) 6.1试验线路图 (39) 6.2实验结果 (39) 6.2.1欢迎界面 (39)

基于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)

基于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)软件设计时必须要有完善的思路,要做到程序简单,调试方便。

多功能时钟(万年历)设计

多功能时钟(万年历) 设 计 报 告 专业电子信息科学与技术 班级13级电子专升本 姓名韩科峰 学号130522012 考勤成绩设计成绩 调试成绩报告成绩 总成绩

一、课题名称 多功能时钟(万年历)设计 二、内容摘要 美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 本设计是基于单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。 关键词: 三、设计指标(要求); 1、显示时间、日期由按键选择显示(日期时间可调整)。 2、可设置闹钟功能; 3、制作PC机设置界面软件,由PC机可完成对时钟的各项设置 四、系统框图;

STC12C5A08S2 单片机 DS1302时钟模块 五、各单元电路设计、参数计算和元器件选择 4位共阴极数码管 按键

六、工作原理 DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;DS1302的控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0,位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。 “CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”

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

单片机课程设计报告 电子万年历设计 姓名:建强 学号: 专业班级: 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课程设计总结与体会.......................................... .....错误!未定义书签。 参考文献...........................................................错误!未定义书签。 附录一:系统电路图.................................................错误!未定义书签。 附录二:系统程序...................................................错误!未定义书签。

电子万年历

河北科技师范学院课程设计说明书 题目: 学院(系): 年级专业: 学号: 学生姓名: 指导教师:

摘要 本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒及星期信息,并具有可调整日期和时间功能。 我选用的是单片机8052来实现电子万年历的功能。该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒及星期,温度等信息。 该电子万年历使用12MHZ晶振与单片机8052相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。所以在该设计与制作中我选用了单片机8052,它是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。另外, 单片机8052的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。 因此,采用单片机8052原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们大学生来说也更加有用。

电子万年历设计

课程论文论文题目基于单片机的电子万年历设计 课程名称单片机原理及接口技术 专业年级 2014级自动化3班 学生姓名孙宏远贾腾飞 学号 2016年12 月3 日

摘要: 本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。。 关键词:AT89C51单片机,DS1602时钟芯片,LCD1602显示屏。串口通信。 一:引言 本设计的基于单片机控制的电子万年历,具有年、月、日、星期、时、分、秒的显示等功能,实现过程就是由主控制发送信息给DS1302时钟芯片再由时钟芯片反馈给单片机,再由主控制器传送给LCD1602显示屏显示信息。并且可以在键盘设置模块输入修改时间,当键盘设置时间、日期时,单片机主控制根据输入信息,通过串口通信传送给DS1302时钟芯片,DS1302芯片读取当前新信息产生反馈传送给单片机,然后单片机根据控制最后输送显示信息到LCD1602液晶显示屏模块上显示。 二:硬件设计: 2.0.硬件的设计总框图 2.1 DS1032时钟电路 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。芯片如图。 DS1302的内部主要由移位寄存器、指令和控制逻辑、振荡分频电路、实时时钟以及RAM组成。每次操作时,必须首先把CE置为高电平。再把提供地址和命令信息的8位装入移位寄存器。数据在SCLK的上升沿串行输入。无论是读周期还是写周期发生,也无论传送方式是单字节还是多字节,开始8位将指定内部何处被进行访问。在开始 8个时钟周期把含有地址信息的命令字装入移位寄存器之后。紧随其后的时钟在读操作时输出数据。 2.2 LCD1602与AT89C52的引脚接线 LCD1602采用总线式与单片机相连,AT89c52的P1口直接与液晶模块的数据总线D0~D7相连;P2 口的0,1,2脚分别与液晶模块的RS、RW、E脚相连。滑动变阻器用于调整液晶显示的亮度。电路如图

单片机课程设计--基于51单片机的万年历

单片机课程设计报告 万年历的设计

基于51单片机的万年历 摘要: 电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,LCD显示电路,以及调时按键电路等组成。在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用了1602液晶显示,并且使用蜂鸣器实现了整点报警的功能,温度测试的功能实现使用了DS18B20,并实现了温度过高或过低时的温度报警。 软件方面主要包括日历程序、时间调整程序,显示程序等。程序采用C语言编写。所有程序编写完成后,在KeilC51软件中进行调试,

确定没有问题后,在Proteus软件中嵌入单片机内进行仿真,并最终实现基本要求。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 一、设计要求 基本要求: 1,8 个数码管上显示,显示时间的格式为(假如当前时间是19:32:20)“19-32-20”; 2,具有日历功能; ③时间可以通过按键调整。 发挥部分: ④具有闹钟功能(可以设定多个)。 二:总体设计 电路设计框图

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

一、项目介绍与设计目的 基于单片机的电子时钟万年历为实现电子万年历的功能,采用单片机STC89C51,辅助以必要的外围电路,用C语言编写程序,并进行模块化设计而成的电子万年历系统.它通过LCD能正确显示年、月、日、周日、时、分、秒等,具有功能稳定,精确度高和可调的特点。 二、设计方案 1.项目环境要求 1.1时钟芯片选择 方案一:不使用芯片,采用单片机的定时计数器 这种方法原理是利用单片机芯片的定时器来产生固定的时间,模拟时钟的时, 分,秒。如:利用AT80C52芯片,定时器用工作方式1,每50ms产生一个中断,循环20次,即1s周期。每一个周期加1,那么1min为60个周期,1h就是60*60=3600个周期,一天就是3600*24=86400个周期。 此方法优点是可以省去一些外围的芯片,但这种方法只能适用于一些要求不是十分精确,不做长期保留的场合。 方案二:并行接口时钟芯片 DS12887 特点:采用单片机应用系统并行总线(三总线)扩展的接口电路,采用这种接口电路具有操作速度快,编程方便的优点。 但是对于80C52单片机来说,低位地址线要通过锁存器输出,还要地址译码器,而且并行口芯片的体积相对较大。 方案三:串行接口时钟芯片DS1302 芯片主特性: (1)实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力,还有闰年调整的能力

(2)31 8 位暂存数据存储RAM (3)串行 I/O 口方式使得管脚数量最少 (4)宽范围工作电压2.0 5.5V (5)工作电流 2.0V 时,小于300nA (6)读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式 (7)8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配 (8)简单 3 线接口 (9)与 TTL 兼容Vcc=5V (10)可选工业级温度范围-40~+85 优点:串行接口的日历时钟芯片,使用简单,接口容易,与微型计算机连线较少等特点,在单片机系统尤其是手持式信息设备中己得到了广泛的应用。 所以,最终选择串行时钟芯片DS1302,DS1302的管脚图如图2所示。 图2 DS1302管脚图 1.2显示模块选择 方案一:LED数码管显示 数码管显示比较常用的是采用CD4511和74LS138实现数码转换,数码显示分动态显示和静态显示,静态显示具有锁存功能,可以使数据显示得很清楚,但浪费了一些资源。目前单片机数码管普通采用动态显示。编程简单,但只能显示

万年历时钟电路设计报告word精品

阿坝师范学院 万年历设计报告姓名:李朝林 学号:20156045 班级:电子信息工程02班

阿坝师范学院物理与电子科学系 目录 1?设计任务与要求 (2) 2?主要器件讨论与选择 (2) 3.设计原理 (3) 4?单元电路设计 (3) 4.1显示电路 (3) 4.2时分秒设计............................................. .4 4.3星期天数设计 (5) 4.4闰年平年判断电路 (6) 4.5二月与大小月判断电路 (9) 4.6天数置数信号 (10) 4.7校正电路 (11) 4.8秒脉冲电路 (11) 5.完整的电路设计原理图 (12) 6.电路调试过程与方法 (13) 7.实验心得体会与总结 (13) 1. 设计任务与要求 用数字集成电路设计万年历电子钟逻辑电路 指标如下: 1)设计一个能直接显示“年”“月”“日”、“星期”、“时”、 “分”、“秒”的十进制万年历时钟显示器。 2)具有校时的功能,可分别对“年”、“月”、“日”、“星期”、 “时” “分” “秒”进行单独校时。 2. 主要器件讨论与选择 主要器件中显示模块选用74SEG_BCD数码管显示8421bcd码,计数模块统一选用74LS160作为计数芯片;74LS160具有同步置数异步清零功能,同时在有时钟脉冲的情况下进行加计数,无论采用同步置数还是异步清零都可以实现60s、60m、24h置数清零功能。因此

[在此处键入] 数字电子技术万年历设计报告 74LS160是一个不错的选择。本次仿真通过 74LS160作为时分秒年月 日星期置数,通过秒计数的置数信号作为分计时的脉冲 cp ,取反作 为分计时的使能端,依次向高位进位达到显示目的。 通过闰年、平年、大月、小月、二月的判断电路来控制天计数的 多少。 校时电路,校时选用74LS74触发器作为跳变信号;74LS244存储 信号。起作用的只有一个,当校时有效时计时电路无效。 3. 设计原理 原理图如下: 万年加时种星示器框采禺P 4. 单元电路设计 4.1显示电路 振荡器 呈期廿数 楼时电路? 译码显示电路疋* 千 百 十个

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

基于单片机的电子万年历设计 摘要:本文借助电路仿真软件Protues对基于AT89S52单片机的电子万年历的设计方法及仿真进行了全面的阐述。该电子万年历在硬件方面主要采用AT89S52单片机作为主控核心,由DS1302时钟芯片提供时钟、12864LCD液晶显示屏显示。在软件方面,主要包括日历程序、时间调整程序,显示程序等。所有程序编写完成后,在Keil软件中进行调试,确定没有问题后,在Proteus软件中进行电路设计并仿真。 论文主要研究了液晶显示器LCD及时钟芯片DS1302,温度传感器DS18B20与单片机之间的硬件互联及通信,对数种硬件连接方案进行了详尽的比较,在软件方面对日历算法也进行了论述。 研究结果表明,由于万年历的应用相当普遍,所以其设计的核心在于硬件成本的节约软件算法的优化,力求做到物美价廉,才能拥有更广阔的市场前景。关键词:单片机;DS1302;DS18B20;LCD12864 The Design Of Electronic Calender Based On MCU Abstract:This paper mainly discuss the design of electronic calender based on AT89S52 with the help of Protues.On the hardware side, the electronic calendar using AT89S52 microcontroller as the main control center, clock provided by the DS1302 clock chip , 12864LCDdot matrix LCD display. In terms of software, including calendar program, time to adjust procedures, display procedures. All programming is complete, the Keil software debugging, make sure there is no problem, in the Proteus software embedded within the simulated MCU. This article focus on liquid crystal screen LCD12864 and clock chip DS1302,temperature sensor DS18B20 which connected and communicated with Microcontroller.Several solutions will also compared with each other.On software side,calender calculation will be discussed as well. The results are as follows:as electronic calender are widely used in our daily life.It should be chip and convenient so as to win more profit.

万年历C++课程设计报告

徐州师范大学科文学院本科生课程设计 课程名称:计算机程序设计实训 题目:万年历的设计 专业班级:电子信息工程08电信 学生姓名: 学生学号: 日期:2010/12/20 指导教师:姜芳艽 科文学院教务部印制

指导教师签字: 年月日

目录 摘要...................................................错误!未定义书签。 Abstract ...................错误!未定义书签。 1 绪论...................................................错误!未定义书签。 课题的设计......................................................................... 错误!未定义书签。 课题的背景……………………………………………………………………….错误!未定义书签。 课题的目的………………………………………………………………………..错误!未定义书签。 课题的意义………………………………………………………………………..错误!未定义书签。 2 设计方案简述 ..................................................... 错误!未定义书签。 设计总体规划..................................................................... 错误!未定义书签。 实现的功能………………………………………………………………………..错误!未定义书签。 结构模块分析……………………………………………………………………...错误!未定义书签。 3 详细设计 ............................................................. 错误!未定义书签。 设计思路............................................................................. 错误!未定义书签。 设计语言…………………………………………………………………………..错误!未定义书签。 设计程序流程图…………………………………………………………………..错误!未定义书签。 模块详细设计....................................................................... 错误!未定义书签。 大月和小月的定义………………………………………………………………..错误!未定义书签。 闰年与非闰年二月的定义………………………………………………………..错误!未定义书签。 日历表的输出……………………………………………………………………..错误!未定义书签。 4 设计结果及分析.................................................. 错误!未定义书签。 软件测试............................................................................... 错误!未定义书签。 设计成果............................................................................... 错误!未定义书签。 5 总结..................................................错误!未定义书签。 参考文献 ................................................................. 错误!未定义书签。

单片机电子万年历含程序

CHANGZHOU INSTITUTE OF TECHNOLOGY 科研实践 项目名称:电子万年历设计 二级学院:电子信息与电气工程学院 专业:电气工程及其自动化班级: 10 电二 学生姓名:祝学东学号: 指导教师:庄志红职称:副教授 起止时间: 2013年12月9日—2013年12月20日 摘要 本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒、星期,并具有可调整日期和时间功能。 该电子万年历使用12MHZ晶振与单片机AT89C52相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

单片机电子万年历课程设计报告书

单片机课程设计 姓名:吕长明 学号:04040804021 专业班级:机电四班

一、单片机原理及应用简介 随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术 的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工 业控制系统、数据采集系统、自动测试系统、万年历电子表等。 二、系统硬件设计 8052 是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图图1: 图1 8052引脚 P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。 P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。 P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。 P3.0~P3.7 P2口8位双向口线(在引脚的10~17号端子)。 8052芯片管脚说明: VCC:供电电压。 GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用

于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如表1所示: 表1 特殊功能口 P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

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