资源描述
西南科技大学
级微机原理和接口技术
课程设计汇报
课题名称
微机原理和接口技术
姓 名
学 号
院、系、部
制造科学和工程学院
专 业
指导老师
月 日
一、设计任务及要求:
设计任务:
1、利用MCS-51内部定时器定时,编程实现年、月、日、时、分、秒显示,显示格式为: 年月日: 10-06-18
时分秒: 09-12-35
也可自行设定显示格式,两部分可按键切换显示;
2、能按键调整日期、时间数值;
3、可设定时间报警,报警时间最少有2个,报警时应有报警指示。
4、要求最少调试出任务前两项。
要 求:
首优异行预设计,依据设计任务要求,先确定设计硬件电路方案,然后进行硬件电路初步设计,在计算机上画出硬件电路图,在老师指导下进行修正硬件电路图,并对所包含参数进行计算。
在确定硬件基础上,要进行软件总体设计,包含软件主步骤设计和各子程序设计,同时,要写出具体操作说明,如时间调整方法,显示窗口时间切换等,以配合软件设计。
然后进入硬件调试及编程工作,设计组内同学可依据任务分工,有调试硬件各功效模块,如键盘子程序、显示子程序等,有进行整体程序编制,各模块编制过程中要注意资源衔接。
最终进入联机调试,联机调试标准也要采取分步走标准,各个功效模块要逐步套入,经过一个再增加一项功效,从而达成设计总体要求,不要上来编制个最大程序,最终无法查找错误。
最终写出设计汇报。
指导老师署名:
月 日
三、成绩
指导老师署名:
年 月 日
目 录
一、 绪 言…………………………………………………………………………………………1
二、系统设计………………………………………………………………………………………1
2.1系统整体步骤图…………………………………………………………………………1
2.2日历时钟控制方案论证……………………………………………………………1
2.3单片机选择方案论证…………………………………………………………………2
2.4键盘选择方案论证………………………………………………………………………2
2.5显示模块选择方案论证………………………………………………………………2
2.6模块选择方案论证……………………………………………………………………2
三、硬件电路设计………………………………………………………………………………2
3.1日历时钟控制电路图…………………………………………………………………2
3.2行列式键盘设计……………………………………………………………………3
3.3数码管显示电路设计…………………………………………………………………3
3.4蜂鸣器驱动电路设计…………………………………………………………………4
3.5关键元器件选择…………………………………………………………………………4
四、程序步骤图…………………………………………………………………………………5
五、 c语言程序设计……………………………………………………………………………5
六、日历时钟控制器仿真……………………………………………………………………19
6.1 Keil调试………………………………………………………………………………19
6.2 Proteus调试……………………………………………………………………………19
七、 结束语………………………………………………………………………………………20
八、 参考文件……………………………………………………………………………………21
1、绪 言
多年来伴随科技飞速发展,单片机应用正在不停地走向深入,同时带动传统控制检测日新月异更新。在实时检测和自动控制单片机应用系统中,单片机往往是作为一个关键部件来使用,仅单片机方面知识是不够,还应依据具体硬件结构,和针对具体应用对象特点软件结合,加以完善。 电子时钟是现代社会中关键计时工具之一,广泛应用于手机,电脑,汽车等社会生活需要各个方面,及对时间有要求场所。本设计采取AT89C51单片机作为关键关键部件,附以上电复位电路,时钟电路及按键调时电路组成。数字钟已成为大家日常生活中: 必不可少必需品, 广泛用于个人家庭和车站、 码头、剧场、办公室等公共场所,给大家生活、学习、工作、娱乐带来极大方便。 因为数字集成电路技术发展和采取了优异石英技术,使数字钟含有走时正确、性 能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。
2、系统设计
2.1 设计任务
1、利用MCS-51内部定时器定时,编程实现年、月、日、时、分、秒显示,显示格式为: 年月日: 10-06-18
时分秒: 09-12-35
也可自行设定显示格式,两部分可按键切换显示;
2、能按键调整日期、时间数值;
3、可设定时间报警,报警时间最少有2个,报警时应有报警指示。
4、要求最少调试出任务前两项。
2.2 方案比较和论证
2.2.1 系统整体步骤图
人机接口
显示电路
软件控制程序
电源电路
单片机控制电路
2.2.2 电子密码锁控制方案论证
用4*3行列式键盘组成0-9数字键及确定键、删除键,从矩阵键盘输入8位数密码,起始密码由程序设定,输入完后按确定键开锁,取消键清除全部输入。用8位数码管组成显示电路提醒信息,当输入密码时,只显示“-”,当密码位输入完成按下确定键时,对输入密码和设定密码进行比较,若密码正确,则开锁,此处用LED发光二极管亮一秒钟做为提醒。当密码不正确时,严禁按键输入3秒,同时开启蜂鸣器发出“嘀、嘀”报警声。
2.2.3 单片机选择方案论证
方案一:采取可编程逻辑期间CPLD 作为控制器。CPLD能够实现多种复杂逻辑功效、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功效扩展。采取并行输入输出方法,提升了系统处理速度,适合作为大规模控制系统控制关键。但本系统不需要复杂逻辑功效,对数据处理速度要求也不是很高,且从使用及经济角度考虑我们放弃了此方案
方案二:采取Atmel企业AT89S52单片机作为控制器。AT89S52是一个低功耗,高性能51内核CMOS 8位单片机,片内含8k空间可反复擦些1000次Flash只读存放器,含有256 bytes随机存取数据存放器(RAM),32个IO口,2个16位可编程定时计数器。
综合考虑,选择方案二,采取Atmel企业AT89S52单片机作为控制器。
2.2.4 键盘选择方案论证
方案一:采取独立式键盘。因为各键相互独立,每个按键各接一根输入线,经过检测输入线电平状态能够很轻易判定哪个按键被按下。此种键盘适适用于按键较少或操作速度较高场所。但本题发挥部分要求12个功效键,按键数目较多,这就需要较多输入口线,而且电路结构复杂。故此方案不可取。
方案二:采取行列式键盘。它由行线和列线组成,按键在行列交叉点上,行线信号和列线信号分别经过两个接口和CPU相连,经过行列扫描法判定按键位置,此方案适适用于按键较多场所。
经过对电子密码锁题目标分析,采取4*3行列式键盘。
2.2.5 显示模块选择方案论证
方案一:采取带字库LCD模块显示。能显示复杂信息,含有质量轻,体积小,功耗低,指令功效强,接口简单,可靠性强等优点,显示内容丰富,图形美观,易于人机交流。不过价格昂贵。
方案二:采取LED数码管显示。数码管能显示数字和符号,不过占用IO口资源较多,对于简单电路能够选择此方案。
电子密码锁,电路简单,选择方案二,显示所需信息。
2.2.6 模块选择方案论证
当输入密码时,若密码正确,则开锁,此处用LED发光二极管亮一秒钟做为提醒。当密码不正确时,严禁按键输入3秒,同时发出“嘀、嘀”报警声,为实现此功效我们选择LED发光二极管和蜂鸣器混合使用。
3 硬件电路设计
3.1 电子密码锁控制电路图
图2 电子密码锁控制线路图
3.2 行列式式键盘设计
键盘电路图3所表示。设计数字键0~9 键号依次为0~9,取消键键号为10,确定键键号为11,键号可按键值=行首键号(0、4、8、12)+列键号(0、1、2、3)公式计算。
图3 键盘电路
3.3 数码管显示电路设计
数码管驱动采取8 个共阴极数码管显示, 因为单片机驱动能力有限,采取74LC245 作为数码管驱动,在7 段码输出线上串联100 欧姆电阻起限流作用。其电路图3所表示。
图4 数码管显示电路
3.4 蜂鸣器驱动电路设计
蜂鸣器驱动采取NPN 三极管2484 来驱动,低电平有效。其电路图5 所表示。
图5 蜂鸣器电路图
3.5 关键元器件选择
关键元器件选择型号和数量如表1所表示:
表1 关键元器件清单
序号
材料名称
规格型号
数量
元件代号
1
单片机
AT89C51
1
U1
2
晶振
12MHz
1
X1
3
电容
22PF
2
C1、C2
4
键盘
4*3
12
5
数码管
MPX8
1
6
蜂鸣器
1
7
发光二极管
1
D1
8
驱动
74LS45
1
U2
9
三级管
2484
1
Q1
10
排阻
10k
1
RP1
4 程序步骤图
时间程序步骤图
5 C语言程序设计
程序清单:
设置变量缓冲区
SEC EQU 30H
MIN EQU 31H
HOUR EQU 32H
DAY EQU 33H
MON EQU 34H
YEAR EQU 35H
;*************************************************************************
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT_T0
ORG 0030H
MAIN: LCALL CHUSHI
MOV TMOD,#01H
MOV TH0,#4CH
MOV TL0,#00H
MOV IE,#82H
SETB TR0 ;开启定时器T0
MOV 50h,#00H ;启用定时器T0初始值
MOV 37H,#0 ;显示日期和时间标志
MOV 38H,#0 ;12进制和24进制标志
MOV 39H,#23 ;默认时间为24进制
CLR F0 ;日历定时0和1标志
LOOP: MOV A,37H
JZ SHIJIAN
MOV R1,#33H
LJMP BEGIN1
SHIJIAN:MOV R1,#30H ;初始化显示
BEGIN1: MOV A,38H
JZ JZ24
MOV 39H,#11
LJMP BEGIN2
JZ24: MOV 39H,#23
BEGIN2: LCALL DISPLAY
LCALL KEY ;扫描键盘
CJNE A,#05H,DINGS ;判定键值是否为5号键
LCALL DY1MS ;若是,则实现调整LCALL TIAOT
LCALL TIAOT
LCALL DISPLAY
LJMP DOWN
DINGS: CJNE A,#06H,QIEH ;判定键值是否为6号键,定时
LCALL DY1MS ;若是,则实现调整
CPL F0
JNB F0,DI0 ;F0=0,定时器0
LCALL DISHI1 ;F0=1,定时器1
LCALL DISPLAY
LJMP DOWN
DI0: LCALL DISHI0
LCALL DISPLAY
LJMP DOWN
QIEH: CJNE A,#07H,BIANH ;判定键值是否为7号键,切换
LCALL DY1MS ;若是,则切换显示,年月日和时分秒切换
LCALL DISPLAY
MOV A,37H
CPL A
MOV 37H,A
LJMP DOWN
BIANH: CJNE A,#08H,DOWN ;判定是否为八号键,变换进制
LCALL DY1MS
LCALL DISPLAY
MOV A,38H
CPL A
MOV 38H,A
DOWN: LJMP loop
;调整子程序**********************************************************************
TIAOT: push acc
CLR PSW.1 ;初始化标志位
TOP1: LCALL KEY ;扫描键盘
CJNE A,#08H,PANFAN ;判定键值是否为8号键,不是8键,则继续判定
CPL PSW.1 ;取反标志位
JB PSW.1,TC ;标志位为1,调整时间change0
LCALL CHG1 ;标志位为0,调整日期change1
LCALL DISPLAY
LJMP TOP1
TC: CLR TR0
LCALL CHG0
LCALL DISPLAY
PANFAN: CJNE A,#5,TOP1
pop acc
RET
;调整时间子程序******************************************************************
CHG0: MOV R1,#30H
LCALL DISPLAY
LCALL KEY
S: CJNE A,#01H,M ;判定键值,是否为1号键
MOV R0,#SEC ;键值为01,即1号键调整秒
MOV A,@R0 ;进制
CJNE A,#59,L0 ;判定秒是否为59
MOV SEC,#00 ;若是,秒清零
LCALL DISPLAY
LJMP CHG0
L0: INC A
MOV @R0,A
LCALL DISPLAY
LJMP CHG0
M: CJNE A,#02H,H ;判定键值,是否为02H
MOV R0,#MIN ;若是,即2号键,则调整分钟
MOV A,@R0
CJNE A,#59,L2 ;判定分是否为59
MOV MIN,#00 ;若是,分钟清零
LCALL DISPLAY
LJMP CHG0
L2: INC A
MOV @R0,A
LCALL DISPLAY
LJMP CHG0
H: CJNE A,#03H,K ;判定键值,是否为03H
MOV R0,#HOUR ;键值为03,即3号键调整小时
MOV A,@R0
CJNE A,39H,L4 ;判定小时是否为23
MOV HOUR,#00
LCALL DISPLAY
LJMP CHG0
L4: INC A
MOV @R0,A
LCALL DISPLAY
LJMP CHG0
K: CJNE A,#04H,CHG0
SETB TR0
RET
;调整日期**********************************************************************
CHG1: MOV R1,#33H
LCALL DISPLAY
LCALL KEY
R: CJNE A,#01H,Y ;判定键值,是否为1H
MOV R0,#DAY ;键值为01,调整日期
MOV A,@R0 ;进制
CJNE A,#31,B0 ;判定30
MOV DAY,#00
LCALL DISPLAY
LJMP CHG1
B0: INC A
MOV @R0,A
LCALL DISPLAY
LJMP CHG1
Y: CJNE A,#02H,N ;判定键值,是否为2
MOV R0,#MON
MOV A,@R0
CJNE A,#12,B1 ;判定月是否12
MOV MON,#00
LCALL DISPLAY
LJMP CHG1
B1: INC A
MOV @R0,A
LCALL DISPLAY
LJMP CHG1
N: CJNE A,#03H,K1 ;判定键值,是否为FB
MOV R0,#YEAR ;键值为3,调整年
MOV A,@R0
CJNE A,#99,B2
MOV YEAR,#0
LCALL DISPLAY
LJMP CHG1
B2: INC A
MOV @R0,A
LCALL DISPLAY
LJMP CHG1
K1: CJNE A,#04H,CHG1
RET
;第一次定时子程序*****************************************************************
DISHI0: MOV 40H,SEC ;保留原值
MOV 41H,MIN
MOV 42H,HOUR
LCALL CHG0 ;调用调整子程序
MOV 43H,SEC
MOV 44H,MIN
MOV 45H,HOUR
LCALL DI
RET
;第二次定时子程序*****************************************************************
DISHI1: MOV 40H,SEC
MOV 41H,MIN
MOV 42H,HOUR
LCALL CHG0
MOV 46H,SEC
MOV 47H,MIN
MOV 48H,HOUR
LCALL DI
RET
DI: MOV SEC,40H ;恢复原值
MOV MIN,41H
MOV HOUR,42H
LCALL DISPLAY
RET
;定时器T0子程序*******************************************************************
INT_T0: INC 50h
mov r5,50h
CJNE R5,#20,DUAN11 ;判定是否到一秒
LJMP DUAN12
DUAN11: LJMP NEXT0
DUAN12: MOV 50h,#0 ;若是,则重新初始化循环次数
MOV A,SEC
CJNE A,#59,DUAN21 ;判定秒是否为59
LJMP DUAN22
DUAN21: LJMP N0
DUAN22: MOV SEC,#00 ;若是则秒清零
lcall display
MOV A,MIN
CJNE A,#59,DUAN31 ;判定分钟是否为59
LJMP DUAN32
DUAN31: LJMP N1
DUAN32: MOV MIN,#00 ;若是,则分钟清零
lcall display
MOV A,HOUR
CJNE A,39H,DUAN41 ;判定小时是否23
LJMP DUAN42
DUAN41: LJMP N2
DUAN42: MOV HOUR,#00 ;若是,小时清零
lcall display
MOV A,DAY
PUSH ACC
MOV A,MON
CJNE A,#1,YUE3
POP ACC
LJMP RR2
YUE3: CJNE A,#3,YUE5 ;1,3,5,7,8,10,12月31天
POP ACC
LJMP RR2
YUE5: CJNE A,#5,YUE7
POP ACC
LJMP RR2
YUE7: CJNE A,#7,YUE8
POP ACC
LJMP RR2
YUE8: CJNE A,#8,YUE10
POP ACC
LJMP RR2
YUE10: CJNE A,#10,YUE12
POP ACC
LJMP RR2
YUE12: CJNE A,#12,YUE4
POP ACC
LJMP RR2
YUE4: CJNE A,#4,YUE6 ;4,6,9,11月30天
POP ACC
LJMP RR1
YUE6: CJNE A,#6,YUE9
POP ACC
LJMP RR1
YUE9: CJNE A,#9,YUE11
POP ACC
LJMP RR1
YUE11: CJNE A,#11,YUE2
POP ACC
LJMP RR1
YUE2: MOV A,YEAR ;2月:是闰年29天,是平年28天
MOV B,#4
DIV AB
MOV A,B
JZ RYUE
PYUE: POP ACC
LJMP RR00
RYUE: POP ACC
LJMP RR01
RR00: CJNE A,#28,N3
MOV DAY,#1
LCALL DISPLAY
LJMP RR3
RR01: CJNE A,#29,N3
MOV DAY,#1
LCALL DISPLAY
LJMP RR3
RR1: CJNE A,#30,N3
MOV DAY,#1
LCALL DISPLAY
LJMP RR3
RR2: CJNE A,#31,N3
MOV DAY,#1
LCALL DISPLAY
LJMP RR3
RR3: MOV A,MON
CJNE A,#12,N4 ;判定月份是否为11
MOV MON,#1 ;若是,则月份清零
lcall display
MOV A,YEAR ;年份加一
CJNE A,#99,N5
MOV YEAR,#0
lcall display
LJMP NEXT0
N0: INC A ;不然,秒加一
MOV SEC,A
lcall display
LCALL DFG
LJMP NEXT0
N1: INC A ;分钟加一
MOV MIN,A
lcall display
LCALL DFG
LJMP NEXT0
N2: INC A ;小时加一
MOV HOUR,A
lcall display
LCALL DFG
LJMP NEXT0
N3: INC A ;日期加一
MOV DAY,A
lcall display
LJMP NEXT0
N4: INC A ;月份加一
MOV MON,A
lcall display
LJMP NEXT0
N5: INC A
MOV YEAR,A
LCALL DISPLAY
NEXT0: MOV TH0,#4CH
MOV TL0,#00H
RETI
;判定是否到定时时间子程序*******************************************************
DFG: MOV A,SEC ;判定是否到第一个定时时间
CJNE A,43H,DOWN1
MOV A,MIN
CJNE A,44H,DOWN1
MOV A,HOUR
CJNE A,45H,DOWN1
CLR P3.6 ;若到第一个定时时间,则亮灯
DOWN1: MOV A,SEC ;判定是否到第二个定时时间
CJNE A,46H,DOWN2
MOV A,MIN
CJNE A,47H,DOWN2
MOV A,HOUR
CJNE A,48H,DOWN2
CLR P3.6 ;若到第二个定时时间,则亮灯
DOWN2: LCALL KEY
LCALL DY1MS ;扫描键盘
CJNE A,#04H,DO ;若键值为4号键,则灭灯
setb p3.6
DO: LCALL DISPLAY
RET
;延时1ms **********************************************************************
DY1MS: MOV R5,#0FAH
LOOP7: NOP
NOP
DJNZ R5,LOOP7
RET
;初始化CHUSHI******************************************************************
CHUSHI: MOV SEC,#0
MOV MIN,#0
MOV HOUR,#0
MOV DAY,#26
MOV MON,#1
MOV YEAR,#11
RET
;子程序 KSI :判定有没有闭合键*************************************************
KSI: MOV A, #00H
MOV P1, A ;P2口送00H
LCALL DY1MS
MOV A,P3
CPL A
ANL A, #03H ;屏蔽高6位
RET
;键盘扫描**********************************************************************
key: LCALL KSI ;检验是否有键闭合
JNZ LK1
LJMP END1
LK1: LCALL DY1MS
LCALL KSI ;再检验是否有键闭合
JNZ LK2 ;有键闭合转移到LK2
LJMP END1 ;无键闭合,延时12ms后转KEY1
LK2: MOV A,#0FEH
MOV P1,A
MOV R3,A
MOV R4,#00H
LK4: MOV A,P3
JB ACC.0, LONE ;ACC.3=1,第一列无键闭合,转LONE
MOV A, #01H
lJMP LKP
LONE: JB ACC.1, NEXT ;ACC.2=1,第二列无键闭合,转LTWO
MOV A, #05H
lJMP LKP
LKP: ADD A, R4 ;计算键码
PUSH ACC ;保护键码
LK3: lCALL DY1MS ;延时1ms
lCALL KSI ;检验是否继续闭合,若闭合再延时
JNZ LK3
POP ACC ;若键起,则键码送A
RET
NEXT: INC R4
MOV A,R3
JNB ACC.3,END1
RL A
MOV R3,A
MOV P1,A
lJMP LK4 ;进行下一列扫描
END1: RET
;显示子程序********************************************************************
DISPLAY: push acc
MOV R3,#03H
MOV R2,#0FEH
DISLOOP: MOV A,R2
MOV P2,A
MOV A,@R1
MOV B,#10
DIV AB
MOV 36h,A
MOV A,B
MOV DPTR,#KEYBOARD
MOVC A,@A+DPTR
MOV P0,A ;显示低位
LCALL DY1MS
MOV A,R2
RL A
MOV R2,A
MOV P2,A
MOV A,36h
MOV DPTR,#KEYBOARD
MOVC A,@A+DPTR
MOV P0,A ;显示高位
LCALL DY1MS
MOV A,R2
RL A
JNB ACC.0,EXIT
MOV R2,A
MOV P2,A
MOV A,#10
MOV DPTR,#KEYBOARD
MOVC A,@A+DPTR
MOV P0,A
LCALL DY1MS
MOV A,R2
RL A
MOV R2,A
INC R1
DJNZ R3,DISLOOP
EXIT: pop acc
RET
;断码值***********************************************************************
KEYBOARD: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
END
}
6 电子密码锁控制器仿真
在完成了电子密码锁硬件设计和软件设计以后,便进入系统调试阶段。系统调试步骤和方法基础上是相同,但具体细节和所采取开发系统和用户系统选择单片机型号相关,如可选择Keil软件进行软件调试,用Proteus软件完成硬件调试。
6.1 Keil调试
6.2 Proteus调试
7 结束语
经过这次课程设计,使我得到了一次用专业知识和专业技能去分析问题、处理问题全方面系统锻炼。使我在单片机基础原理、单片机应用系统开发过程,和用c语言设计程序思绪技巧等方面全部能向前迈了一大步,为以后成为合格应用型人才打下良好基础。
8 参考文件
1.期刊类
【格式】[序号]作者.篇名[J].刊名,出版年份,卷号(期号):起止页码.
【举例】
[1] 王海粟.浅议会计信息披露模式[J].财政研究,,21(1):56-58.
[2] 夏鲁惠.高等学校毕业论文教学情况调研汇报[J].高等理科教育,(1):46-52.
[3] Heider, E.R.& D.C.Oliver. The structure of color space in naming and memory of two languages [J]. Foreign Language Teaching and Research, 1999, (3): 62 – 67.
2.专著类
【格式】[序号]作者.书名[M].出版地:出版社,出版年份:起止页码.
【举例】[4] 葛家澍,林志军.现代西方财务会计理论[M].厦门:厦门大学出版社,:42.
[5] Gill, R. Mastering English Literature [M]. London: Macmillan, 1985: 42-45.
3.报纸类
【格式】[序号]作者.篇名[N].报纸名,出版日期(版次).
【举例】
[6] 李大伦.经济全球化关键性[N]. 光明日报,1998-12-27(3).
[7] French, W. Between Silences: A Voice from China[N]. Atlantic Weekly, 1987-8-15(33).
4.论文集
【格式】[序号]作者.篇名[C].出版地:出版者,出版年份:起始页码.
【举例】
[8] 伍蠡甫.西方文论选[C]. 上海:上海译文出版社,1979:12-17.
[9] Spivak,G. “Can the Subaltern Speak?”[A]. In C.Nelson & L. Grossberg(eds.). Victory in Limbo: Imigism [C]. Urbana: University of Illinois Press, 1988, pp.271-313.
[10] Almarza, G.G. Student foreign language teacher’s knowledge growth [A]. In D.Freeman and J.C.Richards (eds.). Teacher Learning in La
展开阅读全文