单片机课程设计之自动打铃系统

更新时间:2023-04-06 22:45:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机课程设计之自动打铃系统

这是我们本学期的单片机课程设计题目,程序就是在昨天的数字钟的基础上增加了一些内容,不想继续做了,还有一门考试要复习。

设计一台自动打铃系统

一、设计任务

用单片机器件为主体,设计一台自动打铃系统。

(1)按照设计标准,画出系统框图和系统硬件电路图。

(2)完成该课题的程序设计,提交程序设计框图及程序设计清单。

(3)提交课程设计报告

二、设计要求

(一)基本要求

(1)基本计时和显示功能(用12小时制显示)。包括上下午标志,时、分的数字显示,秒信号指示。

(2)能设置当前时间(含上、下午,时,分)

(3)能实现基本打铃功能,规定:

上午6:00起床铃:打铃5秒、停2秒、再打铃5秒。

下午10:30熄灯铃:打铃5秒、停2秒、再打铃5秒。

铃声可用小喇叭播放,凡是用到铃声功能的均按此处理

(二)发挥部分

(1)增加整点报时功能,整点时响铃5秒,要求有控制启动和关闭功能。

(2)增加调整起床铃、熄灯铃时间的功能。

(3)增设上午4节课的上下课打铃功能,规定如下:

7.30 上课,8.20下课:8.30上课,9.20下课;9.40 上课,10.30下课;10.40上课,11.30下课;每次铃声5秒。

(4)特色和创新自选。

三、设计步骤

(1)设计能正常工作的一个单片机最小硬件系统,外围电路包括设置键盘,LCD或LED的显示屏;

(2)进行软件设计,利用单片机系统时钟先设计一个高精度的内部时钟系统,最小精确时间为期1秒;

(3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能;

(4)设计打铃执行机构,完成自动打铃功能。

四、课程设计说明书要求

后面略......

公开我的主要设计资料:

主程序流程图:

汇编程序清单:

/***************************************************************

程序名称:51单片机自动打铃系统

简要说明:实现24小时制电子钟,8位数码管显示,显示时分秒显示格式:23-59-59(小时十位如果为0则不显示)

到预定时间启动蜂鸣器模拟打铃,蜂鸣器BEEP:P3.7

打铃方式分起床、熄灯铃和上、下课铃两种

系统使用4只按键,3只按键用来调整时间,fpc连接器,防水连接器,连接器论坛,供应另一只为强制打铃按钮

调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁

增加键ADD_KEY:P1.1;按一次使选中位加1

减少键DEC_KEY;P1.2;按一次使选中位减1

如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁如果选中位是秒,则按增加键或减少键都是将秒清零

强制打铃键DALING_KEY:P1.3;用来强制打铃或强制关闭铃声

P0口输出数码管段选信号,P2口输出数码管位选信号。晶振12M

编写:05e124c0cd1755270722192e453610661ed95ab2

最后更新:09/1/2晚

***************************************************************/ BEEP EQU P3.7;定义蜂鸣器(电铃)控制信号输出口

ORG 0000H;程序入口地址

LJMP START

ORG 000BH;定时器0中断入口地址

LJMP TIMER_0

ORG 0300H

/*****程序开始,初始化*****/

START:

SETB BEEP;关闭蜂鸣器(电铃)

SETB 48H;使用一个bit位用于调时闪烁标志

SETB 47H;使用一个bit位用于产生脉冲用于调时快进时基

CLR 45H;关闭响铃方式1标志

CLR 44H;关闭响铃方式2标志

MOV R1,#0;调整选择键功能标志:0正常走时、1调时、2调分、3调秒

MOV 20H,#00H;用于控制秒基准时钟源的产生

MOV 21H,#00H;清零秒寄存器

MOV 22H,#00H;清零分寄存器

MOV 23H,#00H;清零时寄存器

MOV 24H,#00H;用于控制调时闪烁的基准时钟的产生

MOV IP,#02H;IP,IE初始化

MOV IE,#82H

MOV TMOD,#01H;设定定时器0工作方式1

MOV TH0,#3CH

MOV TL0,#0B0H;赋定时初值,定时50ms

SETB TR0;启动定时器0

MOV SP,#40H;重设堆栈指针

/*****主程序*****/

MAIN:

CJNE R1,#00H,MAIN1;是否为正常走时状态

LCALL BIJIAO1;调用起床、熄灯打铃比较子程序

LCALL BIJIAO2;调用上、下课打铃比较子程序

LCALL DALING1;调用响铃方式1执行子程序

LCALL DALING2;调用响铃方式2执行子程序

MAIN1:

LCALL DISPLAY ;调用显示子程序

LCALL KEY_SCAN ;调用按键检测子程序

JZ MAIN;无键按下则返回重新循环

LCALL SET_KEY ;调用选择键处理子程序

JB 46H,MAIN;如果已进行长按调整(调时快进),则不再执行下面的单步调整

LCALL ADD_KEY;调用增加键处理子程序

LCALL DEC_KEY;调用减少键处理子程序

LCALL DALING_KEY;处理强制打铃/强制关闭铃声键

LJMP MAIN ;重新循环

/*****定时中断服务程序*****/

TIMER_0:

PUSH ACC

PUSH PSW ;保护现场

MOV TH0,#3CH

MOV TL0,#0B0H ;重新赋定时初值

CPL 47H;产生脉冲用于调时快进时基

INC 24H

MOV A,24H

CJNE A,#10,ADD_TIME;产生0.5秒基准时钟,用于调时闪烁

CPL 48H;取反调时闪烁标志位

MOV 24H,#00H

ADD_TIME:

INC 20H

MOV A,20H

CJNE A,#20,RETI1;产生1秒基准时钟MOV 20H,#00H ;一秒钟时间到,清零20H MOV A,21H

ADD A,#01H

DA A ;作十进制调整

MOV 21H,A

CJNE A,#60H,RETI1

MOV 21H,#00H ;一分钟到

MOV A,22H

ADD A,#01H

DA A

MOV 22H,A

CJNE A,#60H,RETI1

MOV 22H,#00H ;一小时到

MOV A,23H

ADD A,#01H

DA A

MOV 23H,A

CJNE A,#24H,RETI1

MOV 23H,#00H ;到24点,清零小时

RETI1:

POP PSW

POP ACC ;恢复现场

RETI ;中断返回

/*****显示处理*****/

DISPLAY:

MOV A,21H ;秒

ANL A,#0FH

MOV 2FH,A;转换出秒个位,存入2FH MOV A,21H

ANL A,#0F0H

SWAP A

MOV 2EH,A;转换出秒十位,存入2EH

JB 46H,MIN;如果长按按键(调时快进),则跳过闪烁处理CJNE R1,#3,MIN;如果R1为3,闪烁秒位待调整

JB 48H,MIN

MOV 2FH,#0AH;使该位为10,查表得到使该位不显示的输出MOV 2EH,#0AH

MIN:

MOV A,22H ;分

ANL A,#0FH

MOV 2DH,A;转换出分个位,存入2DH

MOV A,22H

ANL A,#0F0H

SWAP A

MOV 2CH,A;转换出分十位,存入2CH

JB 46H,HOUR;如果长按按键(调时快进),则跳过闪烁处理CJNE R1,#2,HOUR;如果R1为2,闪烁分位待调整

JB 48H,HOUR

MOV 2DH,#0AH;使该位为10,查表得到使该位不显示的输出MOV 2CH,#0AH

HOUR:

MOV A,23H ;时

ANL A,#0FH

MOV 2BH,A;转换出时个位,存入2BH

MOV A,23H

ANL A,#0F0H

SWAP A

MOV 2AH,A;转换出时十位,存入2AH

JB 46H,DISP;如果长按按键(调时快进),则跳过闪烁处理CJNE R1,#1,DISP;如果R1为1,闪烁时位待调整

JB 48H,DISP

MOV 2BH,#0AH;使该位为10,查表得到使该位不显示的输出MOV 2AH,#0AH

/*****数码管动态扫描显示*****/ DISP:

MOV DPTR,#TABLE

MOV A,2FH

MOVC A,@A+DPTR

MOV P0,A

CLR P2.7

LCALL DELAY

SETB P2.7;显示秒个位

MOV A,2EH

MOVC A,@A+DPTR

MOV P0,A

CLR P2.6

LCALL DELAY

SETB P2.6;显示秒十位

MOV A,#0BFH

MOV P0,A

CLR P2.5

LCALL DELAY

SETB P2.5;显示“-”

MOV A,2DH

MOVC A,@A+DPTR

MOV P0,A

CLR P2.4

LCALL DELAY

SETB P2.4;显示分个位

MOV A,2CH

MOVC A,@A+DPTR

MOV P0,A

CLR P2.3

LCALL DELAY

SETB P2.3;显示分十位

MOV A,#0BFH

MOV P0,A

CLR P2.2

LCALL DELAY

SETB P2.2;显示“-”

MOV A,2BH

MOVC A,@A+DPTR

MOV P0,A

CLR P2.1

LCALL DELAY

SETB P2.1;显示时个位

MOV DPTR,#TABLE1;该位使用TABLE1以消除前置0 MOV A,2AH

MOVC A,@A+DPTR

MOV P0,A

CLR P2.0

LCALL DELAY

SETB P2.0;显示时十位

RET

/*****按键检测子程序*****/

KEY_SCAN:

CLR 46H;关闭长按调整(调时快进)标志

MOV P1,#0FFH ;将P1口设置成输入状态

MOV A,P1

CPL A

ANL A,#0FH ;P1口低4位连接4个按键,只判断该4位JZ EXIT_KEY ;无键按下则返回

LCALL DELAY;延时去抖动

MOV A,P1;重新判断

CPL A

ANL A,#0FH

JZ EXIT_KEY ;键盘去抖动

MOV R5,A ;临时将键值存入R5

MOV R4,#00H;用于控制调时快进速度

;设置为00H是为了在进入长按处理前加长延时区分用户的长按与短按,防止误快进

LOOP:;进入长按处理

LCALL DISPLAY;使长按时显示正常

MOV A,P1

CPL A

ANL A,#0FH

JB 47H,LOOP1

INC R4;调时快进间隔时间基准加1

LOOP1:

CJNE R1,#03H,LOOP2;如果调秒时长按,则不处理

LJMP LOOP3

LOOP2:

CJNE R4,#99H,LOOP3

MOV R4,#70H;确认用户长按后,重新设定起始值,加快调时快进速度

SETB 46H;长按调整(调时快进)标志

LCALL ADD_KEY

LCALL DEC_KEY

LOOP3:

JNZ LOOP ;等待键释放

MOV A,R5;输出键值

RET

EXIT_KEY:

RET

/*****延时子程序*****/

DELAY:

MOV R7,#150

DJNZ R7,$

RET

/*****选择键处理子程序*****/

SET_KEY:

CJNE R5,#01H,EXIT;选择键键值

INC R1;调整选择功能标志加一

SETB BEEP

CJNE R1,#4,EXIT

MOV R1,#0

MOV 24H,#00H;调时闪烁基准清零

RET

/*****增加键处理子程序*****/

ADD_KEY:

CJNE R5,#02H,EXIT;增加键键值

CJNE R1,#01H,NEXT1;选择键功能标志为1,调时,否则跳出MOV A,23H

ADD A,#01H

DA A

MOV 23H,A

CJNE A,#24H,EXIT

MOV 23H,#00H

NEXT1:

CJNE R1,#02H,NEXT2;选择键功能标志为2,调分,否则跳出MOV A,22H

ADD A,#01H

DA A

MOV 22H,A

CJNE A,#60H,EXIT

MOV 22H,#00H

NEXT2:

CJNE R1,#03H,EXIT;选择键功能标志为3,调秒,否则跳出MOV 21H,#00H;如增加键按下直接清零秒

RET

/*****减少键处理子程序*****/

DEC_KEY:

CJNE R5,#04H,EXIT;减少键键值

CJNE R1,#01H,NEXT3;选择键功能标志为1,调时,否则跳出MOV A,23H

ADD A,#99H

DA A

MOV 23H,A

CJNE A,#99H,EXIT

MOV 23H,#23H

NEXT3:

CJNE R1,#02H,NEXT4;选择键功能标志为2,调分,否则跳出MOV A,22H

ADD A,#99H

DA A

MOV 22H,A

CJNE A,#99H,EXIT

MOV 22H,#59H

NEXT4:

CJNE R1,#03H,EXIT;选择键功能标志为3,调秒,否则跳出MOV 21H,#00H;如较少键按下直接清零秒

RET

/*****强制响铃键处理子程序*****/

DALING_KEY:

CJNE R5,#08H,EXIT;选择键键值

CPL BEEP

RET

/*****万用返回程序*****/

EXIT:

RET

本文来源:https://www.bwwdw.com/article/g4vl.html

Top