报时定时控制系统.docx
- 文档编号:26121719
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:32
- 大小:74.52KB
报时定时控制系统.docx
《报时定时控制系统.docx》由会员分享,可在线阅读,更多相关《报时定时控制系统.docx(32页珍藏版)》请在冰豆网上搜索。
报时定时控制系统
数理与信息工程学院
课程设计
题目:
报时定时控制系统
专业:
计算机科学与技术
班级:
姓名:
徐燕红学号:
实验地点:
指导老师:
成绩:
(2006.6)
目录
第1节引言………………………………………………………………………
1.1技术要求………………………………………………………………
1.2计时方案………………………………………………………………
1.3键盘/显示方案………………………………………………………………
第2节硬件设计…………………………………………………………
2.1电路原理图………………………………………………………………
2.2系统工作流程………………………………………………………………
第3节系统软件设计…………………………………………………………
3.1软件设计………………………………………………………………
3.2系统工作流程………………………………………………………………
第4节程序清单.…………………………………………………………………
4.1主程序模块………………………………………………………………
4.2定时中断服务程序模块………………………………………………………
4.3扫描显示模块………………………………………………………………4.4键扫描子程序……………………………………………………………
4.5键值处理子程序………………………………………………………………
4.6移位键处理程序模块…………………………………………………………
4.7报时处理模块………………………………………………………………
4.8用户自设定报时时间点处理模块……………………………………………
第5节结束语……………………………………………………………………
…………………………………………………………
参考文献…………………………………………………………………………
报时定时控制系统
第1节引言
因为单片机的种类多,而型号杂,也是我们学习中的困难,所以就MCS—51系列的产品来说,就是一个典型的学习方法。
对于类似汇编的单片机编程过程,也是一个十分有趣的过程。
为了更好的说明,我以上介绍先从应用电路切入,同时介绍它们的使用方法,以便能快速掌握它们的应用。
1.1技术要求
(1)定时准确,月误差《=10%。
(2)掉电时有备用电池继续走时,不能停机。
(3)有显示和校时功能。
(4)作息时间预置36点,可用外置开关选用数套作息时间表。
(5)具备定时起闹功能。
(6)
1.2计时方案
采用软件控制利用MCS-51系列单片机内部的定时/计数器进行中数年定时,配合软件延时实现时、分、秒的计时。
该方案节省硬件成本,且能够使读者在定时/计数器的使用、中数年及程序设计方面得到锻炼与提高,因此本系统将采用软件方法实现计时。
1.3键盘/显示方案
对于实时时钟而言,显示显然是另一个重要的环节。
如前所述,通常有两种显示方式:
动态显示和静态显示。
直接利用MC51单片机的P0和P2口,LED动态显示。
该方案硬件连接简单,但动态扫描的显示方式需占用CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。
第2节硬件设计
考虑到在停电时本机仍需正常走时,故单片机选用COMS低功耗产品如MCS51,由于LED显示电路耗电量较大,可将其电源与单片机电源分开,从而使得在停电时蓄电池仅对单片机供电,而不对显示电路供电,延长电池的供电时间。
选用典型的并口扫描显示输出。
用MCS51的P0口和P2口作为段码和位码输出口,并由2片ULN2003作为每个端口的反相驱动。
利用P1口的低六位作为6个功能键的键盘线,P3口部分口作为冬季或夏季作息时间的选择线、临时报时处理设置线和打铃输出控制(输出部分加光电隔离)。
2.1电路原理图
报时钟电路的核心是MCS51单片机,其内部带有4KB的程序ROM,无须外扩程序存储器。
电脑时钟没有大量的运算和暂存数据,现有的128B片内RAM已能满足要求,也不必外扩片RAM。
系统配备5位LED显示和6*1键盘,用P1口作为键盘接口电路,P2口作为5位LED显示的位选通口,P0口则作为字形码输出口。
采用共阴极LED数码管,P0口、P2口和数码管之间串接了反相驱动芯片ULN2003,因此P2口输出高电平选中相应的位,而P0口输出低电平点亮相应的段。
P3。
2接用户自设定报时/作息时间报时的选择开关,开关闭合(P3。
2为低电平)时,仅对用户自设定的时间点进行报时;开关断开时,则进行固定的作息时间表报时。
P3。
3端口接夏令/冬令作息时间表,P3。
3=1时选择择冬令作息时间表。
P3。
3端口外接光电隔离器,驱动扩音机电源的控制开关,低电平有效。
P3。
3端口外接光电隔离器,驱动音乐播放的控制开关,低电平有效。
2.2系统工作流程
本单片机报时控制系统具备以下功能:
(7)时钟显示。
5位LED从左到右依次显示星期、时、分,采用24H计时。
(8)键盘功能。
采用6个独立按键,包括:
移位键、加1键、减1键、校时置入键、定时设定键、定时显示键。
(9)移位键:
(P1。
0=0)每按动移位键一次,小数点从左向右移动1位。
(10)加1键:
(P1。
1=0)对小数点所在位的数什进行十进制加1。
(11)减1键:
(P1。
2=0)对小数点所在位的数值进行十进制减1。
(12)校时置入键:
(P1。
3=0)将显示的时间值置入实时时钟的计时缓冲区。
(13)报时设定键:
(P1。
4=0)根据‘组编号’(LED显示的最高位的值)将用户设定的报时时间点(小时和分)存入内部RAM相应存储单元中。
(14)报时显示键:
(P1。
5=0)显示组编号(LED最高位)所指定的一组用户报时时间。
本单片机报时控制系统工作流程如下:
(1)时间显示。
通电后,系统自动进入时钟显示,从00:
00:
00:
开始计时,此时可以设定当前时间。
(2)时间校对。
按下“移位”键,小数点从左向右移动,每按动1次,小数点便移动1位;要修改设置哪一位,只需将小数点移到该位,便可用“加1键”或“减1键”对该位进行数字设定;时间的校对设定一共有5位,从左到右依次为星期、小时十位、小时个位、他的十位、分的个位。
设置正确后“校时置入键”,时间校正便设置完成,报时钟开始按新设置的时间值开始走时和显示。
(3)用户报时时间设置/显示。
用户可以自行设定10组报时时间点,这时LED显示的最高位定义为组编号其他位定义不变;按下“报时设定键”,系统根据“组编号”将用记设定的报时时间点(小时和分)存入内部RAM相应存储单元中,用户如需修改和检查这些报时时间。
如需修改,可用“移位键”、“加1键”,“减1键”来重新设定,然后用“报时设定键”来转入并结束显示。
(4)报时输出的驱动过程。
在报时处理程序上中,一旦当前时间与作息时间表中的某一时间点(时、分值)相同时,则建立F0报时标志,建立F1放音标志,扩音机播放报时音乐,并在26H中设置放音时间,放音时间到,则关闭驱动及清除F1标志位,完成1次报时驱动.
第3节软件设计
3.1系统资源分配
(1)为方便阅读程序,先对系统的资源分配加以说明。
1)定时器。
定时器0用作时钟定时,按方式1工作,每隔100MS溢出中断1次。
2)片内RAM及标志位的分配与定义见表1
地址
功能
名称
初始化值
2FH~2BH
显示缓冲区,星期、小时、分(高位在前)
DISP0~DISP4
00H
24H~20H
计时缓冲区,星期、时、分、秒、100ms
WEEK,HOUR,MIN,SEC,MSEC
00H
40H~53H
用户报时时间值寄存区(时、分)
AHOUR、AMIN
00H
61H~7FH
堆栈区
00H
F0H
报时开始标志位
F0H
0
F1H
放音开始标志位
F1H
0
F3H
分钟值变更标志位
F3H
0
F4H
键处理标志位
F4H
0
25H
扩音机预热时间
25H
00H
26H
播放报时音乐时间
26H
00H
(2)软件流程。
根据上述工作流程,软件设计可分为以下几个功能模块:
1)主程序:
初始化与键盘监控。
2)计时:
为定时器0中断服务子程序,完成刷新计时缓冲区的功能。
3)时间设置与报时设置:
由键盘输入设置当前时间与定时启闭时间。
4)显示:
完成5位LED动态显示。
5)键盘扫描:
判断是否有键按下,并求取键号。
6)定时比较:
判断报时时间到否,如时间到,则启动报时处理程序。
7)其他辅助功能程序,如键盘设置、拆字、合字、冬季或夏季时间表选择及假日停止报时等。
3.2模块进行软件设计
1)计时程序模块。
如前所述,系统定时采用定时器与软件循环相结合的方法。
定时器0每隔100MS溢出中断1次,则循环中断10次延时时间为1S,上述过程重复60次为1MIN,分计时60次为1H,小时计时24次则时间重新回到00:
00:
00,同时星期计数加1,如加至7则回复得到0。
设系统使用6MHZ的晶振,定时器0工作在方式1,则100MS定时对应的定时器初值可由下式计算得到
定时时间=(2-定时器0初值)*(12/FOSC)
如果定时器0初值为30CBH,则TH0=3CH,TL0=0B0H
当系统使用其他频率的晶振时,可以由上式计算相应的定时器0初值,也可以改变定时时间。
例如当系统晶振为12MHZ时,同样的初值对应的定时时间为50MS,则循环中断次数为20次时,延时时间为1S。
这里有两个问题需要特别重视。
第一,定时器溢出产生中断请求,CPU并不一定立即响应中煌,而可能需要延迟一定的中断响应时间之后才能响应中断,中断响应时间大约为3~8个机器周期。
显然,这将在定时时间中加入额外的延时时间,导致计时误差。
为了保证计时精度,必须采取措施进行补偿。
我们采用增大重装的定时器0初值的方法来减少定时器0定时时间。
具体应调整为多大,一般需要通过调试来确定。
经测试,定时器0重装初值设为3CB7H~3CBFH。
可以满足精度要求。
第二,时间是按十进制递增,而MCS-51系列单片机只有二进制加法指令,因此用加法指令计时必须进行二一十进制转换。
2)时间校对设置程序和定时报时程序模块。
将键盘输入的5位时间值合并3位压缩BCD码(星期、时、分)送入计时缓冲区,作为当前计时起始时间或报时定时时间。
该模块的入口为计时缓冲区或报时值寄存区的首地址。
程序调用1个键盘设置子程序将键入的5位时间值送入键盘设置缓冲区,然后用合字程序将键盘设置缓冲区中的6位BCD码合并为3位压缩BCD码,送入计时缓冲区或用户自定义报时值寄存区。
3)键盘扫描程序模块。
此模块的功能是判断是否有键按下,无键按下则循环等待,有键按下则求承诺键号并将键号送累加器A返回。
程序中的去抖延时和循环等待延时都用显示子程序来代替,从而保证随时刷新显示。
键盘扫描程序在前面已有详细的叙述,在此不再赘述。
4)显示程序模块。
将显示缓冲区中的5位BCD码用动态扫描方式显示。
为此,必须首先将3字节计时缓冲区中的星期、时、分秒压缩BCD码拆分为5字节(百位、十位分别占有2字节)BCD码。
5)定时比较程序模块。
在主程序中,一旦检测到有分值进位(即计满60S向分钟值进位)标志F3建立,即进入报时处理子程序,首先通过检测外接的INT0、INT1开关来判断当前的报时是选择用户自定义报时间表还是常规报时处理,在常规报时处理时,是选用夏季作息时间表,还是冬季作息时间表,并判断当天是否是周日或周六(休息日不报时)。
然后将当前时间(计时缓溃区的值)与预设的报时时间(报时设置寄存区的值)比较,二者完全相同时,启动报时处理子程序,并置位报时标志F0,在定时中断服务程序中进行扩音机预热延时和音乐输出驱动等处理。
6)拆字程序与合字程序。
如前所述,拆字程序的功能是将3字节计时缓冲区中的星期、时、分压缩BCD码拆分为5字节(星期值占有1字节,时、分各占有2字节)BCD码并刷新显示缓冲区,合字程序的功能是将键盘设置缓冲区中的5位BCD码合并为3位压缩BCD码,送入计时缓溃区或用户自设定报时值设定报时值寄存区。
下面分别对各程序模块进行介绍。
1)主程序。
主程序流程图如图2
2)LED数码管扫描显示程序模块
3)键盘扫描程序模块
4)键值处理程序模块
5)报时处理程序模块流程图
N
YN
Y
报时处理程序模块流程图
6)时处理模块(中断服务程序,流程图如下图)
A
第4节程序清单
4.1主程序模块(MAIN)在主程序模块中,先对各端口进行初始化,对内部RAM区清零,设置堆栈和定时器初值,关闭显示器,启动定时及其中断。
然后检测时钟分值变更标志位F3是否建立,如果已建立,则进行报时处理,否则再检测有无按键按下,若有则进行按键处理,无则返回循环点。
ORG000H
START:
AJMPMAIN;跳转入主程序0030H
ORG000BH
AJMPCTCINT;跳转到定时器T0的中断服务程序入口
ORG0030H
MAIN:
NOP;主程序入口地址:
0030H
NOP
NOP
MOVA,#OFFH;关闭各输出口
MOVP0,A;P0口为字形口,低电平有效
MOVP1,A;P1口作为6个键输入口
MOVP2,A;P2口是字位口,低电平有效
MOVP3,A;P3口报时方式控制和驱动输出口
SETBT0;关闭报时音乐输出(T0=1)
SETBT1;关闭报时扩音机电源(T1=1)
CJNESP,#07H,NOT1;SP/07H,是软件陷阱转来,不进行RAM清零
MOVR0,#7FH
MOVR1,#7DH;否则RAM清零初始化
CLRA
LOOP0:
MOV@R0,A
DECR0
DJNZR1,LOOP0;从内部RAM区03H到7FH均清零
NOT1:
MOVSP,#60H;设置栈指针
MOVIP,#02H;设置定时器T0为最高中断优先级
MOVIE,#82H;定时器T0开中断
MOVTMOD,#01H;设置定时器T0为方式1
MOVTL0,#0B0H;设置定时器T0初值
MOVTH0,#3CH
SETBTR0;启动定时
NOP
NEXTT:
NOP
MOVSP,#60H;重置堆栈底位置
LCALLDISP;调用显示子程序
NOP;检测标志是否出现,F3为定时分钟值变化的标志位
JNB0F3H,NEXT1;F3=0,则转键扫描,判断有无键按下
NOP;F3=1,调用报时处理子程序
SETBINT0
JNBINT0,USERS;如INTO=0,则调用用户自设定报时点
LCALLTIMERA;INTO=1,调用TIMERA,按作息时间表报时
USERS:
NOP
LCALLTIMERB;TIMERB为用户自设定报时点报时
NOP
NEXT1:
LCALLCHECKEY;调用按键扫描子程序,判断有无键按下
JZNEXTT;无键按下,返回重新扫描
NOP
LCALLKEYACC;有键按下,调用按键处理子程序
NOP
SJMPNEXTT
NOP
NOP
4.2定时中断服务程序模块该多好模块完成下述工作:
①对100毫秒(20H)、秒(21H)、分(22H)、小时(23H)及星期计数单元(24H)进行累计计数,如果分值有计数变化并且无键按下,则将当前的星期、小时和分钟送显示缓冲区更新显示目录;②如有报是处理标志,则对报时扩音机电源和报时音乐输出分别进行定时控制。
CTCINT:
NOP;T0的中断服务子程序
MOVTL0,#0B4H;设置定时器T0初值
MOVTH0,#3CH
PUSHACC;保护主程序现场数据
PUSHPSW
NOP
SETBRS0;选择新的工作寄存器区(1区)
CLRRS1;SELECT1AREA
INC20H;0.1S单元加1
MOVA,20H
JBOF4H,LCA;(F4H)为键处理标志位,在键处理过程中不显示秒点
CJNEA,#05H,CTNUC
CTNUC:
JCLC2;小于0.4S则秒点闪亮,大于0.4S则秒点熄灭
CLR6CH
SJMPLCA
LC2:
SETB6CH
LCA:
CJNEA,#0AH,RTNH;未计满1S则退出中断
MOV20H,#00H;毫秒计数单元清零
JNB0F0H,NEXTE;F0H=1为报时扩音机预热延时标志位
MOVA,25H;(25H)中存放报时扩音机预热延时时间值
JNZNEXTF
CLROFOH
CLROFOH
SETBOF1H
MOV26H,#1OH;(26H)中存放报时放音的延时时间值
CLRTO
NEXTE:
JNBOF1H,NEXTF;(F1H=1)为报时放音的延时标志位
MOVA,26H
DECA
MOV26H,A
JNZNEXTF;判断报时放音延时是否结束
CLROF1H;延时时间到,清除报时放音标志位,关闭报时电源
SETBT1
SETBT2
SETBTO
SETBTO
NOP
NEXTF:
NOP
MOVA,21H;对秒计数单元(21H)进行累计计数
ADDA,#01H
DAA
MOV21H,A
CJNEA,#06H,RTNH;判断分计数是否计满
CLRA
MOV21H,A
SETB0F3H;(F3H)为分值有变更标志位
NEXT:
MOVA,22H;对分(22H)进行累计计数
ADDA,#01H;
DAA
MOV22H,A
CJNEA,#60H,RTDN
MOV22H,#00H
MOVA,23H
ADDA,#01H;时单元加1
DAA
MOV23H,A;对时(23H)进行累计计数
CJNEA,#24H,TRND
MOV23H,#00H
MOVA,24H
ADDA,#01H;星期计数单元(24H)加1
DAA
MOV24H,A
CJNEA,#07H,RTDN
MOV24H,#00H
RTDN:
NOP
JNBOF3H,RTDH;确认(F3=0)分值无变更,则返回
JBOF4H,RTNH;确认(F4=0)正在键处理,则返回
LDDA:
NOP;将当前的时间值显示缓冲区
NOP
MOVR0,#24H;(24H、23H、22H、)送(2FH~2BH)
MOVR1,#2FH
MOVR2,#02H
MOVA,@R0
ANLA,#0FH
MOV@R1,A
DECR0
DECR1
LD1:
MOVA,@R0;将1字节压缩的BCD码拆成两个字节,数数值存放在低字节内
ANLA,#OF0H
SWAPA
MOV@R1,A
DECR1
MOVA,@R0
ANLA,#0FH
MOV@R1,A
DECR0
DECR1
DJNZR2,LD1
NOP
RTNH:
NOP;中断返回,并恢复现场数据
NOP
POPPSW
POPACC
RETI
4.3扫描显示模块该模块为5位LED扫描显示模块。
P0口为字形码输出口,低电平有效;P2口为字位码输出口,高电平有。
显示缓冲区为2FH~2BH等5个字节,2FH存放显示的星期数,2EH、2DH存放显示的小时数,2CH、2BH存放显示的分钟数,其数值范围在00H~0FH内时不显示该位的小数点,在10H~1FH时则显示小数点。
DISP:
NOP;DISP为显示子程序
NOP
MOVA,#00H;关闭显示
MOVP2,A;P2口为字位码输出口
MOVA,#0FFH
MOVP0,A;P0口为字形码输出口
NOP
NOP
MOVR0,#2FH;显示子程序
NOP逻辑
MOVR1,#10H;位控制字
LOOP1:
MOVA,R1
NOP
MOVP2,A;输出位控制字
MOVP2,A
MOVDPTR,#TABLE
MOVA,@R0;取显示缓冲区中的显示字符数
MOVCA,@A+DPTR;查表转换成字型代码
CPLA
MOVP0,A;输出字形码
MOVR2,#00H
LOOP2:
DJNZR2,LOOP2;延时2MS
DECR0;显示下一个字符
MOVA,R1
CLRC
RRCA
MOVR1,A
JNZLOOP1;判断5位扫描显示一遍是否完成
RET
NOP
NOP
TABLE:
DB3FH,06H,5BH,4FH,66H,7DH,07H;不带小数点时的字符显示字形表
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H;带小数点时的字符显示字形表
DB0FFH,0EFH、0F7H,0FCH,0B9H,0F9H,0F1H
NOP
4.4键扫描子程序检测P1口,判断是否有键按下,如有键按下,进进行延时去抖动并读取键值,存入A中。
CHECKEYA:
NOP;键扫描子程序
NOP
NOP
MOVP1,#0FFH
MOVA,P1;判断是否有键按下
CPLA
ANLA,#3FH
JZRETX
LCALLDISP;延时去抖动
LCALLDISP
MOVA,P1
CPLA
ANLA,#3FH
JZRETX
MOVR6,A;当前值存放在R6中
K1:
LCALLDISP;等待释放按键
MOVA,P1
CPLA
ANLA,#3FH
JNZK1
MOVA,R6
NOP
NOP
RETX:
RET
NOP
i.用户自设定报时时间点置入键程序模块。
将显示缓冲区2FH~2BH中的内容压缩后存入40H为首地址的片内RAM中,其中2FH为定时时间点的编号,2EH、2DH为小时值,2CH、2BH为分钟数值。
USESET:
NOP
MOVR0,#2FH
MOVR1,#40H;本次用户设定报时点首址为40H
MOVA,@R0
ANLA,#OFH
RLA
ADDA,R1;报时点编号乘2加首址,为本次存放的实际地址
MOVR1,A
DECR0
NOP;定时设定时间置入子程序
NOP
MOVR2,#02H
LDD:
MOVA,@R0;将小时和分钟值压缩后存入相应单元中
ANLA,#0FH
SWAPA
MOVR7,A
DECR0
MOVA,@R0
ANLA,#0FH
ADDA,R7
MOV@R1,A
DECR0
INCR1
DJNZR2,LDD
NOP
CLR0F4H
NOP
RET
NOP
ii.减1键处理。
在小数点点亮的对应位上进行十进制减1处理。
SUBONE:
NOP
NOP
JNB7CH,SCH74
MOVR0,#2FH
SJMPSUB1
SCH74:
N
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 报时 定时 控制系统