电子钟课程设计Word文档格式.docx
- 文档编号:19145029
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:15
- 大小:146.52KB
电子钟课程设计Word文档格式.docx
《电子钟课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《电子钟课程设计Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
按下K1(模式选择键),将模式选择为定时模式(模式指示灯绿灯亮),K2为定时器组
选择(本装置有24组定时器)键,K3,K4分别为定时器时钟加1键和定时器分钟加1键,
K5为定时器状态选择键,每按K5一次,此组的定时器状态改变一次,并将此组数据存入片内数据存储器中
按下K1(模式选择键),将模式选择为工作模式(模式指示灯红灯亮),K2,K3,K4,K5
无用。
此模式为正常工作模式
3自动打零器电路图
四、程序部分
1.程序分为五部分
1.初始化程序,2.键值处理程序,3.中断程序,4.显示程序,5显示驱动程序
2.部分寄存器及按键说明
28H:
扫描指针寄存器
20H--25H:
显示缓存寄存器
R6:
时钟寄存器
R5:
分钟寄存器
R4:
秒钟寄存器
K1:
模式选择键
K2:
时加1(定时器组加1)键
K3:
分加1(定时器时加1)键
K4:
秒加1(定时器分加1)键
K5:
定时器状态改变既存储键
3.程序流程图
4总体软件流程图的解释
总体流程图的定时器首先设定一个时间,执行程序时及进入计时程序。
通过加一比较程序与设定的计时程序进行比较,如果不到计时时间执行中断返回指令。
在此时如果校时键启动时可进行校时作用。
而LED显示器也通过8051控制程序实时传来的数据进行显示工作。
LED也是动态的显示方式。
5校时程序流程图
首先进入校时显示模式,此时K1如果有按下,校时程序即可执行。
此时如果K2手工操作下被按下则计时加一,达到与想要的结果一致即可停止K2的操作,如果计时结果在现在时间之前则可一直按下直到到达24小时一个循环时候,然后再次按下达到想要的计时结果。
而24时也是校时循环
终点。
此时指示灯也有所变化。
可以作为执行程序效果的参考。
而校分流程图也对整体软件流程产生影响,最终达到时间的精确。
小时和分钟的实时显示是定时的基础。
6校分及显示流程图解释
首先进入校分模式时看K1是否按下,如果按键则K3是否有按键,如果有则分钟加一,如此便起到修改分钟的作用,如果分钟修改到达60分钟则分钟全部清零,分钟计时重新开始。
如果K1键没有按下,则小时和分钟数据进入显示缓存器,然后进入显示器显示,此时看K1键是否还在断开状态,如果没有按下则时间还是显示而不做变化
如果K1键按下则此时进入定时器进入工作状态,因此K1键是程序运行的关键所在,在K1键进入工作状态的同时修改小时和分钟及定时器的工作程序才能进行
7程序清单
1.初始化程序:
READEQU0;
读RAM
WRITEEQU2;
写入RAM
EWENEQU4;
RAM写入使能
EWDSEQU6;
RAM写入禁止
ADR46EQU21H;
RAM地址
显示
启动定时器进入工作状态
时分值送显示缓存区
K1有按键吗?
清分单元
分值加1
置校分标志
K3有按键吗?
是60分吗?
THIGHEQU0F8H
TLOWEQU5FH
TIMENEQU30;
打铃持续时间(30秒)
CSBITP3.7;
RAMCS
CLKBITP3.6;
RAMCLK
DIBITP3.5;
RAMDI
DOBITP3.4;
RAMDO
ORG0000H;
主程序起始地址
AJMPSTART;
跳至主程序
ORG000BH;
TIMER0中断起始地址
AJMPTIM0;
跳至TIMER0中断子程序
START:
MOVSP,#60H;
设置堆栈在60H
MOV28H,#00;
显示寄存器初值为00
MOVR6,#12H;
“时”寄存器值为12H
MOVR5,#00H;
“分”寄存器值为00H
MOVR4,#00H;
“秒”寄存器值为00H
2.键值处理程序:
LOOP:
SETBP0.5;
工作模式
CLRP0.6
CLRP0.7
JBP0.0,N1;
K1(模式选择键)按了?
不是则跳至N1
ACALLDELAY;
消除抖动
JNBP0.0,$;
K1(模式选择键)放开了?
AJMPSET;
转到定时模式SET
N1:
MOV2FH,R6;
将时钟数据载入2FH中
MOV2EH,R5;
将分钟数据载入2EH中
MOVRAM,#00;
把93C46地址置0
SETBRS0;
将工作寄存器组选择1区
LOOP1:
MOVA,#READ;
ACALLRAM
MOVA,R3;
取出定时器的状态
ANLA,#01H
CJNEA,#01H,N2;
定时器为关闭,则跳转至N2
MOVA,R4;
取出定时器分钟数据
CJNEA,2FH,N2;
定时器分钟数据与时钟分钟不同则转至N2
MOVA,R5;
取出定时器时钟数据
CJNEA,2EH,N2;
定时器时钟数据与时钟时钟不同则转至N2
MOVTMOD,#01H;
MOVTH0,#THIGH;
MOVTL0,#TLOWH;
SETBTR0
SETBP2.1;
定时器时间到,打铃
MOVR7,#9678H;
中断查询7500次让时间达到30秒
SJMP$
TISE:
DJNER7
CPLP2.1终止打铃
MOVA,RAM;
将RAM地址载入A中
N2:
CJNEA,#1EH,N3;
到定时器数据表表尾?
没到转至N3
MOVADR46,#00;
到表尾,置RAM地址为表头
AJMPLOOP1;
转至LOOP1
N3:
INCRAM;
RAM地址加2
INCRAM
SET:
CLRP0.5;
校时模式
SETBp0.6高电平
CLRP0.7低电平
LOOPS:
JBP0.0,N11;
不是则跳至N11
JNBP0.0,$;
AJMPSETTIME;
转至SETTIME
N11:
JBP0.1,N13;
K2(时钟加1键)按了?
不是则跳至N13
MOVA,R6;
将时寄存器的值载入A
ADDA,#01H;
A内容加1
DAA;
做十进制调整
MOVR6,A;
将A的值存入时寄存器
CJNEA,#24H,N12;
是否超过24时?
不是则跳至N12
MOVR6,#00H;
是则清除时寄存器的值为00
N12:
JNBP0.1,$;
K2(时钟加1键)放开了?
N13:
JBP0.2,N15;
K3(分钟加1键)按了?
不是则跳至N15
将分寄存器的值载入A
ADDA,#01;
MOVR5,A;
将A的值存入分寄存器
CJNEA,#60H,N14;
是否超过60分?
不是则跳至N14
是则清除分寄存器的值为00
N14:
JNBP0.2,$;
K3(分钟加1键)放开了?
N15:
JBP0.3,N17;
K4(秒钟加1键)按了?
不是则跳至N17
将秒寄存器的值载入A
MOVR4,A;
将A的值存入秒寄存器
CJNEA,#60H,N16;
是否超过60秒?
不是则跳至N16
MOVR4,#00;
N16:
JNBP0.3,$;
K4(秒钟加1键)放开了?
N17:
AJMPLOOPS;
转至LOOPS
SETTIME:
CLRP0.5;
定时模式
SETBP0.7
MOVRAM,#00H
MOVA,#READ;
将数据存储器的地址为RAM中的数据
ACALLTORAM
LOOPB:
ACALLDISP;
调用DISP
JBP0.0,N21;
不是则跳至N21
AJMPLOOP;
转至LOOP
N21:
JBP0.1,N22;
K2(定时器组加1键)按了?
不是则跳至N22
将地址载入A
CLRC;
清除进位位
RRCA;
A右移1位
地址加1
将A存入R6
RLCA;
A左移1位
MOVRAM,A;
将A中地址存入RAM
读RAM地址为ADR46中的数据
ACALLTORAM
JNBP0.1,$;
K2(定时器组加1键)放开了?
ACALLDELAY;
N22:
JBP0.2,N24;
K3(定时器分钟加1键)按了?
不是则跳至N24
将定时器分寄存器的值载入A
将A的值存入定时器分寄存器
CJNEA,#60H,N23;
N23:
K3(定时器分钟加1键)放开了?
N24:
JBP0.3,N26;
K4(定时器时钟加1键)按了?
不是则跳至N26
将定时器时寄存器的值载入A
将A的值存入定时器时寄存器
CJNEA,#24H,N25;
不是则跳至N25
MOVR5,#00;
N25:
JNBP0.3,$;
K4(定时器时钟加1键)放开了?
N26:
JBP0.4,N27;
K5(改变定时器状态存储键)按了?
不是则跳至N27
INCR3;
改变R3最低位的值(表示定时器的状态,1表示开,0
表示关)
MOVA,#WRITE;
将A的值写入RAM地址为ADR46中
JNBP0.4,$;
K5(改变定时器状态存储键)放开了?
N27:
AJMPLOOPB;
转至LOOPB
3.中断程序:
TIM0:
MOVTH0,#THIGH;
重设计时4000微秒
MOVTL0,#TLOW
PUSHACC;
将A的值存入堆栈
PUSHPSW;
将PSW的值存入堆栈
CLRRS0;
设置工作寄存器为0区
DJNZR2,X2;
计时1秒
MOVR2,#250
ACALLCLOCK;
调用计时子程序CLOCK
调用显示子程序
X2:
ACALLSCAN;
调用扫描子程序
POPPSW
POPACC
RETI
4.显示器驱动程序:
SCAN:
MOVR0,#28H;
(28H)为扫描指针
INC@R0;
扫描指针加1
CJNE@R0,#6,X3;
扫描完6个显示器?
不是跳至X3
MOV@R0,#00;
是则扫描指针为0
X3:
MOVA,@R0;
扫描指针载入A
ADDA,#20;
A加常数20H(显示寄存器地址)=各时间显示区地址
;
存入R1=各时间显示地址
MOVR1,A;
扫描指针存入A
将A高低4位交换(P1高4位为扫描值,
SWAPA;
低4位为显示数据值)
ORLA,@R1;
扫描值+显示值
输出至P1
RET
计时程序:
CLOCK:
R4为秒寄存器
加1
存入秒寄存器
CJNEA,#TIMEN,X4;
是否超过打零连续时间?
不是则跳至X4
CLRP2.0;
关铃
X4:
CJNEA,#60H,X5;
不是则跳至X5
是则清除为0
R5为分寄存器
存入分寄存器
R6为时寄存器
存入时寄存器
CJNEA,#60H,X5;
MOVR6,#00;
X5:
5.显示程序:
DISP:
MOVR1,#20;
(20H)为显示寄存器,R1=20H
将时寄存器的内容存入A
MOVB,#01H;
设B累加器的值为10H
DIVAB;
A/B,商(十位数)存入A,余数(个位数)存入B
MOV@R1,B;
将B的内容存入(20H)
INCR1;
R1=21H
MOV@R1,A;
将A的内容存入(21H)
R1=22H
将分寄存器的内容存入A
将B的内容存入(22H)
R1=23H
将A的内容存入(23H)
R1=24H
将秒寄存器的内容存入A
将B的内容存入(24H)
R1=25H
将A的内容存入(25H)
END
五、总结说明与体会
经过近一个月的努力,在老师和同学的帮助下,我基本上完成了设计任务.通过这次毕业设计,我充分认识到了自学的重要性,以及学以致用的道理.我在图书馆查阅了大量的资料,同时也认识到了图书馆的重要作用.通过两个星期的设计我又一次回顾了我在大学的所有的知识同时也让我认识到自身的不足,同时通过单片机的毕业设计我认识到现实中产品开发中的思路同时也加强了自己的自学能力,无论是单片机程序还是电路图还是排版编辑都对自己的综合能力的提高有所帮助。
同时也深刻认识到单片机在现实生活中的巨大作用,同时也提醒自己要在现实生活中具有创新意识,能从落后的事物中利用自己所学的专业知识以创新的精神和团队合作的意识开发新的产品,这个我觉得才是毕业设计给我们最大的收获。
同时在这次设计中由于本人水平有限,开发的程序及整体电路都过于繁琐,同时也可能出现许多错误,敬请
老师能给出指正的意见。
最后感谢老师同学给我的莫大的帮助,也感谢我母校三年来对我的辛勤栽培,谢谢!
参考文献
[1]李朝青.单片机原理及接口技术(修订版).北京:
北京航空航天大学出版社,1998
[2]李广弟.单片机基础.北京:
北京航空航天大学出版社,1992
[3]何立民.单片机应用技术大全.北京:
北京航空航天大学出版社,1994
[4]张毅刚.单片机原理及接口技术.哈尔滨:
哈尔滨工业大学出版社,1990
[5]谭浩强.单片机课程设计.北京:
清华大学出版社,1989
|6|韩全立,赵德申,微机控制技术及应用、北京:
机械工业出版社,2004
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子钟 课程设计