《单片机三级项目报告.doc》由会员分享,可在线阅读,更多相关《单片机三级项目报告.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于单片机的智能电子钟系统仿真设计 教 务 处 2015年 10 月基于单片机的智能电子钟系统仿真设计(燕山大学 信息科学与工程学院)摘 要摘要:本课程三级项目是基于51系列单片机利用软件仿真设计一个简单的电子钟系统。以51系列单片机为核心,通过时钟芯片1302提供实时时间数据,通过温度传感器18B20提供实时温度数据,通过1602液晶显示屏显示时间温度等信息,以及蜂鸣器、指示灯等提供闹钟和上下午、半秒闪烁等信息。我们采用C语言,利用软件编写C语言程序并生成文件,用设计电路,将程序在中仿真,最终实现电子钟的设计。关键词:89c51单片机、闹钟报警、1302、时钟前 言本三级项目要求基于51系列
2、单片机利用软件仿真设计一个具有时间显示、按键调时、闹钟报警、温度测量等功能的电子钟系统。我们对电子钟的开发手段进行了分析,最终决定采用51系列单片机技术实现多功能智能电子钟系统,这种实现方法的优点是电路简单、性能可靠、实时性好、时间精确、操作简单、编程容易。我们利用软件进行仿真设计,这样不用制作实际电路便可以得出结果,便于检验电路及软件正确性,可以为以后制作实际电路做准备。另外这样制作出的电子钟系统可以应用到日常工作和生活中,也可以通过改装来提高性能或者进行功能扩充等操作。 该项目预期完成温度实时测量显示、时间实时显示、可设定闹钟、可调时、上下午指示、半秒指示等功能。1、课程设计题目与要求1.
3、1 设计题目基于单片机的简单电子钟系统仿真设计。1.2 设计要求要求基于51系列单片机利用软件仿真设计一个具有时间显示、按键调时、闹钟报警、温度测量等功能的电子钟系统,可实现六项基本功能分别如下:1) 时间显示:显示当前时间:小时、分钟、秒。2) 温度显示:显示当前环境温度。3) 上下午指示:采用两个发光二极管来指示上下午。4) 半秒提示:采用两个发光二极管,每隔半秒闪烁。5) 调时功能:采用三个按键(K13)来调整时间,步骤如下:a)按下K1键,开始调小时,同时2个小时数码管闪烁。b)按下K2键,小时加;按下K3键,小时减。c)小时调整好后,再按下K1键,开始调分钟,同时分钟数码管闪烁。d)
4、按下K2键,分钟加;按下K3键,分钟减。e)调整好分钟后,再按下K1键,调时结束。6) 闹钟功能:采用三个按键(K24)来调整闹钟,步骤如下:a)按下K4键,开始调小时,同时2个小时数码管闪烁。b)按下K2键,小时加;按下K3键,小时减。c)小时调整好,再按下K4键,开始调分钟,同时分钟数码管闪烁。d)按下K2键,分钟加;按下K3键,分钟减。e)调整好分钟后,再按下K4键,定闹结束。闹钟定时的时间到后,蜂鸣器/扬声器发出提示音。用户需按K24键来取消闹钟警告。2、系统的功能分析与设计2.1 系统的主要功能利用51单片机内部的定时/计数器、中断系统、以及按键和时钟芯片1302、18B20温度传感
5、器、1602液晶显示屏等元件,利用软件仿真设计一个具有时间显示、按键调时、闹钟报警、温度测量等功能的电子钟系统。2.2 系统的设计方案整个系统采用应用广泛的89C51作为控制芯片,利用1302获取时间,采用18B20实现温度的测量,利用1602液晶显示屏显示温度,时间等参数,利用单片机内部的定时器来实现数据的定时刷新。它的处理过程如下:首先初始化定时器以及温度传感器和时钟芯片,设定单片机内部的一个定时器为50产生一次中断,对时间和温度参数实现周期性刷新,然后读取温度,将温度值与设置的闹钟值等参数进行比较,并做出相应的动作。然后读取按键值,如果是设置键,则改变标志位,并进入相应项进行设置,若标志
6、位为初始状态,则显示时间及温度参数。在程序中,定时器采用中断方式工作,在中断服务程序中实现时间获取、温度获取、上下午判断、闹钟报警、以及半秒闪烁等功能。在主程序中需要对定时器、1302、18B20、1602进行初始化,然后循环进行按键检测并执行相应的功能。2.3 系统硬件设计2.3.1 原理框图此设计原理框图如下图所示,此电路包括以下九个部分:单片机,时钟电路,测温电路,按键电路,指示灯,复位电路,晶振电路,显示电路及蜂鸣器。图2-3-1 电子钟系统硬件电路组成框图2.3.2 电路图设计我们利用软件进行电路仿真。软件不仅具有其它工具软件的仿真功能,而且还能仿真单片机及外围器件。是目前比较好用的
7、仿真单片机及外围器件的工具。下图为我们设计的简单电子时钟的电路仿真图。图2-3-2 中设计的电子时钟系统原理图3、系统模块设计3.1 主控模块89C5189C51是美国公司生产的低功耗,高性能八位单片机。片内全部采用 技术,片内含4的可系统编程的只读程序存储器,器件采用公司的高密度、非易失性存储技术生产,完全兼容公司生产的51系列单片机的指令系统及引脚。图3-1-1 89C51单片机3.2 时钟模块我们采用1302实现时间显示,1302 是一种高性能、低功耗、带的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与进行同步通信
8、,并可采用突发方式一次传送多个字节的时钟信号或数据。1302内部有一个318的用于临时性存放数据的寄存器。芯片引脚及在系统中连接如下图 图3-2-1. 1302芯片接线图3.3 温度显示模块此模块我们采用18B20温度传感器,它是美国公司推出的系列数字温度传感器,每一个8B20包括一个唯一的64位长的序号,该序号值存放在 8B20内部的 (只读存储器)中,开始8位是产品类型编码(8B20编码均为10H),接着的48位是每个器件唯一的序号,最后8位是前面56位的(循环冗余校验)码,8B20 中还有用于贮存测得的温度值的两个8位存储器,编号为0号和1号,1号存储器存放温度值的符号,如果温度为负,则
9、1号存储器8位全为1,否则全为0 ;0号存储器用于存放温度值的补码,(最低位)的1表示 0.5,将存储器中的二进制数求补再转换成十进制数并除以2就得到被测温度值(-55125 )。芯片引脚及在系统中连接如下图图3-3-1 18B20芯片接线图3.4 复位、指示灯和按键模块3.4.1 复位电路复位电路主要由型号为10的电解电容和220的电阻以及微动开关构成,当开关按下时引脚为高电平1,断开时引脚为低电平0。系统中复位电路连接如下图图3-4-1 复位电路3.4.2 半秒显示和上下午显示电路指示灯电路主要由四个发光二极管组成,低电平有效,灯的亮灭显示控制端,P3.0口控制上午指示灯,P3.1口控制下
10、午指示灯,P3.6口控制前半秒指示灯,P3.7口控制后半秒指示灯。由于二极管压降小,承受电流能力弱。所以加上一个1K的限流电阻,防止二极管被烧坏。系统中指示灯电路连接如下图 图3-4-2 指示灯电路3.4.3 按键电路时钟、加、减、闹钟键分别接P3.2、P3.3 、P3.4、P3.5端,时钟键(K1)选择设置的年、月、日、时、分、秒、星期,闹钟键(K4)对闹钟的定时的时、分、秒进行设置,加键(K2)对选中的项的数据加1,减键(K3)对选中的项的数据减1。系统中按键电路连接如下图图3-4-3按键电路3.5 闹钟模块此模块我们利用扬声器电路为系统闹钟部分的发声部分,采用灌电流的方式,省去了外加驱动
11、的麻烦,同时能够获得更大的驱动功率。扬声器电路连接如下图图3-5-1扬声器电路4、软件设计4.1 主程序设计在主程序中首先初始化定时器以及时钟芯片和温度传感器,设定单片机内部的一个定时器为50产生一次中断,以便对时间和温度参数实现周期性刷新。然后读取按键值,如果是设置键,则改变标志位,并进入相应的项进行设置,若标志位为初始状态,则显示时间及温度参数。 主程序流程图:图4-1-1 系统程序流程图4.2 定时器中断子程序设计定时器每隔50产生一次中断,调用一次中断子程序。程序首先获取温度、时间、然后将计数器值加1,判断计数器值是否等于10,如果等于则清空计数器并将半秒指示灯取反。然后判断时间是否等
12、于定时时间,如果等于则使蜂鸣器响,否则关闭蜂鸣器。然后判断是否为下午,如果为下午,则关闭上午指示灯,打开下午指示灯,否则关闭下午指示灯打开上午指示灯,之后返回主程序。图4-2-1为中断子程序流程图。图4-2-1 中断子程序流程图5、系统调试5.1 软件调试 C51是美国 公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境()将这些部分组合在一起。如果使用C语言编程,其方便易用的集成环境、强大的软件仿真调试工
13、具也会使得编程效率大大提高。51进行程序编写调试图5-1-1 软件调试图在软件调试上既没有错误也没有警告,说明我们的程序没有语法错误,逻辑问题需要进行软硬件联调仿真后可知。5.2 进行系统仿真在 的菜单中选择,运行程序,系统仿真结果如下图所示:图5-2-1 系统联调仿真结果图实验结果基本按照预期实现要求,在系统的显示中我们没有利用数码管,而是利用1602进行显示。虽然1602驱动起来更加麻烦,但它显示的字符多,而且清晰,功能较为齐全,所以我们使用1602进行显示。6、设计总结 经过几周时间对单片机的知识学习及总结,通过该项目的实施使我们加深对单片机基础知识的理解,并初步具备运用所学知识进行电子
14、钟系统设计的能力,相关标准、手册的查阅能力等,通过团队合作与沟通,培养我们的责任感和团队合作精神,以及项目组织与管理、交流表达能力。在此过程中我们把项目分成了硬件和软件两大模块分工合作。硬件部分好入手,电路也较简单,主要涉及的是简单的核心电路以及1302、18B20、1602电路,连接起来并不复杂。整个设计过程中遇到的最大问题是软件的编写,软件部分细分为了时钟芯片驱动程序、温度传感器驱动程序、显示模块驱动程序等几大难点,最后把几个模块整合在主程序模块中,最终实现了电子时钟的功能。在此次过程中,我们将在课程中学到的理论知识运用到实际作品设计、操作中,更进一步地熟悉了单片机芯片的结构及掌握了其工作
15、原理和具体的使用方法与相关元器件的参数计算方法、使用方法,了解了电路的开发和制作及课程设计报告的编写。加深了对相关理论知识及专业知识的掌握度,增强自身的动手能力,锻炼及提高了理解问题、分析问题、解决问题的能力,更深刻的体会到了理论联系实际的重要性,在整个设计过程中还学到了团体合作精神和分析、解决问题的重要性。7 参考文献1 黄正谨综合电子设计与实践M东南大学出版社2002-32 张毅刚 新编51单片机应用设计,哈尔滨工业大学出版社,20033 蔡希彪,曹洪奎;单片机电子时钟系统的设计与仿真J;中国科技信息;2007年04期4 杨欣等,电子设计从零开始,清华大学出版社,20055胡汉才单片机原理
16、及其接口技术M.北京:清华大学出版社,1996.89110.8 程序 52 P0 1602液晶数据/地址引脚 20; 1602读 21; 1602写 22; 1602使能 13; 18B20温度传感器引脚时钟芯片引脚定义 10; 11; 12;独立按键引脚定义 32; 33; 34; 35;第0位 第八位 位操作 00; 77;报警指示引脚定义 36;半秒指示灯 37; 30;上下午指示灯 31; 14;闹钟时钟芯片寄存器定义 0x80 0x82 0x84 0x86 0x88 0x8a 0x8c 按键状态 按键键值/*逻辑变量定义*/ 000定义温度值变量 00000000定义闹钟变量 000
17、0000定义时间变量/*延时函数部分*/ ( n) 12晶振,n微秒精确软件延时 0; (0) ( n)12晶振,n毫秒精确软件延时(0) 12;169;/*1602函数部分*/ ( ) 1602写命令函数(100);0; 0; 1; (100); 0;(100); ( ) 1602写数据函数(100);1; 0; 1; (100);0;(100); ( )1602写字符函数 X:015 Y:1,2 0;(1)0x80;00; ( *)1602写一串字符 X:015 Y:1,2 0;(1)0x80;00;(*0) ()1602液晶初始化(100);(0x38);(100);(0x0c);(10
18、0);(0x06);(100);(0x01);(1); /*温度传感器函数部分*/ 18B20( n)温度传感器最小单位延时 00;(0)(1200); 18B20() 温度传感器复位操作 0;0;103;(i0)1;4;(i0) 18B20() 读温度传感器一位数据信息 0; 0;0;1;8;(i0) 18B20() 读温度传感器八位数据信息 000; (1=8) 18B20(); (j1); 18B20( ) 写温度传感器八位数据信息 0; 0; 0;(11;() 写10;1;8;(i0)0; 写08;(i0)1; 18B20() 温度转换18B20();18B20(1);18B20(0)
19、; 18B20(0x44); 18B20() 读取温度寄存器转换数据 0; 00; 0;18B20();18B20(1);18B20(0);18B20(0);18B20();18B20();0)0;0;1;1; 1302()读时钟芯片八位数据信息 0;1;(80)7;1;0;1; 1302( )在时钟芯片指定位置写指定数据0;0;1;1302();1302();1;0; 1302( )读取时钟芯片指定地址的数据信息0;0;1;1302();1302();1;0; ( )时钟芯片数据转换4;(*10+(0x0F); 1302() 时钟芯片初始化操作0;0;1302(0x8e,0x00); 130
20、2(0x8e,0x80); 1302( ) 设置时钟芯片参数信息 0; 10;10;*16;1302(0x8E,0X00);1302(0x7f); 1302(0x8E,0x80); 1302()提取时钟芯片时间信息(1302(0x81);(1302(0x83);(1302(0x85);(1302(0x87);(1302(0x89);(1302(0x8d);(1302(0x8b);/*显示函数函数部分*/ () 年月日信息显示 16=0;0=2;1=0;2=(10)+0x30;3=(10)+0x30;4=-; 5=(10)+0x30;6=(10)+0x30;7=-;8=(10)+0x30;9=(
21、10)+0x30;10= ;11=W;12=126;13=;(0,1); ()时分秒温度信息显示 16=0;0= ;1=(10)+0x30;2=(10)+0x30;3=:; 4=(10)+0x30;5=(10)+0x30;6=:;7=(10)+0x30;8=(10)+0x30;9= ;10100+0;11100/10+0;12=.;1310+0;14=223;15=C;(0,2);/*参数设置函数部分*/ ()设置年参数1302(0x8D);(4)*10+(0x0f);(500);(=99)98;1;1302();(0,1, );(4,2,2);(5,2,0);(6,210+0x30);(7,
22、210+0x30); ()设置月参数1302(0x89);(4)*10+(0x0f);(500);(=12)11;1;1302();(0,1, );(6,210+0x30);(7,210+0x30); ()设置日参数1302(0x87);(4)*10+(0x0f);(500);(=30)29;1;1302();(0,1, );(6,210+0x30);(7,210+0x30); ()设置周期参数1302(0x8b);(4)*10+(0x0f);(500);(=7)6;1;1302();(0,1, );(6,210+0x30);(7,210+0x30); ()设置小时参数1302(0x85);(
23、4)*10+(0x0f);(500);(=23)22;1;1302();(0,1, );(6,210+0x30);(7,210+0x30); ()设置分钟参数1302(0x83);(4)*10+(0x0f);(500);(=59)58;1;1302();(0,1, );(6,210+0x30);(7,210+0x30); ()设置闹钟小时参数(500);(=23)22;1;(0,1, );(6,210+0x30);(7,210+0x30); ()设置闹钟分钟参数(500);(=59)58;1;(0,1, );(6,210+0x30);(7,210+0x30);/*读取按键值函数部分*/ ()读取按键键值(500);(2)(0,1, );(0,2, );(2)(500);(4)*10+(0x0f);1302(0x83);(4)*10+(0x0f);1;0;(=12)0;1;1;0;/*初始化函数部分*/ ()外围硬件初始化 1302(); = 1; = 0;/*主程序部分函数*/(1)