没有合适的资源?快使用搜索试试~ 我知道了~
首页单片机定时报警器开发详解:功能设计与电路实现
单片机定时报警器开发详解:功能设计与电路实现
0 下载量 68 浏览量
更新于2024-06-28
收藏 667KB DOCX 举报
本文档深入探讨了单片机开发工程中的一个实用案例——定时报警器的设计与实现。首先,设计目标是创建一个具备倒计时功能的报警器,用户可以设置初始计时值(1-59秒),并能通过按键进行计时调整。主要功能包括: 1. 定时功能:利用AT89S51单片机的定时器进行精确计时,通过设置定时器溢出中断实现1秒一跳,计数器随着每一秒减少,当倒计时为0时,触发闪烁状态。 2. 显示功能:采用动态扫描技术在共阴极数码管上显示倒计时,非闪烁状态下通过位控线控制每个数字段的点亮或熄灭。在闪烁模式下,数码管仅需控制其亮暗。 3. 键盘控制:通过P1口与独立式按键相连,实现设置、计时模式的切换。设置键暂停计时,增减键改变初始值,确认键保存设置并重新开始倒计时。 4. 硬件电路:选用MCS-51系列AT89S51作为核心微控制器,配合两个74HC244进行总线扩展,驱动数码管显示。按键部分通过P3口与独立按键相连,确保可靠的数据输入。 5. 程序设计:资源分配方面,P3口用于键盘输入,程序流程包括初始化变量和寄存器,持续监测按键状态,同时管理定时器和数码管显示。在设置状态下,按键功能响应明确,计时结束后进入闪烁模式。 通过本文档,读者可以学习到单片机开发中如何设计实时的倒计时器、处理用户输入和控制外部设备,以及如何合理地利用单片机资源来实现实际的工程项目。这对于理解和实践单片机开发,特别是入门者来说,是一份宝贵的参考资料。
资源详情
资源推荐
{ if (init_val>0) //更改原来的倒计数初始值
{init_val--; }
else
{init_val=59;}
show_val=init_val;//显示更改后的倒计数初始值
}
break;
case 3: if(state_val==1) //只有在设置状态,减 1 键才有用
{ if (init_val<59) //更改原来的倒计数初始值
{init_val++; }
else
{init_val=0;}
show_val=init_val; //显示更改后的计数初始值
}
break;
case 4: if(state_val!=0) //如果已处于计数模式,确认键不起作用
{ cnt_val=init_val; //将初始值赋给计数变量
show_val=cnt_val; //将计数变量的数字显示
TR1=1; //启动定时器 T1
state_val=0; //将状态切换为计数模式
}
break;
}
}
led_show(show_val); //动态扫描
}
}
3.2 交通灯
设计一个基于单片机的交通灯信号控制器。东、西、南、北四个方向各有红黄绿色三个灯,在
东西方向有两个数码管,在南北方向也有两个数码管。要求交通灯按照表 1 进行显示和定时切换,
并要求在数码管上分别倒计时显示东西、南北方向各状态的剩余时间。
表 1 交通灯的状态切换表
南北方向
东西方向
序号
状态
序号
状态
1
绿灯亮 25 秒,红、黄灯灭
2
黄灯亮 5 秒,红、绿灯灭
1
红灯亮 30 秒,绿、黄灯灭
2
绿灯亮 25 秒,红、黄灯灭
3
红灯亮 30 秒,绿、黄灯灭
3
黄灯亮 25 秒,红、绿灯灭
回到状态 1
回到状态 1
模块 1:系统设计
〔1〕任务分析与整体设计思路
试题要求实现的功能主要包括计时功能、动态扫描以及状态的切换等几局部。
计时功能:要实现计时功能那么需要使用定时器来计时,通过设置定时器的初始值来控制溢出
中断的时间间隔,再利用一个变量记录定时器溢出的次数,到达定时 1 秒中的功能。当计时每到 1
秒钟后,东西、南北信号灯各状态的暂存剩余时间的变量减 1。当暂存剩余时间的变量减到 0 时,
切换到下一个状态,同时将下一个状态的初始的倒计时值装载到计时变量中。开始下一个状态,如
此循环重复执行。
动态扫描:需要使用 4 个数码管分别显示东西、南北的倒计时数字,将暂存各状态剩余时间的
数字从变量中提取出“十位〞和“个位〞,用动态扫描的方式在数码管中显示。
整个程序依据定时器的溢出数来计时,每计时 1S 那么相应状态的剩余时间减 1,一直减到 0 时
触发下一个状态的开始。
〔2〕单片机型号及所需外围器件型号,单片机硬件电路原理图
图 3-5 交通灯硬件电路原理图
发光二极管的控制,实现交通灯信号的显示,每个发光二极管串联 500 欧姆电阻起限流作用。
1A1
2
1A2
4
1A3
6
1A4
8
2A1
11
2A2
13
2A3
15
2A4
17
1Y1
18
1Y2
16
1Y3
14
1Y4
12
2Y1
9
2Y2
7
2Y3
5
2Y4
3
1G
1
2G
19
U3
HC244
1A1
2
1A2
4
1A3
6
1A4
8
2A1
11
2A2
13
2A3
15
2A4
17
1Y1
18
1Y2
16
1Y3
14
1Y4
12
2Y1
9
2Y2
7
2Y3
5
2Y4
3
1G
1
2G
19
U4
HC244
C
9
A
2
B
6
D
11
E
12
F
3
G
8
H
10
COM1
7
COM3
4
COM2
5
COM4
1
U5
LED4SCH
C
9
A
2
B
6
D
11
E
12
F
3
G
8
H
10
COM1
7
COM3
4
COM2
5
COM4
1
U6
LED4SCH
LED_A
LED_B
LED_C
LED_D
LED_E
LED_F
LED_G
LED_H
LED_A1
LED_B1
LED_C1
LED_D1
LED_E1
LED_F1
LED_G1
LED_H1
R2
100
R3
100
R4
100
R6
100
R7
100
R8
100
R9
100
R10
100
LED_A1
LED_B1
LED_C1
LED_D1
LED_E1
LED_F1
LED_G1
LED_H1
LED_A1
LED_B1
LED_C1
LED_D1
LED_E1
LED_F1
LED_G1
LED_H1
L_COM1
L_COM2
L_COM3
L_COM4
L_COM5
L_COM6
L_COM7
L_COM8
L_COM1
L_COM2
L_COM3
L_COM4
L_COM5
L_COM6
L_COM7
L_COM8
LED_J0
LED_J1
LED_J2
LED_J3
LED_J5
LED_J6
LED_J7
LED_J4
EA/VP
31
X1
19
X2
18
RESET
9
RD
17
WR
16
INT0
12
INT1
13
T0
14
T1
15
P10/T
1
P11/T
2
P12
3
P13
4
P14
5
P15
6
P16
7
P17
8
P00
39
P01
38
P02
37
P03
36
P04
35
P05
34
P06
33
P07
32
P20
21
P21
22
P22
23
P23
24
P24
25
P25
26
P26
27
P27
28
PSEN
29
ALE/P
30
TXD
11
RXD
10
U2
80C32
VCC
P30
P31
LED_J0
LED_J1
LED_J2
LED_J3
LED_A
LED_B
LED_C
LED_D
LED_E
LED_F
LED_G
LED_H
Y1
11.0592
C1
30P
C2
30P
R11
10K
R1
100
C3
22U
VCC
S1
RESET
RST
RST
P32
P33
P35
P34
D4
LED
D3
LED
D5
LED
D6
LED
D2
LED
D1
LED
R16
500
R15
500
R14
500
R13
500
R12
500
R5
500
VCC
P30
P31
P32
P33
P34
P35
LED_J5
LED_J6
LED_J7
LED_J4
剩余39页未读,继续阅读
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功