单片机课程设计校园作息时间系统Word文档下载推荐.docx

上传人:b****3 文档编号:6360544 上传时间:2023-05-06 格式:DOCX 页数:49 大小:1.75MB
下载 相关 举报
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第1页
第1页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第2页
第2页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第3页
第3页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第4页
第4页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第5页
第5页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第6页
第6页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第7页
第7页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第8页
第8页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第9页
第9页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第10页
第10页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第11页
第11页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第12页
第12页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第13页
第13页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第14页
第14页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第15页
第15页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第16页
第16页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第17页
第17页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第18页
第18页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第19页
第19页 / 共49页
单片机课程设计校园作息时间系统Word文档下载推荐.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计校园作息时间系统Word文档下载推荐.docx

《单片机课程设计校园作息时间系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机课程设计校园作息时间系统Word文档下载推荐.docx(49页珍藏版)》请在冰点文库上搜索。

单片机课程设计校园作息时间系统Word文档下载推荐.docx

P3。

2接用户自设定报时/作息时间报时的选择开关,开关闭合(P3。

2为低电平)时,仅对用户自设定的时间点进行报时;

开关断开时,则进行固定的作息时间表报时。

P3。

3端口接夏令/冬令作息时间表,P3。

3=1时选择择冬令作息时间表。

4端口外接光电隔离器,驱动扩音机电源的控制开关,低电平有效。

图2.1单片机原理框图

2.2系统工作流程

本单片机报时控制系统具备以下功能:

时钟显示。

5位LED从左到右依次显示时、分,采用24H计时。

图2.2时间显示图

(4)键盘功能。

采用4个独立按键,包括:

移位键、加1键、减1键、校时置入键。

(5)移位键:

(P1。

0=0)每按动移位键一次,小数点从左向右移动1位。

(6)加1键:

1=0)对小数点所在位的数什进行十进制加1。

(7)减1键:

(P1。

2=0)对小数点所在位的数值进行十进制减1。

(8)校时置入键:

3=0)将显示的时间值置入实时时钟的计时缓冲区。

图2.3键盘功能

(9)扬声器驱动电路:

图2.4扬声器驱动电路

2.3系统的使用说明

(1)时间显示。

通电后,系统自动进入时钟显示,从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

表1:

地址

功能

名称

初始化值

2FH~2BH

显示缓冲区,星期、小时、分(高位在前)

DISP0~DISP4

00H

24H~20H

计时缓冲区,星期、时、分、秒、100ms

WEEK,HOUR,MIN,SEC,MSEC

40H~53H

用户报时时间值寄存区(时、分)

AHOUR、AMIN

61H~7FH

堆栈区

F0H

报时开始标志位

F1H

放音开始标志位

F3H

分钟值变更标志位

F4H

键处理标志位

25H

扩音机预热时间

26H

播放报时音乐时间

(2)软件流程。

根据上述工作流程,软件设计可分为以下几个功能模块:

1)主程序:

初始化与键盘监控。

2)计时:

为定时器0中断服务子程序,完成刷新计时缓冲区的功能。

3)时间设置与报时设置:

由键盘输入设置当前时间与定时启闭时间。

4)显示:

完成5位LED动态显示。

5)键盘扫描:

判断是否有键按下,并求取键号。

6)定时比较:

判断报时时间到否,如时间到,则启动报时处理程序。

7)其他辅助功能程序,如键盘设置、拆字、合字、冬季或夏季时间表选择及假日停止报时等。

第4章程序模块设计

程序的模块设计非常重要,有很多功能的程序,列表如表2

表2:

主程序

程序的主体,调用其他子程序

定时中断服务程序

进行秒,分,时的累计计数,到时间到时,驱动蜂鸣器及继电器

显示模块

P0口作为段码,P2口作为位码输出,控制数码管。

键扫描子程序

检测P1口,判断是否有键按下,如有键按下,进进行延时去抖动并读取键值,存入A中

键值处理子程序

判断A中的值,根据A来选择调用哪个子程序

4.1主程序模块(MAIN)

在主程序模块中,先对各端口进行初始化,对内部RAM区清零,设置堆栈和定时器初值,关闭显示器,启动定时及其中断。

然后检测时钟分值变更标志位F3是否建立,如果已建立,则进行报时处理,否则再检测有无按键按下,若有则进行按键处理,无则返回循环点。

ORG0000H

START:

AJMPMAIN;

跳转入主程序0030H

ORG000BH

AJMPCTCINT;

跳转到定时器T0的中断服务程序入口

ORG0030H

MAIN:

NOP;

主程序入口地址:

0030H

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

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:

重置堆栈底位置

LCALLDISP;

调用显示子程序

NOP;

检测标志是否出现,F3为定时分钟值变化的标志位

JNB0F3H,NEXT1;

F3=0,则转键扫描,判断有无键按下

F3=1,调用报时处理子程序

SETBINT0

JNBINT0,USERS;

如INTO=0,则调用用户自设定报时点

LCALLTIMERA;

INTO=1,调用TIMERA,按作息时间表报时

USERS:

LCALLTIMERB;

TIMERB为用户自设定报时点报时

NEXT1:

LCALLCHECKEY;

调用按键扫描子程序,判断有无键按下

JZNEXTT;

无键按下,返回重新扫描

LCALLKEYACC;

有键按下,调用按键处理子程序

SJMPNEXTT

4.2定时中断服务程序模块

该多好模块完成下述工作:

①对100毫秒(20H)、秒(21H)、分(22H)、小时(23H)进行累计计数,如果分值有计数变化并且无键按下,则将小时和分钟送显示缓冲区更新显示目录;

②如有报是处理标志,则对报时扩音机电源和报时音乐输出分别进行定时控制。

CTCINT:

NOP;

T0的中断服务子程序

MOVTL0,#0B4H;

PUSHACC;

保护主程序现场数据

PUSHPSW

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,#0EH,RTNH;

未计满1S则退出中断

MOV20H,#00H;

毫秒计数单元清零

JNB0F0H,NEXTE;

F0H=1为报时扩音机预热延时标志位

MOVA,25H;

(25H)中存放报时扩音机预热延时时间值

JNZNEXTF

CLROFOH

SETBOF1H

MOV26H,#1OH;

(26H)中存放报时放音的延时时间值

CLRTO

NEXTE:

JNBOF1H,NEXTF;

(F1H=1)为报时放音的延时标志位

MOVA,26H

DECA

MOV26H,A

JNZNEXTF;

判断报时放音延时是否结束

CLROF1H;

延时时间到,清除报时放音标志位,关闭报时电源

SETBT1

SETBT2

SETBTO

NEXTF:

MOVA,21H;

对秒计数单元(21H)进行累计计数

ADDA,#01H

DAA

MOV21H,A

CJNEA,#06H,RTNH;

判断分计数是否计满

SETB0F3H;

(F3H)为分值有变更标志位

NEXT:

MOVA,22H;

对分(22H)进行累计计数

ADDA,#01H;

MOV22H,A

CJNEA,#60H,RTDN

MOV22H,#00H

MOVA,23H

ADDA,#01H;

时单元加1

MOV23H,A;

对时(23H)进行累计计数

CJNEA,#24H,TRND

MOV23H,#00H

MOVA,24H

星期计数单元(24H)加1

MOV24H,A

CJNEA,#07H,RTDN

MOV24H,#00H

RTDN:

JNBOF3H,RTDH;

确认(F3=0)分值无变更,则返回

JBOF4H,RTNH;

确认(F4=0)正在键处理,则返回

LDDA:

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

MOVA,@R0

ANLA,#0FH

DJNZR2,LD1

RTNH:

中断返回,并恢复现场数据

POPPSW

POPACC

RETI

4.3扫描显示模块

该模块为5位LED扫描显示模块。

P0口为字形码输出口,低电平有效;

P2口为字位码输出口,高电平有。

显示缓冲区为2FH~2BH等5个字节,2FH存放显示的星期数,2EH、2DH存放显示的小时数,2CH、2BH存放显示的分钟数,其数值范围在00H~0FH内时不显示该位的小数点,在10H~1FH时则显示小数点。

DISP:

DISP为显示子程序

NOP

MOVA,#00H;

关闭显示

MOVP2,A;

P2口为字位码输出口

MOVA,#0FFH

P0口为字形码输出口

MOVR0,#2FH;

显示子程序

MOVR1,#10H;

位控制字

LOOP1:

MOVA,R1

输出位控制字

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

TABLE:

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H

DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H;

带小数点时的字符显示字形表

DB0FFH,0EFH、0F7H,0FCH,0B9H,0F9H,0F1H

4.4键扫描子程序

检测P1口,判断是否有键按下,如有键按下,进进行延时去抖动并读取键值,存入A中。

CHECKEYA:

MOVP1,#0FFH

MOVA,P1;

判断是否有键按下

ANLA,#3FH

JZRETX

LCALLDISP;

延时去抖动

LCALLDISP

MOVA,P1

MOVR6,A;

当前值存放在R6中

K1:

LCALLDISP;

等待释放按键

JNZK1

MOVA,R6

RETX:

RET

i.用户自设定报时时间点置入键程序模块。

将显示缓冲区2FH~2BH中的内容压缩后存入40H为首地址的片内RAM中,其中2FH为定时时间点的编号,2EH、2DH为小时值,2CH、2BH为分钟数值。

USESET:

MOVR0,#2FH

MOVR1,#40H;

本次用户设定报时点首址为40H

ANLA,#OFH

RLA

ADDA,R1;

报时点编号乘2加首址,为本次存放的实际地址

定时设定时间置入子程序

LDD:

MOVR7,A

ADDA,R7

INCR1

DJNZR2,LDD

CLR0F4H

ii.减1键处理。

在小数点点亮的对应位上进行十进制减1处理。

SUBONE:

JNB7CH,SCH74

SJMPSUB1

SCH74:

JNB74H,SCH6C

MOVR0,#2EH

SCH6C:

JNB6CH,SCH64

MOVR0,#2DH

SCH5C:

NOP

JNB64H,SCH5C

MOVRO,#2CH

JNB5CH,ERR1

MOVR0,#2BH

ERR1:

SUB1:

ADDA,#99H

XCHDA,@R0

iii.用户自设定报时时间点显示键处理模块。

由(2FH)指定的用户自设定报时点编号,计算其在RAM中存放的地址,再根据此地址找出该报时时间点的2个字节码,将其4个半字节分别存入2EH~2BH单元低半字中。

DSPUSE:

自设定报时点编号由(2FH)指定

MOVR1,#40H;

用户设定报时点首址为40H

ADDA,R1;

报时点编号乘2加首址,为其存放的实际地址

取定时设定时间并置入显示缓冲区

LDR:

MOVA,@R1;

将小时和分钟值解压缩后装入相应显示单元中

DJNZR2,LDR

4.5键值处理子程序

KEYACC:

按键处理子程序

JBACC.0,SHIFTP;

是移位功能键转SHIFTP

JBACC.1,ADDONE;

是加1键,转ADDONE

JBACC.2,SUBONE;

是减1键,转SUBONE

JBACC.3,TIMSET;

是时钟校对键转TIMSET

JBACC.4,USESET;

设置用户定时时间点

JBACC.5,DSPUSE;

显示用户定时时间点

iv.加1键处理程序。

在小数点点亮的对应位上进行十进制加1处理。

ADDONE:

JNB7CH,SECH74

SJMPADD1

SECH74:

JNB74H,SECH6C

SECH64C:

JNP6CH,SECH64

ERR2:

RET

ADD1:

v.校时时间置入程序模块。

将设定的时间值置入相应的时间计数单元,并以该时间为起点开始计时。

TIMSET:

校时时间置入程序段

MOVR1,#24H

MOVA,·

R0

ANLA,0FH

MOV21H,#00H

4.6移位键处理程序模块

将小数点从左向右依次移动1位。

小数点移动哪一位,那一位便可用加1或减1键进行修改数值。

小数点如移到最右边1位,若再按1次移位键,小数点自动返回到最左边一位上。

SHIFTP:

JB0F4H,NXT

ERR:

SETB0F4H

SETB5CH

NXT:

JNB7CH,CHK74

CLR7CH

SETB74H

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2