《(电子行业企业管理)毕业论文——基于PIC16F877的智能电子钟设计精品》由会员分享,可在线阅读,更多相关《(电子行业企业管理)毕业论文——基于PIC16F877的智能电子钟设计精品(21页珍藏版)》请在金锄头文库上搜索。
1、基于PIC16F877的智能电子钟设计1 引言随着电子技术产业结构调整,生产工艺的飞速发展,人们生活水平的不断提高,家用电器逐渐普及,而随着人们对周围环境便利程度的要求,市场对于智能时钟控制系统的需求也越来越大。智能钟应实现的主要功能为:能实现二十四小时制的时分秒显示,具有快速手动校时电路,具有整点报时功能,具有闹钟表功能(可设置时分),具有倒计时功能。2 设计原理及方案 2.1 设计原理单片机是一门技术性、应用性很强的学科,实践教学是它的一个极为重要的环节。不论是硬件扩展、接口应用还是编程方法、程序调试,都离不开实践。本次设计的目的是通过完成一个涉及单片机都种资源应用并具有综合功能的小系统目
2、标板的设计与编程应用,能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件 编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。 该电子时钟不但具有显示时、分、秒的作用,而且用按键还可以实现时间的调整和闹铃的设定。本次综合实践完成了在单片机数据采集与定时系统的硬件电路设计后的基础上,焊接制作电路板,完成该系统的软件设计与调试。待仿真成功后,再将程序烧写入单片机中。 2.2 设计方案系统结构整个电子时钟系统电路可分为五大部分:中央处理单元(CPU)、电源电路部分、显示部分、键盘输入
3、部分。系统由PIC16F877、LED 数码管、按键、发光二极管等部分构成,能实现时间的调整、定时时间的设定,输出等功能。系统的功能选择由SB0、SB1、SB2、SB3、SB4 完成。其中SB0 为时间校对,定时器调整功能键,按SB 0 进入调整状态。SB1 为功能切换键。第一轮按动 SB1 依次进入一路、二路、三路定时时间设置提示程序,按SB3 进入各路定时调整状态。定时时间到,二极管发亮。到了关断时间后灭掉。如果不进入继续按SB1 键,依次进入时间年位校对、月位校对、日位校对、时位校对、分位校对、秒位校对状态。不管是进入那种状态,按动SB2 皆可以使被调整位进行不进位增量加1 变化。各预置
4、量设置完成后,系统将所有的设置存入RAM 中,按SB1 退出调整状态。上电后,系统自动进入计时状态,起始于00 时 00 分。SB4 为年月日显示转换键,可使原来显示时分秒转换显示年月日。3 硬件设计3.1 原理图设计智能钟原理图如图3.1所示图3.1 智能钟原理图3.2 元器件选择3.2.1 中央处理单元 CPU选用PIC16F877对整个系统进行控制:1)它将定时数据输出到LED,实现时间的显示; 2)根据键盘输入调用相应键处理子程序,实现时间的调整和闹铃的设定; 3.2.2 电源电路部分在各种电子设备中,直流稳压电源是必不可少的组成部分,它是电子设备唯一能量来源,它的设计思路是根据我们以
5、前学过的模电电子技术,要想得到我们所要的+6V输出电压,就需将交流220V的电压经过变压器、整流电路、滤波电路和稳压电路四个部分。 3.2.3 显示部分 显示部分是整个电子时钟最为重要的部分,共需要位LED显示器。采用动态显示方式,所谓动态显示方式是时 间(或温度)数字在LED上一个一个逐个显示,它是通过位选端控制在哪个LED上显示数字,由于这些LED数字显示之间的时间非常的短,使的人眼看来它们是一起显示时间数字的,并且动态显示方式所用的接口少,节省了CPU的管脚。由于端口的问题以及动态显示方式的优越性,在此设计的连接方式上采用共阴极接法。显示器LED有段选和位选两个端口,首先说段选端,它由L
6、ED八个端口构成,通过对这八个端口输入的不同的二进制数据使得它的时间显示也不同,从而可以得到我们所要的时间显示3.2.4 位选电阻与段选电阻位选电阻=(VCC-0.7-0.3)/IB=(5-0.7-0.3)/(48/80) =6.66千欧,取6.8千欧。段选电阻=(VCC-VCEO-VD-0.3)/IB=(5-0.3-2-0.3)/6=400欧,取390欧。其中,单片机I/O口为CMOS电路,均通过一个FET(场效应管)接地,因此在计算时均应减去0.3V。3.2.5 蜂鸣器电阻蜂鸣器选用ZC17040,额定电压3V,额定电流小于1毫安。限流电阻R=(5V-3V-0.3V)/1mA=1.7(千欧
7、)取电阻为2千欧。 3.3 PCB图设计智能钟PCB图如图3.2所示图3.2 智能钟PCB图4 软件设计4.1 流程图4.1.1 主程序流程图如图4.1.14.1.2 时钟计时子程序流程图如图4.1.2 图4.1.1 智能钟主程序流程图 图4.1.2 时钟计时子程序流程图4.1.3 键盘扫描子程序流程图4.1.4 R0中断服务子程序流图图4.1.3 键盘扫描流程图 图4.1.4 中断服务子程序流程图4.2 源程序见附录总 结 嵌入式测控系统设计及实践是一门实践性比较强的课程,也是我在大学期间学得最认真的一门课程。通过这门课,使我受益匪浅,主要表现在以下几个方面: (1) 通过这对这门课的学习,
8、我基本掌握了单片机原理,学会了用Protel 99 SE画原理图并生成相应的PCB,学会了嵌入式系统的开发流程,并能够利用51或PIC系列单片机去设计一个小型的嵌入式系统。而且我也充分认识到了单片机的重要性,对单片机开发产生了浓厚的兴趣。 (2) 我们这一组是用PIC16F877去做,但做的过程中我们发现了很多问题,比如电子元器件的选择与购买,以及电路的焊接。由此我认为,在单片机开发中,经验往往是很重要的,而多去做实践有利于经验的积累,这应该是我们这门课程与设计的意义所在。 (3)上完这门课后,我对单片机的总体感觉是:单片机比较适合做产品研发或系统设计,而我们以前学的PLC则比较适合于工程控制
9、,它比用单片机控制要简单一些。相比PLC,用单片机做系统设计要难很多,而且网上的相关资料显示,PLC比较适合于环境比较恶劣的工业现场。因此,学会用PLC做控制也是很重要的。但我发现,PLC与单片机也有某些类似的地方,而且,学完单片机后,我发现PLC变得容易了。由此我发现,其实任何学科都是相通的。 (4)我们以前学的是51系列单片机,而这次我们用PIC系列。通过对比我们发现,51与PIC的在原理与编程方面有着类似的地方,尽管它的的指令系统不同,但它们基本思想是相同的,因此我们没有花很长时间就从51过渡到了PIC。由此我发现,其实51也好,PIC也好,只要学会并精通其中的一种,对其它类型的8位单片
10、机也能触类旁通,以不变应万变了。8位单片机我学会了51和PIC,我下一步的计划是学习32位的ARM,因为我认为,32位单片机相比8位单片机有着更强大的功能和更好的发展前景。致 谢在做学习嵌入式系统设计的这段时间里,我们曾经遇到过很多的难题,也产生了很多的疑问。但在老师和同学们的帮助以及自己的不断努力下,终于成功地完成了这门课的学习。在这里,我们要首先感谢*老师,他给了我们很大的支持、鼓励和帮助。在我们遇到问题的时候,他们总是很及时地给我们指点迷津,提出建议,使我们不致于在盲区内停留太久。在学习过程中,老师以其严谨求实的治学态度,高度的敬业精神,孜孜以求的工作作风和大胆创新的进取精神对我们影响很
11、大。他们渊博的知识,开阔的视野和敏锐的思维让我们敬佩不已。当然,在此期间我同组的同学们也是纷纷帮我们出谋划策,提出很真诚的建议,使我们受益匪浅,请我们表达对你们深深地谢意。参 考 文 献1 赵佩华.单片机接口技术及应用.北京:机械工业出版社,2003.12 谢宜仁,谢伟,谢东辰.单片机使用技术问答.北京:人民邮电出版社,2003.23 薛宗祥,鹿树理,朱惠英. 8位单片机原理与应用. 北京:北京航空航天大学出版社,1999.94 何立民.MCS-51系列单片机应用系统设计. 北京:北京航空航天大学出版社, 2002.75 李荣正.PIC单片机原理与应用(第2版). 北京:北京航空航天大学出版社
12、,2005.121附录源程序:/shizhong.h,头文件。/*功能:利用PIC16F877做的电子时钟程序*/shizhong.h文件,主要实现预编译、函数的申明以及全局变量的定义。#define uchar unsigned char/在程序中用uchar代替无符号字符型数据#define uint unsigned int/在程序中用uint代替无符号整型数据#define DELAY_VALUE 1/定义数码管显示延时值#define KEY_DELAY_VALUE 3/定义按键去抖动延时值#define speaker RD6/蜂鸣器#define LED RD7/LED#defi
13、ne sw1 RB1/按键1#define sw2 RB2/按键2#define sw3 RB4/按键3#define sw4 RB5/按键4#define smg1RD0/数码管1的位选#define smg2RD1/数码管2的位选#define smg3RD2/数码管3的位选#define smg4RD3/数码管4的位选#define smg5RD4/数码管5的位选#define smg6RD5/数码管6的位选void interrupt tmr0(void);/申明定时器中断函数void PORT_INIT(void);/申明端口初始化函数void TMR0_INIT(void);/申明定时器初始化函数void Time_Tran(void);/申明时间数值个时位分离函数void Time_Dis(void);/申明时间显示函数void Display(uchar i,uchar num);/申明数码管显示函数void Delay(uint k);/申明延时函数void Time_init(void);/申明