-
课程设计—定时打铃器的设计
课程名称:
专业课程设计
学院名称:
南昌航空大学科技学院
专业
:
电子信息工程
班级:
1482052
学号:
148205216
姓名:
彭少锟
同组人:
刘晶晶
指导教师:
评分:
20
17
年
6
月
19
日
摘
要
现代社会定时
打铃器已广泛用于各种私人和公众场合
,
成为我们生活、工作和学习中不可
缺少的好帮手,因此研究实用性更强的电子闹钟具有十分重要的意义。本设计是基于单片机
p>
的电子钟设计,不仅具有时分秒的显示功能,还具有定时打铃和倒计时的功能,实用性非常<
/p>
强。电子钟的计时部分采用
AT89S52
单片机内部定时 器实现,而显示功能是采用液晶模块
LCD1602
来实现,该定时打铃 器可以让使用者通过按键来轻松选择的功能菜单和调节时间,
具有非常良好地人机界面。
关键词:
定时打铃器;倒计 时;
AT89S52
;液晶
LCD1602
;按键
目
录
1
设计要求
.
.. .................................................. ...
1
2
方案论证
.
................ .......................................
1
2.1
计时方案的选择
.
............. ...........................................
1
2.2
显示方案的选择
.
....................................... .................
1
2.3
按键功能方案设计
.
............ ..........................................
1
2.4
指示灯和响铃方案设计
< /p>
.
.................................... ..............
2
3
系统组成
.
................ .......................................
2
4
硬件设计
< /p>
.
.................................... ...................
2
4.1
单片机最小系统设计
.
........... .........................................
2
4.2
显示电路设计
.
................................................. .........
4
4.3
蜂鸣器电路设计
.
............. ...........................................
4
4.4
按键电路设计
< p>.
........................................ ..................
5
5
软件设计
.
.. .................................................. ...
5
5.1
走时部分
.
................ ..............................................
5
5.2
定时打铃检测部分
.
...................................... ................
6
5.3
键盘扫描部分
.
.............. ............................................
6
5.4
液晶部分
.
.......................................... ....................
7
5.5
流程图
.
................. ...............................................
7
6
仿真设计
.
................ ......................................
1
1
7
系统调试及结果
.
............. ...................................
1
1
7.1
软件调试
.
................................... ..........................
11
7.2
硬件调试
.
. .................................................. ..........
13
7.3
调试结果
.
................ .............................................
13
8
总结
.
.................. ........................................
1
3
参考文献
. p>
............................................. ............
1
4
附
录
.
................... ........................................
1
5
1
设计要求
p>
1.
显示时钟格式:
**
时
* *
分
**
秒。
2.
可任意设定时间达到定时控制,定时点至少有两个
3.
可对设定的时间进行存取,实现掉
电保护功能。
p>
3.
定时时间到,打铃一分钟,自动关闭打铃继续计时。
2
方案论证
2.1
计时方案的选择
1
、采用专门的时钟芯 片,例如美国
DALLAS
公司推出的
DS1302
实时时钟芯片,它的
工作电压为
2.5V-5.5V
, 采用三线接口与
CPU
进行同步通信,并可采用突发式一次传送多个
字节的时钟信号或
RAM
数据,优点是高性能、低功耗,可以对年、月 、日、周日、时、分、
秒进行计时,具有闰年补偿功能,但
DS1302
存在时钟精度不高,易受环境影响,出现时钟
混乱等缺点,并且会增加电
路硬件复杂性。
2
、采用
AT89S5 2
单片机内部定时器,
51
系列单片机内部有两个
16
位定时器
/
计数器,
简称定时器
p>
0
和定时器
1
,简称
T0
和
T1
,设置
T0
工作在模式
0
状态下,每隔
50ms
中断一
下,中断<
/p>
20
次正好是
1
秒。用此方法的优点是可节少硬件设 计,计时精度高,缺点是软件编
程略显复杂。
总结:综合两种方案的优缺点,以及此次课设的要求,选择第二种方案是用单片机内部
定
时器。因为使用该方案不但可以节省硬件成本,还可以更锻炼自己使用单片机内部定时器
和
C
语言编程的能力。
2.2
显示方案的选择
1
、使用
LED
数码管,由多个发光二极管封装在一起组成“
8
”字型的 器件,引线已在内
部连接完成,只需引出它们的各个笔划,公共电极。它能够在低电压、
小电流的条件下驱动
发光,发光响应时间极短,单色性好,亮度高,但是数码管显示内容
单一,引脚与单片机
I/0
连接复杂。
2
、使用液晶
LCD1602
,液晶显示的原理是利用液 晶的物理特性,通过电压对其显示区
域进行控制,
有电就有显示,
LCD1602
是字符型液晶显示模块,
它是一种专门用于显示字母、< /p>
数字、符号等点阵式
LCD
,并且显示质量高,功耗小。缺 点是较数码管成本高。
总结:数码管显示内容单一,液晶则比较丰富,
并且数码管消耗电力会比液晶更高,若
选择数码管硬件布线会较复杂,影响美观性,而选
择液晶也不会超过经费支持。综合两种方
案的优缺点,选择方案二液晶显示。
2.3
按键功能方案设计
根据题目设计要求,
定义
6
个
12*12mm
的按键来选择系统功能菜单和调节时间,
分别为
K1
p>
、
K2
、
K3
、
K4< /p>
、
K5
、
K6
。
各个按键的具体功能如表
2.1
:
K1
K2
K3
选择调节时间菜单键及时增加键
选择调节闹铃
1
菜单键及分增加键
选择调节闹铃
2
菜单键及秒增加键
K4
K5
K6
选择倒计时菜单键
关闭闹铃响声键
确认键
表
2.1
按键功能表
2.4
指示灯和响铃方案设计
1
、指示灯:综 合设计要求和自我考虑,需要的指示灯个数为
4
个,分别为电源指示,程
序运行指示和两个闹铃指示。为了加以区分可使用不同颜色的
LED
。
2
、响铃选择:采用经济适用的蜂鸣器,它是一种 一体化结构的电子讯响器,采用直流电
压供电,广泛应用于计算机、报警器、电子玩具、
定时器等电子产品中作发声器件,而且驱
动电路简单,由单片机一个
I/ O
口外接一个三极管即可。
3
系统组成
经过以上的计时方案选择和显示方案选择,确
定本设计的电子闹钟的计时方案为单片机
内部定时,显示方案为液晶
LC D1602
。闹铃的响铃来源选择经济适用的蜂鸣器,并用按键来
选择功
能菜单和调节时间,用
4
个不同颜色的发光二极管作为两个闹铃指示灯,程序运行 指
示灯和电源指示灯。
因此系统组成框图如图
3.1
:
LCD1602
指
示
灯
AT89S52
最小系统
蜂
鸣
器
键盘
图
3.1
系统框图
4
硬件设计
4.1
单片机最小系统设计
单片机最小系统的设计关键的就是时钟电路和复位电路的设计。
1
、时钟电路
在这里使用单片机内部振
荡电路,
管脚
XTAL1
、
XTAL2
< p>用来外接石英晶体和微调电容,
如图
4.1
所示。晶 体可在
1.2
—
12MHz
之间选择,电容可在< /p>
6
—
30pF
之间选择。
图
4.1
时钟电路
2
、复位电路
当振荡电路工作
,并且在
RST
引脚加上一个至少保持两个机器周期的高电平时,就能完
成一次复位。这里我使用按钮复位方式,如图
4.2
,利用
RC
微分电路产生正脉冲来达到复位
目的,该正脉冲的持续时间
大于两个机器周期。
图
4.2
复位电路
4.2
显示电路设计
此设计的显示电路采用的是液晶模块
p>
LCD1602
,
其为
5V
电压驱动,
只有并
行接口。其与单片机连接的硬件电路如图
4.3< /p>
,其中的
D0-D7
分别连接到单片机
的<
/p>
P0.0-P0.7,VSS
接地,
VDD
接
+5V
电源,
VEE
经
10K
< p>电位器接地,用于调节
背光,
RS
端为向液晶控制器 写数据
/
写命令选择端,接单片机
P2.1
口,< /p>
RW
为读
/
写选择端,因为我们不从液晶读 取任何数据,故接地,
E
端为使能信号,接单
片机
P2.2
口。
图
4.3
液晶连接电路
4.3
蜂鸣器电路设计
电路设计如图
4.4< /p>
,
单片机的
P2.0
脚通过限流电阻
R
与三极管基极相接,
集
电极接蜂鸣器。当
P2.0
引脚电平为
0
是,三极管导通,蜂鸣器工作,引脚电平
为
1
时,
三极管截止,
蜂 鸣器不工作。
因为单片机口输出低电平时的驱动能力比
高电平强的多,故
三极管采用基极低电平导通
PNP
型的三极管。
图
4.4
蜂鸣器驱动电路
4.4
按键电路设计
此次按键电路设计可直接将按键一端接到
单片机的
I/O
口,
另一端直接接地。
通
过单片机检测低电平判断按键按下,
K1-K6
分别接至单片机的
P3.0-P3.5
。按
键电路如图
4.5
:
图
4.5
按键电路
5
软件设计
软件设计主要包含显示走时、闹铃检测和键盘扫描三部分。
5.1
走时部分
走时部分主
要有
3
个变量
hour
、
min< /p>
、
sec
和
deda
做为时钟的时、 分、秒和
定时标志位,通过单片机内部定时器定时
50ms
,定时标志位
deda
加
1
,此过程
< p>在中断服务程序中完成,当加满
20
次时,
deda
清零并且时钟的秒
sec
加
1
,从
而到达计时目的。
代码如下:
void T0_srv(void) interrupt 1
{
TH0=0x3C;
TL0=0x0B0;
deda++;
}
void conv()
{
if(deda>=20){sec++;deda=0;}
if(sec==60){min++;sec=0;ok=1;}
if(min==60){hour++;min=0;}
if(hour==24){hour=0;}
}
5.2
定时打铃检测部分
定
时打铃检测部分主要的变量有
6
个,
hh1
、 p>
mm1
和
flag1
做为定时
1
的时、
分和开关标志位,
hh2
、
mm2
和
flag2
做为定时
2
的时、分和开关标志位,当
hh1=hour,mm1=min
并且开关 标志
flag1=1
时,定时
1
便可以执行响铃程 序,当
hh2=hour,mm2=min
并且开关标志
flag2=1
时,定时
2
便可以执行响铃程序,在
这个子程序中为了不影响正常走时时间,故加上走时函数
time( )
。代码如下:
void alm_check1()
{
wh ile((alm_flag1==1)&&(hour==hh1)&&(min==mm1)&&(ok== 1))
{
time();
}
5.3
键盘扫描部分
键盘扫面部分是该软件设计中较复杂的部
分,
用单片机
I/O
口检测低电平来
判断
是否有键按下,
根据按下的键值来执行相应的子程序。
在此部分增加一个标
志变量
ok
做为子程序执行完毕的标志变量,
在 子程序执行过程中当
K6
键按下,
则
ok =1
,返回主程序。
while(1)
{
time();
alm_check1();
alm_check2();
if(k1==0)
set_time();
alm_led1=0;
beep=~beep;delay(40);
if(k5==0) {alm_led1=1;beep=1;ok=0;}
}
if(k2==0)
if(k3==0)
if(k4==0)
set_atime1();
set_atime2();
set_countdown();
}
5.4
液晶部分
液晶
LCD1602
做为本设计的显示元件,其初始化程 序如下:
void TS1602_INIT(void)
{
}
5.5
流程图
1
5.1
:
RS=0;
write_com(0x38);
//
设置
16*2
显示,
5*7
点阵,
8
位数据接口
write_com(0x0c);
//
设置开显示,不显示光标
write_com(0x06);
//
写一个字符后地址指针自动加
1
write_com(0x01);
//
清屏
开始
初始化
显示时间
闹铃检测
键盘扫描
p>
图
5.1
主程序流程图
2
、中断服务流程图:
如图
5.2
:
开始
重装定时器初值
Deda
加
1
中断返回
图
5.2
中断服务流程图
2
、时间流程图,如图
5.3
:
开始
N
deda>=20?
Y
deda=0
,
秒
sec
加
1
sec>
=60?
Y
N
Sec=0,
min
加
1
min>=60?<
/p>
Y
N
min=0,
小时< /p>
hour
加
1
返回主程序
< br>
图
5.3
时间流程图
3
、闹铃检测流程图,如图
5 .4
:
开始
闹铃
1
时 间到?
N
Y
闹铃
2 p>
时间到?
N
Y
Y
闹铃
N
1
分钟到或
K5
摁下
返回主程序
图
5.4
闹铃检测流程图
4
、键盘扫描流程图,如图
5 .5
:
开始
Y
Y
hh2
加
1
K1
是否按下?
K1
是否按下?
设置走时时间
N
Y
mm2
加
1
K2
是否按下?
K1
是否按下?
Y
Hour
加
1
N
K2
是否按下?
N
Y
N
K3
是否按下?
Y
mi
n
加
1
Flag2=1
N
K3
是否按下?
N
Y
Y
sec
加
1
N
K4
是否按下?
Flag2=0
N
K6
是否按下?
Y
< br>N
Y
N
K6
是否 按下?
确定
ok
确认
ok
返回主程序
Y
返回主程序
K2
是否按下?
设置闹铃
2
N
C_hour
加
1
Y
< br>Y
K1
是否按下?
K1
是 否按下?
hh1
加
1
Y
< br>N
C_min
加
1
设置闹
铃
2
K3
是否按下?
N
< br>Y
K2
是否按下?
mm1
加
1
Y
K2
是否按下?
< br>N
设置倒计时
N
Y
K3
是否按下?
Flag1=1
Flag=1
N
C_sec
加
1
Y
K3
是否按下?
N
Y
K4
是否按下?
Flag1=0
p>
Flag=0
N
Y
N
K6
是否按下?
确认
ok
N
N
K6
K2
是否按 下?
Y
确定
ok
显示倒
计时
返回主程序
N
K5
是否按下?
Y
K4
是否按下?
< br>Y
返回主程序
N
返回主程序
p>
图
5.5
键盘扫面流程图
6
仿真设计
仿真设计是设计一个系统十分重要的环节,<
/p>
在实际电路做好之前系统软件调
试最好选择。此次仿真设计采用的是英国<
/p>
Labcenter
electronics
公司出版的
EDA
工具软件
Protues
,在
PROTUES
绘制好原理图后,调入已编译好的目标代码文
件:
p>
*.HEX
,可以在
PROTUES
的原理图中看到模 拟的实物运行状态和过程。
仿真电路图如下,图
6.1
:
图
6.1
仿真电路图
7
系统调试及结果
7.1
软件调试
此时设计的软件调试部分主要在仿真软件
p>
Protues
中完成。
首先根据硬件设计
在
Protues
中完成原理图的设计,确定使用单片机的哪些
< br>I/O
口,然根据软件设计中的流程图编写单片机
C
语言程 序。结合题目要求模块
化地编写程序,首先编写走时程序,然后编写闹铃
1
、闹铃
2
、的程序,最后完
成倒计时设
计,
在分模块化编写过程中,
不断地根据仿真现象调试程序来修复软
件编写错误。
例如调试液晶的显示问题,写指令
将数据指针定位到第一
行
第 p>
一
个
字
处
,
当
写
第
二
行
时
需
要
重
新
定
位
数
据
指
针
,
写
指
令 p>
write_com(0x80+0x40)
。
< p>
再者,
在显示倒计时时出现走时时间不准确的问题,
故在倒计时变量 处理的
程序中要加上正计时走时时间变量处理,
C_sec
、
C_min
、
C_hour
是倒计时时间 p>
变量,
sec
、
min
、 p>
hour
是走时时间变量。程序如下:
void C_conv( )
{
if(deda>=20){C_sec--;sec++;deda=0;}
if(C_sec<0){C_sec=59; C_min--;}
if(sec==60){min++;sec=0;}
if(C_min<0){C_hour--;C_min=59;}
if(min==60){hour++;min=0;}
if(hour==24){hour=0;}
if(C_hour<0)
{
C_sec=0;C_min=0;C_hour=0;
for(i=0;i<10;i++)
{
routine_led=~routine_led;
beep=~beep;
delay(80);
}ok=1;
}
最后在显示时间问题上
,
要将数字显示到液晶上,
采取的方法是将数字转化
为<
/p>
字
符
串
中
的
元
素
然
后
再
送
往
< p>液晶
显
示
。
程
序
如
下
:
其
中
,< /p>
uchar
code
lcd_code[
]=
。
void
display_num(unsigned char num)
{
}
uchar
ge,shi;
ge=num%10;
shi=num/10;
write_date(lcd_code[shi]);
write_date(lcd_code[ge]);
7.2
硬件调试
此次的硬件设计较为简单,
主 要的调试部分在于液晶对比度的调试,
期间遇
到的问题是液晶的对比度调
节引脚所接的
10k
电位器封装不正确,导致
VCC
与
GND
短路,还好及时发现问题,没有损坏器件。
7.3
调试结果
经过近两周的软件调试和硬件调试,对比设计要求,完成情况如下:
< /p>
1
、电路板大小
7cm*12cm
;
2
、电路接通电源后,蜂鸣器连续发出
2 p>
次响声,同时工作指示灯闪动,液
晶第一行显示“
Time: 00:00:00
”
,代表时间,第二行显示“
00:00 F 00:00 F
”
,代
表两个闹铃,初始为关。
p>
3
、可通过按键设定走时时间、两个闹铃响的时间和倒计时时间。
< p>
4
、可显示两个闹钟的时、分,并用
2
< p>个LED
灯分别指示闹钟
1
、闹钟
< p>2的
时间。
8
总结
1
、通过本次课程设计,实现了基于单片机的电子时钟设计,在这过程中,
我学到了很多,加深了对单片内部模块的理解,进一步学习了
C
语言的编写规 p>
则。在设计的前期,我认真地复习了
51
单片机的相关资料, 掌握了单片机外部
电路的合理设计以及各个引脚的功能。
系统的进行电子 时钟的需求分析,
合理的
设计出了电路原理框图,
根据原 理框图设计出电路原理图,
然后设计软件流程图,
根据流程图对单片机使
用
C
语言编程。在此过程中,我学到了很多在书本上学
不
到的东西,尤其是在处理故障和解决问题方面的考虑,受益颇多。
2
、本次设计的题目为基于单片机的电子时钟设计,通过两周努力,可以顺
利实现的功能有:
在液晶上显示走时时间;
两个闹铃时间和是否开启以及倒计时< /p>
时间;并且能通过按键实现设置时间的暂停、启动、调节等控制。
3
、在完成设计后,发现有还可以改进的地方,例如增加一个省电模式,即 p>
在不需要看时间的时候,将液晶显示关闭,这是设计前考虑不周的地方。
< /p>
最后,我深刻感受到要做好一个课程设计,就必须做到:在设计程序之前,
对所需资料的综合整理,有效的挑选资料;要明确目标,整理思路;合理设计出
系统所必须的流程图,
做好充分的心里准备。
这次设计是对我所学单片机一书的< /p>
综合考验,使我能查漏补缺,复习课本知识,加深理解记忆,所以每一步我都用
心去做。
-
-
-
-
-
-
-
-
-
上一篇:请假条(最新版)
下一篇:南昌航空大学计算机组成原理试卷