资源描述
单片机课程
电子时钟设计报告
2016.04.27
一. 设计的任务及要求:
利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟。
任务:
通过电子时钟综合设计,学会利用 8051 定时器时间计时处理功能,了解按键扫描及控制LED数码管显示原理,掌握单片机和按键以及LED数码管硬件电路设计及控制程序的设计方法。思考按键消除抖动、LED 动态显示与静态显示的特点,从而提高解决实际问题的能力。
要求:
1.在 4 位数码管上显示当前时间。显示格式“时时分分”。
2.由 LED 闪动做秒显示。
3.利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。
二. 工作原理:
LED数码管:
蜂鸣器:
按键:
三. 软件设计流程及描述:
总设计框图:
显示部分:
显示部分分为时钟显示、闹钟显示和秒显示三部分,主要由时钟显示子程序和闹钟显示子程序构成,秒显示较为简单。闹钟显示与时钟显示编程流程大致相同。
流程图如下:
按键扫描及处理框图:
闹铃部分:
设计思路及原理:音节由不同频率的方波产生,音节与频率的关系如下表所示。要产生音频方波,设计利用延时来建立音符表NOTE,表格中的数存R3*20us,其倒数1/(R3*2*10us)对应相应音符的频率。
另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。设计利用T1中断产生10ms延时,取1/4拍为10H*10ms,相应产生所需延时。
音符(低)
.1
.2
.3
.4
.5
.6
.7
频率(HZ)
262
294
330
349
392
440
494
音符(中)
1
2
3
4
5
6
7
频率(HZ)
523
587
659
698
784
880
988
音符(高)
^1
^2
^3
^4
^5
^6
^7
频率(HZ)
1046
1175
1318
1397
1568
1760
1967
程序中的音乐乐谱如下:
NOTE: DB 60H,60H,7FH,98H,7FH,60H,60H,7FH,60H
DB 98H,7FH,60H,7FH,98H,60H,7FH,98H,50H
METRE: DB 20H,20H,20H,20H,20H,20H,20H,20H,20H
DB 20H,20H,20H,20H,20H,20H,20H,20H,20H
四. 源程序及代码:
;程序主要包括MAIN函数,T0/T1中断程序,时间、闹钟显示程序 ,按键扫描、处理程序
;/主函数/预置T0\T1工作方式,置初值,预置时钟、闹钟,置位数码管
ORG 0000H
AJMP MAIN ;跳转到主程序MAIN执行
ORG 000BH
AJMP INTT0 ;跳到INTT0执行
ORG 001BH
LJMP INTT1 ;跳到INTT1执行
ORG 02B0H
MAIN:MOV SP,#80H
MOV TMOD,#11H ;设置定时器T0、T1工作于方式1
MOV TH0,#0ECH ;装入时钟定时初值(5ms)
MOV TL0,#78H
MOV TH1,#0D8H ;装入闹铃定时初值(10ms)
MOV TL1,#0F0H
MOV R1,#00H ;确保首次默认闹铃工作
MOV 22H,#00H ;预置时钟分钟
MOV 23H,#00H ;预置时钟小时
MOV 30H,#03H ;预置闹铃分钟
MOV 31H,#00H ;预置闹铃小时
SETB P1.7 ;LED7显示秒;置位P1.7,发光二极管LED8灭
SETB EA ;开放总中断
SETB ET0 ;允许T0中断
SETB TR0 ;开启定时器T0
LOOP:LCALL DISPT ;调用时间显示子程序
LCALL RING ;调用闹铃处理子程序
LCALL KEY ;调用按键扫描子程序
JZ LOOP ;无键按下则循环
LCALL CASE ;有键按下则转按键处理子程序执行
SJMP LOOP ;返回循环
;/ T0一秒定时中断程序INTT0/正常时钟计时
INTT0:PUSH PSW ;状态字入栈保护
PUSH ACC ;累加器入栈保护
MOV TH0,#0ECH ;装入计数初值,12MHZ晶振,形成1S中断
MOV TL0,#78H
INC 20H
MOV A,20H
CJNE A,#200,RETURN
CPL P1.67 ;一秒到LED8亮,用于显示秒
MOV 20H,#00 ;一秒到清20H
MOV A,21H
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,RETURN
MOV 21H,#00 ;一分到,21H单元清零
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,RETURN
MOV 22H,#00 ;一小时到,22H单元清零
MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,RETURN
MOV 23H,#00H ;满24,23H单元清零
RETURN:
POP ACC
POP PSW
RETI
;/时间显示子程序/
DISPT: MOV A,22H
ANL A,#0FH
MOV 2AH,A ;时钟分的低位
MOV A,22H
ANL A,#0F0H
SWAP A
MOV 2BH,A ;时钟分的高位
MOV A,23H
ANL A,#0FH
MOV 2CH,A ;时钟时的低位
MOV A,23H
ANL A,#0F0H
SWAP A
MOV 2DH,A ;时钟时的高位
LED1: SETB P2.3
MOV A,2DH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.0 ;选通数码管1
MOV P0,A ;显示时钟时的十位部分
LCALL DELAY
LED2: SETB P2.0
MOV A,2CH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.1 ;选通数码管2
MOV P0,A ;显示时钟时的个位部分
LCALL DELAY
LED3: SETB P2.1
MOV A,2BH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.2 ;选通数码管3
MOV P0,A ;显示时钟分的十位部分
LCALL DELAY
LED4: SETB P2.2
MOV A,2AH
JB P1.6,TA
TA: MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.3 ;选通数码管4
MOV P0,A ;显示时钟分的个位部分
LCALL DELAY
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共阳数码管的时间显示码
;/按键扫描程序/ 开关接P3口,判断按键情况
KEY: MOV P3,#0FFH
MOV A,P3
CPL A
ANL A,#2CH
JZ RETK ;无键按下则返回
LCALL DELAY ;延时消抖
MOV A,P3
CPL A
ANL A,#2CH
JZ RETK ;键盘去抖动
MOV R6,A ;将键值存入R6
LOOP1: LCALL DISPT;
MOV A,P3
CPL A
ANL A,#2CH
JNZ LOOP1 ;等待键释放
MOV A,R6
RETK: RET
;/按键处理子程序/根据按键情况进行处理
CASE: MOV A,R6
CLR P1.0 ;发光二极管LED1亮
JB ACC.2,SETH ;转调整时
JB ACC.3,SETM ;转调整分
JB ACC.5,SETR ;转闹铃设置
WAITCASE:LCALL DISPT ;无键按下时等待
LCALL KEY
JZ WAITCASE
;/时间调整程序/ 按键调整时间
SETT: LCALL DISPT
LCALL KEY
JZ SETT
MOV A,R6
JB ACC.2,SETH
JB ACC.3,SETM
JB ACC.5,KEYGO ;第二次按为确认离开
KEYGO: SETB P1.0 ;发光二极管LED1、LED2灭
SETB P1.1
RET
SETH: MOV A,23H ;调整时钟时,时加1
ADD A,#01H
DA A ;十进制调整
MOV 23H,A
CJNE A,#24H,HD ;判断是否到24,不到继续
MOV 23H,#00H ;到24时清零
HD: LJMP SETT
SETM: MOV A,22H ;分加1
ADD A,#01H
DA A ;十进制调整
MOV 22H,A
CJNE A,#60H,MD ;判断是否到1小时,不到继续
MOV 22H,#00H ;到1小时则清零
MD: LJMP SETT
;/闹铃时间调整按键扫描及处理子程序/
KEYR: MOV P3,#0FFH
MOV A,P3
CPL A
ANL A,#2CH
JZ RETK ;无键按下则返回
LCALL DISPR ;延时消抖
MOV A,P3
CPL A
ANL A,#2CH
JZ RETK ;键盘去抖动
MOV R6,A ;将键值存入R6
LJMP LOOPR
LOOPR: LCALL DISPR
MOV A,P3
CPL A
ANL A,#2CH
JNZ LOOPR ;等待键释放
MOV A,R6
AJMP RETK
;/设置闹铃时间/
SETR: SETB P1.0 ;发光二极管LED1灭
CLR P1.1 ;发光二极管LED2亮,改显示状态
LCALL DISPR
MOV R1,#00H ;设置闹钟时重设R1,用于检测闹铃播放与否
MOV 53H,#03H ;重设闹铃次数
LCALL KEYR ;闹铃时间调整按键检测
JZ SETR
MOV A,R6
JB ACC.2,SETRH
JB ACC.3,SETRM
JB ACC.5,KEYGO ;第二次按为确认离开
SETRH: MOV A,31H ;闹钟时加1
ADD A,#01H
DA A ;十进制调整
MOV 31H,A
CJNE A,#24H,RHD ;判断是否到24,不到继续
MOV 31H,#00H ;到24时则清零
RHD: LJMP SETR
SETRM: MOV A,30H ;闹钟分加1
ADD A,#01H
DA A ;十进制调整
MOV 30H,A
CJNE A,#60H,RMD ;判断是否到1小时,不到继续
MOV 30H,#00H ;到1小时则清零
RMD: LJMP SETR
;/闹钟设置显示子程序/
DISPR: MOV A,30H
ANL A,#0FH ;屏蔽高四位
MOV 3AH,A ;保留低位送3AH
MOV A,30H
ANL A,#0F0H ;屏蔽低四位
SWAP A ;高四位与第四位交换
MOV 3BH,A ;将保留的高4位送3BH
MOV A,31H
ANL A,#0FH
MOV 3CH,A ;低位
MOV A,31H
ANL A,#0F0H
SWAP A
MOV 3DH,A ;高位
LEDR1: SETB P2.3
MOV A,3DH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.0
MOV P0,A
LCALL DELAY
LEDR2: SETB P2.0
MOV A,3CH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.1
MOV P0,A
LCALL DELAY
LEDR3: SETB P2.1
MOV A,3BH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.2
MOV P0,A
LCALL DELAY
LEDR4: SETB P2.2
MOV A,3AH
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P2.3
MOV P0,A
LCALL DELAY
RET
;/延时子程序/
DELAY: MOV R5,#2
D1: MOV R4,#250
D2: DJNZ R4,D2
DJNZ R5,D1
RET
;/闹铃检测程序/
RING: MOV A,23H ;比较时
CJNE A,31H,RETR
MOV A,22H ;比较分
CJNE A,30H,RETR
LCALL SING
RETR: RET
;/定时器T1中断子程序/
INTT1: PUSH PSW ;状态字入栈保护
PUSH ACC ;累加器入栈保护
INC 50H ;中断服务程序,中断计数器加1
MOV TH1,#0D8H ;装入计数初值,12M晶振,形成10MS中断
MOV TL1,#0F0H
POP ACC
POP PSW
RETI
;/响铃子程序/
SING: CJNE R1,#01H,SING1 ;判断是否已经闹铃过一次
LJMP RETS
SING1: SETB ET1
MOV 50H,#00H ;中断计数器清0
MOV 51H,#00H ;音符指针
MOV 52H,#00H ;节拍码指针
MOV 53H,#03H ;设置闹钟不退出响铃次数
GETNOT: MOV A,51H
MOV DPTR,#NOTE ;表头地址送DPTR
MOVC A,@A+DPTR ;查表取音符码
JZ ENDP ;是00H,则结束
MOV R6,A ;存R6
INC 51H
CJNE A,#0FFH,GETMET ;不为0FFH,转取节拍码
LJMP PAUSE ;转休止播放
LJMP GETNOT ;取音符码
GETMET: MOV A,52H
MOV DPTR,#METRE ;取节拍码首地址
MOVC A,@A+DPTR ;取节拍代码送R7
MOV R7,A
INC 52H
PLAY: SETB TR1 ;启动计数
CPL P2.4
LCALL KEY
JNZ RETS
MOV A,R6
MOV R3,A ;音符码存R3
LCALL DELAY1
MOV A,R7 ;取节拍码放A与中断计数比较
CJNE A,50H,PLAY ;中断计数器(50H)=R7否,不等继续循环
MOV 50H,#00H ;等于,则取下一代码
LCALL DISPT
CLR TR1
LJMP GETNOT
RETS: SETB P2.4 ;置位蜂鸣器,否则可能产生啸叫
MOV R1,#01H ;表明播放过一次
CLR A ;清除A,防止进入按键处理子程序
LJMP RETR
PAUSE: CLR TR1 ;休止100毫秒
MOV R2,#0DH
DELAY2: MOV R3,#0FFH
LCALL DELAY1
DJNZ R2,DELAY2
RET
ENDP: SETB P2.4
MOV R2,#0C7H ;歌曲结束,延时1秒后继续
END1M: MOV R3,#00H
LCALL DELAY1
DJNZ R2,END1M
DJNZ 53H,SING
RET
DELAY1: NOP ;R3为01H时,DELAY延时为20uS
DELAY3: MOV R4,#02H
DELAY4: DJNZ R4,DELAY4
DJNZ R3,DELAY3
RET
NOTE: DB 60H,60H,7FH,98H,7FH,60H,60H,7FH,60H
DB 98H,7FH,60H,7FH,98H,60H,7FH,98H,50H
METRE: DB 20H,20H,20H,20H,20H,20H,20H,20H,20H
DB 20H,20H,20H,20H, 20H,20H,20H,20H,20H
END
六. 总结与体会
本次课程设计对知识的要求较为综合,我们用到了单片机、数字电路、模拟电路、protel/proteuse、keil-c51等知识,而且在后来要求必须用汇编语言来编写程序。所以,才开始时,我们不知道从何下手。不过后来在老师的帮助下,以及自己不断的查找资料,和同学商量,终于开始有点头目了,慢慢的便进入了状态。
在将编写好的源程序输入电脑,编译后出现很多错误,这些错误有许多是平时的实验遇到过的,例如:输入的分号格式不正确, CJNE写成了CJNZ等等。通过这次课程设计,发现自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
单片机理论的学习是为课程的设计作准备的,但有时学习的理论也解决不了实践中的问题。实践中获得的知识能让我对单片机的知识有更好的认识和理解。虽然这次的课程设计我参考了一些文献资料,在对程序的读写过程中我明白了许多。这次课程设计的最大收获是,只有把理论用到实践中我们才能真正掌握好所学知识。
七. Proteus仿真
目 录
第一章 总 论 1
1.1项目概况 1
1.2研究依据及范围 3
1.3主要技术经济指标 4
1.4研究结论及建议 4
第二章 项目建设的背景和必要性 6
2.1项目建设的背景 6
2.2项目建设的必要性 8
第三章 项目服务需求分析 11
第四章 项目选址与建设条件 13
4.1选址原则 13
4.2项目选址 13
4.3建设条件 14
4.4项目建设优势条件分析 15
第五章 建设方案 18
5.1建设规模与内容 18
5.2总体规划设计 19
5.3建筑方案 24
5.4结构方案 26
5.5给水工程 27
5.6排水工程 29
5.7电气设计 31
5.8暖通设计 34
5.9项目实施进度 35
第六章 节能措施 37
6.1 设计依据 37
6.2节能措施 37
第七章 环境影响分析 39
7.1 环境影响分析 39
7.2 环境保护措施及治理效果 40
第八章 消防与安全卫生 42
8.1 消防 42
8.2 劳动安全 43
8.3 卫生防护 44
第九章 组织机构与运作方式 45
9.1 组织机构 45
9.2组织管理 46
9.3劳动定员 46
第十章 投资估算 47
10.1编制依据 47
10.2 投资估算 47
10.3资金筹措 48
第十一章 经济效益评价 49
11.1 成本核算 49
11.2 利润估算 51
11.3经济风险分析 52
11.4财务评价结论 54
第十二章 结 论 55
展开阅读全文