单片机自动控制打铃系统设计.docx
- 文档编号:26065699
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:28
- 大小:70.71KB
单片机自动控制打铃系统设计.docx
《单片机自动控制打铃系统设计.docx》由会员分享,可在线阅读,更多相关《单片机自动控制打铃系统设计.docx(28页珍藏版)》请在冰豆网上搜索。
单片机自动控制打铃系统设计
单片机自动控制打铃系统,是以一片8位单片机为核心的实时时钟及控制系统.我们知道单片机的外接石英晶体震荡器能提供稳定、准确的基准频率,并经12分频后向内部定时器提供实时基准频率信号,设定定时器工作在中断方式下,连续对此频率信号进行分频计数,便可得到秒信号,再对秒信号进行计数便可得到分、时等实时时钟信息.如果石英晶体震荡器的频率信号为6MHZ,设定定时器定时器工作在方式1下,定时器为3CB0H,则定时器每100ms产生1次中断,在定时器的中断定时处理程序中,每10次中断,则向秒计数器加1,秒计数器计数到60则向分计数器进位(并建立分进位标志),分计数器计数到60,则向时计数器进位,如此周而复始的连续技术,便可获得时、分、秒的信号,建立一个实时时钟.接下来便可以进行定时处理和打铃输出,当主程序检测到有分进位标志时,便开始比较当前时间(小时与分、存放在RAM中)与信息时间表上的作息时间(小时与分,存放在ROM)是否相同,如有相同者,则进行报时处理并控制打铃,如有不相同则返回主程序,如此便实现了报时控制的要求.
2.2ISP下载电缆的电路及程序设计简介
能实现ISP功能的硬件电路,通常被称为“下载电缆”。
ATMEL公司推出的AT89S51/52单片机就具有ISP功能。
用计算机并行口实现ISP功能,在电路设计上非常灵活。
(1)下载电缆的电路设计:
计算机并行接口共有25个口线,主要包括数据端口D0~D7(端口地址为378H,用于数据输出);状态端口Busy、nAck、PE、Select、nError(端口地址为379H,用于数据输入);控制端口nSelin、nlnit、nStrobe(端口地址为37AH,用于输出控制)。
从中选出4个口线来模拟ISP所需的引脚,就非常灵活,只需考虑数据的输入、输出方向及操作方便即可。
但要注意同一端口的数据方向必须一致,例如数据端口是8位同时操作的,只能全部作为输入或输出,而不能将一部分做输入,另一部分做输出。
下载电缆的电路如图附件一所示。
该电路主要包括并行接口电路、驱动隔离电路和JTAG接口电路3大部分,这里只所以说JTAG接口电路,是因为ISP传输虽然在协议上符合SPI协议,但引脚是按照JTAG标准而定义的,它们的对应关系如下:
TCK对应SCK,D0对应MOSI,TMS对应RST,TDO对应MISO。
(2)并行接口电路
该电路是按计算机并行口标准定义的,在电路中采用nStrobe模拟TCK,用D0模拟TDI,用nSelin模拟TMS。
用nACK模拟TDO。
这样的定义方法就决定了TCK时钟和TMS的产生要由并行口的控制端口产生;TDI由并行口的数据端口产生,TDO要由状态端口获取,不同的端口操作地址不同,涉及程序的编写。
这些对应关系见表:
并行口引脚
并行口端口地址
nACK
379H
D0
378H
nSelin
37AH
nStrobe
37AH
(3)驱动隔离电路
该电路采用74HC244作为驱动隔离芯片。
74HC244具有2组驱动器,分别由1G和2G控制使用。
当控制引脚为低电平时,A到Y通路,可以进行数据传输,当控制引脚为高电平时A到Y相当断路,起到隔离作用。
图中R1~R14为限流电阻,防止电流过大烧毁驱动器芯片,R15~R18为上拉电阻,确保空闲时各个点的电平状态。
第三章设计内容及要求
3.1设计要求
设计一作息时间自动打铃控制系统,要求:
1、走时准确,日误时时钟的时、分、秒,用24小时制进行计时.
3、具有调节和校对时间的功能.
4、作息时间预制功能,最差≤±1S.
2、用6个数码显示实多可以预制36个打铃报时点.
5、具备定时打铃输出的功能.
6、掉电时有备用电池继续走时,不能停机.
3.2硬件设计
⑴、单片机选用AT89S51,它与8051系列单片机全兼容,但其内部带有4KB的FLASHROM,并支持在线编程技术,设计时无需外接程序存储器,样品可以直接与PC机连机下载程序,为设计和调试带来极大方便.
⑵、LED显示系统:
6位LED数码管从左至右依次显示时2位、分2为、秒2位,采用24小时制计时.设计时可利用单片机的P0口和P1口作为时钟信号输出,经驱动芯片后驱动数码管显示时间,LED采用动态方式显示.
⑶、键盘系统:
设置4个程序按键,包括:
选择键、调节键、打铃时间设定键、铃声选择键,键盘系统可由P2口构成.另需配置一个非程序按键:
系统复位键.
选择键:
按动选择键,可以选择小时、分钟或回复正常走时,选定的内容快速闪烁.
调节键:
按一次"调节键",所选定的内容加1,长按"调节键"(按下的时间超过1秒钟以上),则所选定的内容按每秒钟增加10的速度快速增加.当分钟增加到59、小时增加到23时,自动回到0,再丛开始增加.
打铃时间设定键:
将数码管的显示从走时状态转换到打铃时间设定状态,并根据所按该键的次数,显示相应的打铃时间"编组号".然后可以用"选择键"和"调节键"设定或修改该组的打铃时间.
铃声选择键:
从两种不同的打铃输出方式中选择一种铃声输出.
⑷、电源供电系统:
本系统采用220V的电源供电,应设计响应的稳压电源电路.当220V停电时,由备用电池向单片机供电,为了延长电池的工作时间,只需维持实时时钟的运行和计时,而耗电量较大的数码管显示系统和输出驱动等电路应停止工作.
⑸、打铃输出控制:
当实时时钟运行到报时点对应的时间时,应输出控制信号,一路信号使本系统的一个发光而极管发光,起提示作用;另一路信号通过继电器去控制电铃,使电铃自动打铃.打铃的铃声分两种:
1种是连续响铃,持续时间为10秒;另一种断续响铃,停1秒钟,持续时间也是10秒.
本系统的工作流程
⑴、时间显示:
通电或系统复位后,系统自动进入时钟显示,从00:
00:
00开始计时,此时可以设定当前时间.
⑵、时间校对:
用"选择键"和"调节键"来调节时间.第一次按"选择键"时,小时的两位数快速闪烁,这时可以用"调节键"来修改小时数.第二次按"选择键"时,分钟的两位数快速闪烁,这时可以用"调节键"来修改分钟数.第三次按"选择键"时,退出时间校对状态,按新的设定时间修复走时.
用"调节键"来修改所选定的内容时,则每按一次"调节键",所选定的内容加1,长按"调节键"(按下的时间超过1秒以上),则所选的内容按每秒增加10的速度快速增加.当分钟增加到59、小时增加到23时,自动回复到0,再从开始增加.
时钟设置正确后,再次按"选择键"(即第三次按"选择键"),时间校对从00开始计时.如在时间校对过程中,超过30秒时钟时间没按任何按键,则自动恢复原来的时间走时和显示.
⑶、打铃时间设置:
用户最多可以设定32组自动打铃时间点,当按动"打铃时间设定键"后,数码管显示01****,其中01(前2位)表示报时点的组别,其值从02到32,第三、四位为打铃时间的小时数,第五、六为打铃时间的分钟数.第一次按"打铃时间设定键"时,则显示"01──",01则表示第一组报时点,"──"表示该组的报时时间还未设置,为无效状态,此时可以用"选择键"、"调节键"来设置该组的打铃时间:
如显示的为"01****"(*表示具体是时间数据),表明该组的打铃时间已经设置,此时也可以用"选择键"、"调节键"来更改该组的打铃时间.当该组的打铃时间设置或更改完毕,按动"打铃时间设定键",可将该组的打铃时间数据存入RAM中,同时组别数据加1,如显示"02****"或"02──",然后可以对第二组的打铃时间数据进行修改或设置,再次按动"打铃时间设定键",则将第二组打铃时间存储起来,显示变为"03****"或"03──",再对第三组的打铃时间进行修改和设置,依次类推,直到设置完毕.当某一组别的打铃时间显示为"**──"(则未设置,为无效组别),而继续按"打铃时间设定键",则该组的数据不存储,退出打铃时间设置状态,恢复实时始终走时和显示状态.
⑷、打铃时间的查询和消除:
按动"打铃时间设定键",可以对各组已设置的打铃时间进行查看,如有错误,则可用上述方法进行修改.如果清楚某组的打铃时间,先用"打铃时间设定键"找到并显示该组的打铃时间,再用"选择键"、"调节键"将该组的打铃时间设定为"**0000".再次按动"打铃时间设定键",则可清除该组的时间数据,而后面的各组时间数据的组别依次往前移一位,保证各打铃时间之间不出现空组别或无效组别.如:
清除第7组数据后,第8组数据就移至第7组,第9组的数据移至第8组……
在时间校对、打铃时间设置、查询与修改过程中,超过30秒钟没按任何一个有效按键,则自动恢复原来的时间走时和显示.
⑸、打铃的铃声类别设置:
在打铃时间设置过程中,可以用"铃声选择键"来设置打铃的铃声类别.在设置某组别的打铃时间时,默认铃声为"连续铃声",即不按"铃声选择键"时为连续铃声.用此方法可以对每组打铃时间的铃声进行设置或更改.不同的铃声用两个发光二极管进行指示.
3.3软件设计
⑴、系统资源分配:
为了便于程序的设计、阅读及修改,需要先对系统的存储器资源进行分配和说明.
⑵、软件流程:
根据上述工作流程和设计要求,软件设计可以分为以下几个功能模块:
①、主程序:
初始化及键盘控制.
②、计时程序模块:
为定时器0中断服务子程序,完成刷新计时缓冲区的功能.
③、时间校对模块:
完成实时时钟的时间设定.
④、打铃时间设置模块:
完成打铃时间的设置与清除.
⑤、显示程序模块:
完成6位LED数码管的动态显示.
⑥、键盘扫描程序模块:
判断是否有键按下,并求取键号.
⑦、定时比较程序模块:
判断报时时间是否,如时间到,则启动打铃处理程序.
⑧、打铃程序模块:
设置两种不同的打铃模式,并选择其一输出.
⑨、其他辅助功能程序:
如"选择键"处理、""调节键"处理、"打铃时间设定键"处理等键盘设置程序;拆字、合字处理程序等.
第四章程序设计
4.1系统资源分配
4.1.1为方便阅读程序,先对系统的资源分配加以说明。
1)定时器。
定时器0用作时钟定时,按方式1工作,每隔100ms溢出中断一次。
2)片内RAM及标志位的分配与定义见下表:
地址
功能
名称
初始化
23~20H
计时缓冲区,小时23H,分22H,秒21H,100ms20H
HOUR,MIN
SEC,MSEC
00H
2FH~2AH
显示缓冲区
计时状态:
2FH小时十位,
2EH小时个位,2DH分十位,
2CH分个位,2BH秒十位,
2AH秒个位
打铃设定状态:
2FH组别十位,2EH组别个位,2BH分十位,2AH分十位。
DISP0~P5
00H
30H~6FH
用户打铃时间存储器(时,分)每个打铃时间点占两个字节,低字节小时,高字节分钟。
32个报时点共占64字节,小时字节的最高存储铃声选择状态:
0-连续打铃,1-断续打铃
AHOUR
AMIN
00H
70H~7FH
F0(B.0)
F1(B.1)
F2(B.2)
F3(B.3)
堆栈区共16个字节
打铃时间设置标志位
分钟值变更标志位
键处理标志位
断续打铃标志位
0F0H
0F1H
0F2H
0F3H
00H
0
0
0
0
4.1.2软件流程
根据上述工作流程,软件设计可分为以下几个功能模块:
1)主程序:
初始化与键盘监控。
2)计时:
为定时器0中断服务子程序,完成刷新计时缓冲区的功能。
3)时间设置与报时设置:
由键盘输入设置当前时间与定时启闭时间。
4)显示:
完成5位LED动态显示。
5)键盘扫描:
判断是否有键盘按下,并求取键号。
6)定时比较:
判断报时时间到否,如时间到,则启动报时处理程序。
7)其他辅助功能程序,如键盘设置、拆字、合字、冬季或夏季时间选择及假日停止报时等。
下面分模块进行软件设计:
4.2程序模块设置:
1、主程序模块(MAIN)
1、定时中断服务程序模块(CTCINT)
2、扫描显示子程序(DISP)
3、键扫描子程序(CHECKEY)
4、键值处理子程序(KEYACC)
5、选择键处理子程序(SHIFTP)
6、调节键处理子程序(TIAOJIE)
7、打铃时间设定键处理子程序(USECLR)
8、铃声选择键处理子程序(BELSET)
9、打铃处理模块(TIMER)
10、打铃时间显示子程序(USEXS)
11、打铃时间存储子程序(USECC)
12、恢复走时显示子程序(FFZSXS)
13、打铃输出子程序(DLSC)
14、恢复走时显示子程序(FFZSXS):
15、打铃输出子程序(DLSC):
一、主程序模块(MAIN)
在主程序模块中,先对各端口进行初始化,对内部RAM区清零,设置堆栈和定时初值,关闭显示器,启动定时及其中断。
然后标志位F3是否建立,如有则进行报时处理,否则再检测有无按键按下,若有则进行按键处理,无则返回循环点。
ORG0000H
START:
AJMPMAIN
ORG000BH;定时器T0中断入口地址000BH
AJMPCTCINT;跳转定时器T0的中断服务程序入口
ORG0030H;主程序如口地址
MAIN:
NOP;主程序模块
MOVA,#0FFH;关闭个各输出口
MOVP0,A;P0为字段输出口,低电平有效
MOVP1,A;P1为7个键输入口,低电平有效
MOVP2,A;P2为显示字位输出口,高电平有效
MOVP3,A;P3为铃声选择指示灯输出及打铃控制输出,低电平有效
MOVA,SP
CJNEA,#07H,NOT1;复位后SP=07H,SP≠07H,跳转
MOVR0,#7FH;RAM初始化清零
MOVR1,#7DH;内部RAM从03H到7FH均清零
CLRA
LOOP0:
MOV@R0,A
DECR0
DJNZR1,LOOP0
NOT1:
MOVSP,#70H;设置栈底指针为07H
MOVIP,#02H;设置定时器T0为最高中断优先级
MOVIE,#82H;定时器T0开中断
MOVTMOD,#01H;定时器T0工作方式为方式1
MOVTL0,#0B0H;设置定时器T0的初值
MOVTH0,#3CH;T0的高字节=3CH
SETBTR0;启动定时器T0,TR0为T0的启动控制位
NEXTT:
NOP
MOVSP,#70H;重置堆栈底指针为70H
LCALLDISP;调用显示子程序
JNB0F1H,NEXT1;0F1为分钟值变更标志位0F1=0,跳转
LCALLTIMER;0F1=1,调用打铃处理子程序
NEXT1:
LCALLCHECKEY;调用键扫描子程序,判断有无键按下
JNZNEXT2;有键按下,转NEXT2,A中存放键值
JNB0F2H,NEXTT;无键按下,返回
LCALLFFZSXS;有键处理标志位,调用恢复走时显示子程序
SJMPNEXTT
NEXT2:
LCALLK;有键按下,调用键值处理子程序
MOVR4,#;R4清零,R4在FFZSXZS子程序中作计数用
SJMPNEXTT
二、定时中断服务程序模块(CTCINT),完成下述工作:
1)对100ms(20H),分(22H),时(23H)进行累加计数。
2)如果秒钟计数发生变化,并且无键按下(键处理标志位F2H=0)。
3)如分钟数发生变化,则将分钟值变更标志位置位。
三、扫描显示程序模块(DISP):
为6位LED动态显示模块,P0口为字段码输出口,低电平有效;P2口为字位码输出口,高电平有效。
显示缓冲区2FH~2AH共6个字节,2FH,2EH存放显示的小时十位与个位,2DH,2CH存放显示的分钟十位与个位,2BH,2AH存放显示的秒钟的十位与个位。
其数字范围在00H~OFH内时不显示该位的小数点,在10H~1FH时,则显示小数点。
四、键扫描子程序(CHECKEY):
检测P1端口,判断是否有键按下,如有键按下,则进行延时去抖动并读取键值,存入A中。
五、键值处理子程序(KEYACC):
根据键值,转相应键处理子程序。
六、选择键处理子程序(SHIFTP):
通过按键来选定小时,分钟位选定位则闪烁,并在选定位可进行加一处理。
分两种情况:
1、进行时间校时时,在高四位闪(小时的十位,个位,分钟的十位,个位)。
2、进行打铃时间点设置是,在底四位进行闪。
七、调节键处理子程序(TIAOJIE):
在闪烁的对应位上进行十进制加1处理
L
MOVA,24H
ANLA,#0FH
MOV2CH,A
LOOP:
RET
C1:
MOV24H,2BH;2AH,2BH合成一个字节
MOVA,24H
SWAPA
MOVA,2AH
ADDA,#01H;加1
MOV24H,A
CJNEA,#60,C4;判断是否=60
MOV2BH,#00H;等于就归零
MOV2AH,#00H
LJMPLOOP
C4:
ANLA,#0F0H;加一数分别送回2AH,2BH
SWAPA
MOV2BH,A
MOVA,24H
ANLA,#0FH
MOV2AH,A
LOOP:
RET
八、打铃时间点设定键处理子程序(USESET):
该子程序主要完成以下功能。
1)打铃时间点设定状态的显示。
2)打铃时间点的存储。
3)判断打铃时间点设置是否有效,无效则退出,返回计时状态。
USESET:
NOP;用户打铃时间点设定程序
SETBRS1
CLRRS0
JB0F0H,USE1;OFOH为打铃时间点,设定标志位
SETB0F0H;第一次按该键的处理程序
SETB0F2H;OF2H为该键处理标志位
MOVR6,#01H
MOVR7,#01H
LCALLUSEXS
NOP
CLRRS1;重新选择工作寄存器组(2区)
CLRRS0;RS1=1,RSO=0为2区
MOVR6,#01H;打铃时间点设定组别,开始为01组
MOVR7,#01H
LCALLUSEXS;调用打铃时间显示子程序
NOP
CLRRS1;返回原工作寄存器组(0区)
CLRRS0
RET
NOP
USE1:
:
NOP;第2次及以后按打铃时间设定键的处理程序
NOP;判断上次设定的打铃时间是否有效
MOVA,2DH;将小时的十位2DH与个位2CH合成一个字节,存R4中
ANLA,#0FH
SWAPA
MOVR1,A
MOVA,2CH
ANLA,#0FH
ADDA,R1
MOVR4,A;小时数存R4
CLRC
CJNEA,#24H,USE2
AJMPUSE6;小时数=24,退出
USE2:
JNCUSE6;小时数>24,退出
NOP
MOVA,2BH;将分钟的十位2BH与个位2AH合成一个字节
ANLA,#0FH
SWAPA
MOVR1,A
MOVA,2AH
ANLA,#0FH
ADDA,R1
MOVR5,A;分钟数R5
CLRC
CJNEA,#60H,USE3
AJMPUSE6;分钟数=60,退出
USE3:
JNCUSE6;分钟数>60,退出
NOP
CJNER4,#00H,USE4
CJNER5,#00H,USE4
AJMPUSE6;分钟数,小时数均为0,即位00:
00,退出
NOP
USE4:
LCALLUSECC;调用打铃时间存储子程序
NOP
INCR6;R6中存放二进制组别数据
MOVA,R7
ADDA,#01H
DAA
MOVR7,A;R7中存放二十一进制调整后的组别数据
CJNEA,#33H,USE5
AJMPUSE6;组别数加到33,退出
USE5:
LCALLUSEXS;显示下一组别打铃时间
NOP
CLRRS1
CLRRS0
RET
USE6:
NOP,打铃时间设定状态的退出
CLR0F2H
CLR0F0H
SETBP3.2
SETBP3.3
CLRRS1
CLRRS0
RET
NOP
九、打铃时间清除键处理子程序(URECLR):
将当前显示的组别的打铃时间清除,后面组别的打铃时间依次往前移1组。
USECLR:
NOP;打铃时间清除键处理子程序;
JB0F0H,USECL1
RET;打铃时间设定标志位0F0H=0,退出
USECL1:
SETBRS1;重新选择工作寄存器区
CLRRS0
DECR0
MOV@R0,#00H;RO中存放当前打铃组别的首地址
DECR0;当前组别的存放区数据清零(2个字节)
MOV@R0,#00H
CJNER0,#6EH,USECL2
AJMPUSECL3
USECL2:
MOVA,R0
ADDA,#02H
MOVR1,A;R1中存放下一组别的首地址
MOVA,@R1;@R1和@R0中数据交换
XCHA,@R0;字节交换指令
MOV@R1,A
INCR0
CJNER0,#6EH,USECL2
NOP
USECL3:
LCALLUSEXS
CLRRS1
CLRRS0
RET
NOP
十、铃声选择键处理子程序(BELSET):
选择两种不同的铃声,1是连续铃声,2是断续铃声,默认状态(即不选)为连续铃声。
BELSET:
NOP;铃声选择键处理子程序
JB0F0H,BEL1
RET;不是打铃时间设定状态,即0F0H=0,直接退出
NOP
BEL1:
SETBRS1;重新选择工作寄存器区(2区)
CLRRS0
JNBP3.2,BEL2;P3.3为连续打铃指示灯,低电平有效
NOP;P3.3=0,转BEL2
CLRP3.3;P3.3=1时,清零
SETBP3.2;P3.2为断续打铃指示灯,低电平有效
AJMPBEL3
BEL2:
SETBP3.2
CLRP3.3
BEL3:
CLRRS1
CLRRS0
RET
NOP
十一、打铃处理模块(TIMER):
该模块将计时缓冲区的小时数(23H),分钟数(22H)与用户设定的报时时间点(30H~6FH,区32个报时点)的数据进行比较,如不相等,则返回,则执行打铃输出。
TIMER:
NOP
MOVA,#00H
CJNEA,23H,TIME0;小时数≠0,跳转
CJNEA,22H,TIME0;分钟数≠0,跳转
CLR0F1H;清除分变更标志位
RET;小时,分钟均为0,即为00:
00。
返回
TIME0:
MOVR2,#20H;用户设定的打铃时间点最多为20H,即32点
CLRA
MOVR0,#30H;用户打铃时间首地址送RO
TIME1:
MOVA,@R0
JNBACC.7,TIME2;ACC.7为小时的最高位
SETB0F3H;小时的最高位如=1,则为断续打铃,置0F3H=1
CLRACC.7;铃声种类不能影响小时的比较
NOP
TIME2:
CJNEA,23H,TIME3;比较小时数,不相等跳转
INCR0;比较分钟数
CLRA
MOVA,@R0
CJNEA,22H,TIME4;分钟数不相等,比较下一打铃
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 自动控制 打铃 系统 设计