




免费预览已结束,剩余27页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计定时打铃器的设计 课程名称: 专业课程设计 学院名称: 南昌航空大学科技学院 专业: 电子信息工程 班级: 1482052 学号: 148205216 姓名: 彭少锟 同组人: 刘晶晶 指导教师: 评分: 20 17 年 6 月 19 日摘 要现代社会定时打铃器已广泛用于各种私人和公众场合,成为我们生活、工作和学习中不可缺少的好帮手,因此研究实用性更强的电子闹钟具有十分重要的意义。本设计是基于单片机的电子钟设计,不仅具有时分秒的显示功能,还具有定时打铃和倒计时的功能,实用性非常强。电子钟的计时部分采用AT89S52单片机内部定时器实现,而显示功能是采用液晶模块LCD1602来实现,该定时打铃器可以让使用者通过按键来轻松选择的功能菜单和调节时间,具有非常良好地人机界面。关键词:定时打铃器;倒计时;AT89S52;液晶LCD1602;按键目 录1 设计要求12 方案论证12.1 计时方案的选择12.2 显示方案的选择12.3 按键功能方案设计12.4 指示灯和响铃方案设计23 系统组成24 硬件设计24.1 单片机最小系统设计24.2 显示电路设计44.3 蜂鸣器电路设计44.4 按键电路设计55 软件设计55.1 走时部分55.2 定时打铃检测部分65.3 键盘扫描部分65.4 液晶部分75.5 流程图76 仿真设计117 系统调试及结果117.1 软件调试117.2 硬件调试137.3 调试结果138 总结13参考文献14附 录15291 设计要求1.显示时钟格式:*时*分*秒。2.可任意设定时间达到定时控制,定时点至少有两个3.可对设定的时间进行存取,实现掉电保护功能。3.定时时间到,打铃一分钟,自动关闭打铃继续计时。2 方案论证2.1 计时方案的选择1、采用专门的时钟芯片,例如美国DALLAS公司推出的DS1302实时时钟芯片,它的工作电压为2.5V-5.5V,采用三线接口与CPU进行同步通信,并可采用突发式一次传送多个字节的时钟信号或RAM数据,优点是高性能、低功耗,可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,但DS1302存在时钟精度不高,易受环境影响,出现时钟混乱等缺点,并且会增加电路硬件复杂性。2、采用AT89S52单片机内部定时器,51系列单片机内部有两个16位定时器/计数器,简称定时器0和定时器1,简称T0和T1,设置T0工作在模式0状态下,每隔50ms中断一下,中断20次正好是1秒。用此方法的优点是可节少硬件设计,计时精度高,缺点是软件编程略显复杂。总结:综合两种方案的优缺点,以及此次课设的要求,选择第二种方案是用单片机内部定时器。因为使用该方案不但可以节省硬件成本,还可以更锻炼自己使用单片机内部定时器和C语言编程的能力。2.2 显示方案的选择1、使用LED数码管,由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。它能够在低电压、小电流的条件下驱动发光,发光响应时间极短,单色性好,亮度高,但是数码管显示内容单一,引脚与单片机I/0连接复杂。2、使用液晶LCD1602,液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,LCD1602是字符型液晶显示模块,它是一种专门用于显示字母、数字、符号等点阵式LCD,并且显示质量高,功耗小。缺点是较数码管成本高。总结:数码管显示内容单一,液晶则比较丰富,并且数码管消耗电力会比液晶更高,若选择数码管硬件布线会较复杂,影响美观性,而选择液晶也不会超过经费支持。综合两种方案的优缺点,选择方案二液晶显示。2.3 按键功能方案设计根据题目设计要求,定义6个12*12mm的按键来选择系统功能菜单和调节时间,分别为K1、K2、K3、K4、K5、K6。各个按键的具体功能如表2.1: K1选择调节时间菜单键及时增加键K4选择倒计时菜单键K2选择调节闹铃1菜单键及分增加键K5关闭闹铃响声键K3选择调节闹铃2菜单键及秒增加键K6确认键表2.1 按键功能表2.4 指示灯和响铃方案设计1、指示灯:综合设计要求和自我考虑,需要的指示灯个数为4个,分别为电源指示,程序运行指示和两个闹铃指示。为了加以区分可使用不同颜色的LED。2、响铃选择:采用经济适用的蜂鸣器,它是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、报警器、电子玩具、定时器等电子产品中作发声器件,而且驱动电路简单,由单片机一个I/O口外接一个三极管即可。3 系统组成经过以上的计时方案选择和显示方案选择,确定本设计的电子闹钟的计时方案为单片机内部定时,显示方案为液晶LCD1602。闹铃的响铃来源选择经济适用的蜂鸣器,并用按键来选择功能菜单和调节时间,用4个不同颜色的发光二极管作为两个闹铃指示灯,程序运行指示灯和电源指示灯。因此系统组成框图如图3.1:LCD1602指示灯蜂鸣器AT89S52最小系统键盘 图3.1 系统框图4 硬件设计4.1 单片机最小系统设计单片机最小系统的设计关键的就是时钟电路和复位电路的设计。1、时钟电路在这里使用单片机内部振荡电路,管脚XTAL1、XTAL2用来外接石英晶体和微调电容,如图4.1所示。晶体可在1.212MHz之间选择,电容可在630pF之间选择。图4.1 时钟电路2、复位电路当振荡电路工作,并且在RST引脚加上一个至少保持两个机器周期的高电平时,就能完成一次复位。这里我使用按钮复位方式,如图4.2,利用RC微分电路产生正脉冲来达到复位目的,该正脉冲的持续时间大于两个机器周期。图4.2 复位电路4.2 显示电路设计此设计的显示电路采用的是液晶模块LCD1602,其为5V电压驱动,只有并行接口。其与单片机连接的硬件电路如图4.3,其中的D0-D7分别连接到单片机的P0.0-P0.7,VSS接地,VDD接+5V电源,VEE经10K电位器接地,用于调节背光,RS端为向液晶控制器写数据/写命令选择端,接单片机P2.1口,RW为读/写选择端,因为我们不从液晶读取任何数据,故接地,E端为使能信号,接单片机P2.2口。图4.3 液晶连接电路4.3 蜂鸣器电路设计电路设计如图4.4,单片机的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、sec和deda做为时钟的时、分、秒和定时标志位,通过单片机内部定时器定时50ms,定时标志位deda加1,此过程在中断服务程序中完成,当加满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、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() while(alm_flag1=1)&(hour=hh1)&(min=mm1)&(ok=1) time(); alm_led1=0; beep=beep;delay(40); if(k5=0) alm_led1=1;beep=1;ok=0; 5.3 键盘扫描部分键盘扫面部分是该软件设计中较复杂的部分,用单片机I/O口检测低电平来判断是否有键按下,根据按下的键值来执行相应的子程序。在此部分增加一个标志变量ok做为子程序执行完毕的标志变量,在子程序执行过程中当K6键按下,则ok=1,返回主程序。 while(1) time(); alm_check1(); alm_check2(); if(k1=0) set_time(); if(k2=0) set_atime1(); if(k3=0) set_atime2(); if(k4=0) set_countdown(); 5.4 液晶部分液晶LCD1602做为本设计的显示元件,其初始化程序如下:void TS1602_INIT(void)RS=0;write_com(0x38); /设置16*2显示,5*7点阵,8位数据接口write_com(0x0c); /设置开显示,不显示光标write_com(0x06); /写一个字符后地址指针自动加1write_com(0x01); /清屏5.5 流程图1、主程序流程图,如图5.1:图5.1 主程序流程图2、中断服务流程图:如图5.2:图5.2 中断服务流程图2、时间流程图,如图5.3:图5.3 时间流程图3、闹铃检测流程图,如图5.4:图5.4 闹铃检测流程图4、键盘扫描流程图,如图5.5:图5.5 键盘扫面流程图6 仿真设计仿真设计是设计一个系统十分重要的环节,在实际电路做好之前系统软件调试最好选择。此次仿真设计采用的是英国Labcenter electronics公司出版的EDA工具软件Protues,在PROTUES绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTUES的原理图中看到模拟的实物运行状态和过程。仿真电路图如下,图6.1:图6.1 仿真电路图7 系统调试及结果7.1 软件调试此时设计的软件调试部分主要在仿真软件Protues中完成。首先根据硬件设计在Protues中完成原理图的设计,确定使用单片机的哪些I/O口,然根据软件设计中的流程图编写单片机C语言程序。结合题目要求模块化地编写程序,首先编写走时程序,然后编写闹铃1、闹铃2、的程序,最后完成倒计时设计,在分模块化编写过程中,不断地根据仿真现象调试程序来修复软件编写错误。例如调试液晶的显示问题,写指令write_com(0x80)将数据指针定位到第一行第一个字处,当写第二行时需要重新定位数据指针,写指令write_com(0x80+0x40)。再者,在显示倒计时时出现走时时间不准确的问题,故在倒计时变量处理的程序中要加上正计时走时时间变量处理,C_sec、C_min、C_hour是倒计时时间变量,sec、min、hour是走时时间变量。程序如下: void C_conv( ) if(deda=20)C_sec-;sec+;deda=0; if(C_sec0)C_sec=59; C_min-; if(sec=60)min+;sec=0; if(C_min0)C_hour-;C_min=59; if(min=60)hour+;min=0; if(hour=24)hour=0; if(C_hour0) C_sec=0;C_min=0;C_hour=0; for(i=0;i10;i+) routine_led=routine_led; beep=beep; delay(80); ok=1; 最后在显示时间问题上,要将数字显示到液晶上,采取的方法是将数字转化为字符串中的元素然后再送往液晶显示。程序如下:其中,uchar code lcd_code =0123456789。void display_num(unsigned char num)uchar ge,shi;ge=num%10;shi=num/10;write_date(lcd_codeshi);write_date(lcd_codege); 7.2 硬件调试此次的硬件设计较为简单,主要的调试部分在于液晶对比度的调试,期间遇到的问题是液晶的对比度调节引脚所接的10k电位器封装不正确,导致VCC与GND短路,还好及时发现问题,没有损坏器件。7.3 调试结果经过近两周的软件调试和硬件调试,对比设计要求,完成情况如下:1、电路板大小7cm*12cm;2、电路接通电源后,蜂鸣器连续发出2次响声,同时工作指示灯闪动,液晶第一行显示“Time:00:00:00”,代表时间,第二行显示“00:00 F 00:00 F”,代表两个闹铃,初始为关。3、可通过按键设定走时时间、两个闹铃响的时间和倒计时时间。4、可显示两个闹钟的时、分,并用2个LED灯分别指示闹钟1、闹钟2的时间。8 总结1、通过本次课程设计,实现了基于单片机的电子时钟设计,在这过程中,我学到了很多,加深了对单片内部模块的理解,进一步学习了C语言的编写规则。在设计的前期,我认真地复习了51单片机的相关资料,掌握了单片机外部电路的合理设计以及各个引脚的功能。系统的进行电子时钟的需求分析,合理的设计出了电路原理框图,根据原理框图设计出电路原理图,然后设计软件流程图,根据流程图对单片机使用C语言编程。在此过程中,我学到了很多在书本上学不到的东西,尤其是在处理故障和解决问题方面的考虑,受益颇多。2、本次设计的题目为基于单片机的电子时钟设计,通过两周努力,可以顺利实现的功能有:在液晶上显示走时时间;两个闹铃时间和是否开启以及倒计时时间;并且能通过按键实现设置时间的暂停、启动、调节等控制。3、在完成设计后,发现有还可以改进的地方,例如增加一个省电模式,即在不需要看时间的时候,将液晶显示关闭,这是设计前考虑不周的地方。最后,我深刻感受到要做好一个课程设计,就必须做到:在设计程序之前,对所需资料的综合整理,有效的挑选资料;要明确目标,整理思路;合理设计出系统所必须的流程图,做好充分的心里准备。这次设计是对我所学单片机一书的综合考验,使我能查漏补缺,复习课本知识,加深理解记忆,所以每一步我都用心去做。参考文献1 沈红卫.基于单片机的智能系统设计与实现M.北京:电子工业出版社,20052 王守中、聂元铭.51单片机开发入门与典型实例(第2版)M.北京:人民邮电出版社,20093 白驹珩、雷晓平.单片计算机及其应用(第2版)M.成都:电子科技大学出版社,2012附 录1、元器件清单:专业工程设计元器件清单示例学号: 148205216 姓名: 彭少锟 空课题名称: 定时打铃器的设计 空序 号名 称数 量单 价备 注1单片机89C52及锁紧底座12lcd1602134脚按键(规格12*12mm)6带按键帽44脚按键(规格6*6mm)15发光二极管(直径3mm)3蓝绿黄各一个6发光二极管(直径5mm)1红7直插电阻360欧48直插电阻1K19直插电阻100欧210直插电阻2.7k111精密电位器10k112晶振12MHz113电解电容10u114直插电容22pF2159012三极管116蜂鸣器117排阻1K*81181*40圆孔插座11排19双排插针11排20单排插针11排21ISP下载口2*5插座12、电路原理图:3、程序代码#include#define uchar unsigned char#define uint unsigned int#define TS1602_DATA P0 sbit routine_led=P10;sbit alm_led1=P11;sbit alm_led2=P12; sbit E=P22;sbit RS=P21;sbit beep=P20;sbit k1=P30;sbit k2=P31;sbit k3=P32;sbit k4=P33;sbit k5=P34;sbit k6=P35;uchar i,j;uchar hour=0,min=0,sec=0;uchar hh1=0,mm1=0,hh2=0,mm2=0;uchar alm_flag1=0,alm_flag2=0;uchar deda=0;char C_hour=0,C_min=0,C_sec=0;uchar ok=0;uchar string1=Time: : :;uchar string2= : F : F;uchar string3= : N : F;uchar string4= : F : N;uchar string5= : N : N;uchar string6=Countdown_time:;uchar string7= : :;uchar code lcd_code=0123456789;void delay(uint x) uint i,j;for(i=0;ix;i+) for(j=0;j=20)sec+;deda=0; if(sec=60)min+;sec=0;ok=1; if(min=60)hour+;min=0; if(hour=24)hour=0; /*/函数功能:显示走时时间/*void disp_time() write_com(0x80+0x05); display_num(hour);delay(1); write_com(0x80+0x08); display_num(min);delay(1); write_com(0x80+0x0B); display_num(sec);delay(1); /*/函数功能:倒计时分秒转换程序/*void C_conv() if(deda=20)C_sec-;sec+;deda=0; if(C_sec0)C_sec=59; C_min-; if(sec=60)min+;sec=0; if(C_min0)C_hour-;C_min=59; if(min=60)hour+;min=0; if(hour=24)hour=0; if(C_hour0) C_sec=0;C_min=0;C_hour=0; for(i=0;i10;i+) routine_led=routine_led; beep=beep; delay(80); ok=1; /*/函数功能:显示倒计时时间/*void disp_Countdown_time() write_com(0x80+0x40); display_num(C_hour);delay(1); write_com(0x80+0x43); display_num(C_min);delay(1); write_com(0x80+0x46); display_num(C_sec);delay(1); /*/函数功能:调用走时时间程序函数/*void time() conv(); disp_time(); /*/函数功能:调用倒计时时间程序函数/*void Ctime() C_conv(); disp_Countdown_time(); /*/函数功能:显示闹铃1时间/*void disp_alm1() write_com(0x80+0x40); display_num(hh1);delay(1); write_com(0x80+0x43); display_num(mm1);delay(1); /*/函数功能:显示闹铃2时间/*void disp_alm2() write_com(0x80+0x48); display_num(hh2);delay(1); write_com(0x80+0x4B); display_num(mm2);delay(1); /*/函数功能:调整时间/*void set_time() delay(500); TR0=0; sec=0; ok=0; while(ok=0) if(k1=0)delay(100); if(k1=0)hour+; if(hour=24)hour=0; delay(5); disp_time(); if(k2=0)delay(100); if(k2=0)min+; if(min=60)min=0; delay(5); disp_time(); if(k3=0)delay(100); if(k3=0)sec+; if(sec=60)sec=0; delay(5); disp_time(); if(k6=0)ok=1; TR0=1; /*/函数功能:调整闹铃1/*void set_atime1() alm_led1=0; delay(500); ok=0; while(ok=0) if(k1=0)delay(100); if(k1=0)hh1+; if(hh1=24)hh1=0; delay(5); disp_alm1(); if(k2=0)delay(100); if(k2=0)mm1+; if(mm1=60)mm1=0; delay(5); disp_alm1(); if(k3=0) alm_flag1=1; if(alm_flag1=0)&(alm_flag2=0)display_string2(string2); disp_alm1();disp_alm2(); if(alm_flag1=1)&(alm_flag2=0)display_string2(string3); disp_alm1();disp_alm2(); if(alm_flag1=0)&(alm_flag2=1)display_string2(string4); disp_alm1();disp_alm2(); if(alm_flag1=1)&(alm_flag2=1)display_string2(string5); disp_alm1();disp_alm2(); if(k4=0) alm_flag1=0; if(alm_flag1=0)&(alm_flag2=0)display_string2(string2); disp_alm1();disp_alm2(); if(alm_flag1=1)&(alm_flag2=0)display_string2(string3); disp_alm1();disp_alm2(); if(alm_flag1=0)&(alm_flag2=1)display_string2(string4); disp_alm1();disp_alm2(); if(alm_flag1=1)&(alm_flag2=1)display_string2(string5); disp_alm1();disp_alm2(); if(k6=0) ok=1; time(); alm_led1=1; /*/函数功能:调整闹铃2/*void set_atime2() alm_led2=0; delay(1000); ok=0; while(ok=0) if(k1=0)delay(100); if(k1=0)hh2+; if(hh2=24)hh2=0; delay(5); disp_alm2(); if(k2=0)delay(100); if(k2=0)mm2+; if(mm2=60)mm2=0; delay(5); disp_alm2(); if(k3=0) alm_flag2=1; if(alm_flag1=0)&(alm_flag2=0)display_string2(string2); disp_alm1();disp_alm2(); if(alm_flag1=1)&(alm_flag2=0)display_string2(string3); disp_alm1();disp_alm2(); if(alm_flag1=0)&(alm_flag2=1)display_string2(string4); disp_alm1();disp_alm2(); if(alm_flag1=1)&(alm_flag2=1)display_string2(string5); disp_alm1();disp_alm2(); if(k4=0) alm_flag2=0; if(alm_flag1=0)&(alm_flag2=0)display_string2(string2); disp_alm1();disp_alm2(); if(alm_flag1=1)&(alm_flag2=0)display_string2(string3); disp_alm1();disp_alm2(); if(alm_flag1=0)&(alm_flag2=1)display_string2(string4); disp_alm1();disp_alm2(); if(alm_flag1=1)&(alm_flag2=1)display_string2(string5); disp_alm1();disp_alm2(); if(k6=0) ok=1; time(); alm_led2=1; /*/函数功能:调整倒计时时间/*void set_countdown() write_com(0x01); display_string1(string6); display_string2(string7); ok=0; while(ok=0) conv(); if(k1=0)delay(100); if(k1=0)C_hour+; if(C_hour=24)C_hour=0; if(k2=0)delay(100); if(k2=0)C_min+; if(C_min=60)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度大型发电机组进口贸易合同
- 高三试卷:山东省临沂市2025届高三上学期教学质量检测考试暨期中考试(九五联考)数学
- 2025版现代农业大棚建设与租赁一体化服务合同
- 二零二五年度房屋修缮维修工程合同协议
- 2025版光纤熔接设备性能检测与认证合同
- 2025版场地地质环境调查与监测服务合同下载
- 2025版学术论文翻译服务合同范本正规范本
- 2025版新能源电池产品销售与服务合同范本
- 二零二五年度长租公寓融资租赁协议
- 2025版房屋租赁合同范本(含租赁物维修基金及物业管理费用)
- 公安基础知识培训课件
- 乡镇网络安全知识培训课件
- 驾驶员安全培训考试试题及答案
- 《礼仪规范教程》 课件 概述篇 以礼相待 第一课 礼仪的概述
- 2025年新疆焊工理论考试题库
- 2025年工会考试真题附答案
- 财产行为税法培训课件
- 2025年新版期权知识考试题库带答案
- 无锡市公安局梁溪分局招聘警务辅助人员57人笔试模拟试题参考答案详解
- 仪器对标管理办法
- 2025年山东省辅警招聘考试考试试题库含答案详解
评论
0/150
提交评论