1、设计目的
通过本课程设计,进一步了解课程设计的要求和写作过程,了解课程设计的研究方法,培养文献检索能力、创新能力、文字表达能力等。
本设计主电路都采用目前流行的简单的典型电路接法,简单实用、稳定廉价。本设计可起到一个很好的教学目的和实验目的,对于认识PIC单片机也有一定的好处,能更加熟悉单片机和其它芯片之间的通信。
2、设计的主要内容和要求
2.1主要内容
1)PIC16F87X系列单片机是美国微芯公司(Microchip)推出的单片机系列,采用精简指令集结构(RISC)的高性价比嵌入式控制器,其总线结构采取数据总线和指令线分离独立的哈佛(Harvard)结构。所以我们要先掌握精简指令集结构和哈佛结构的特点和用法。
2)实时时钟芯片DS1302和温度传感芯片DS18B20都是DALLAS公司出产的,都采用单总线数据传送方式,所以我们先要弄懂单总线传送方式是一个什么样的传送方式。
3)1602液晶芯片是一款常见的LCD,对它的读写我们要注意读写时序,还有PIC单片机速度比8051单片机要快,以前对1602写操作前不会检查忙否,但PIC一定要确认1602不忙才进行写操作。
4)PIC16F87X系列单片机资源很丰富,故控制寄存器较多,要注意运用,还有PIC16F87X系列单片机有些引角在开出厂时输入输出的是模拟信号,要对其控制寄存器进行设置。
2.2主要要求
1)设计要做到操作简单实用廉价;
2)要能显示秒、分、时、天、月、周、年、农历以及闹钟等信息,并能调整以上信息;
3)键盘控制调整时钟信息和显示要灵敏不能出现较大的延时,灵活,可移植性强,能够随时对电路进行改进。
3、整体设计方案
为提高设计效率,本设计拟将整个系统模块化。采用的整体设计方案如图3.1所示,整个系统由MCU[1]、显示电路[2],独立键盘电路[3]、DS1302实时时钟电路[4]、复位电路等部分组成。
图3.1整体设计框图
当电源开关打开后,系统电路初始化,一从DS1302实时时钟电路中读取一串时钟信息,二从DS18B20温度传感电路读取一串温度信息,然后,MCU系统对采集到的进行变换和处理,再通过LCD显示出来,完成一次显示过程。独立键盘与外部中断连接,当有键盘按下时,触发中断,进入中断服务子程序,子程序将会判断哪个键被按下了,有什么作用,要进行怎样的处理;复位键按下,系统将重新初始化,并再按上面所述执行下来。
4、硬件电路的设计
本设计中的万年历的硬件电路主要由MCU电路、实时时钟电路、独立键盘电路四部分组成:
4.1MCU电路的设计
主要元器件:PIC16F877A单片机,4MHz晶振、33pF电容、10K电阻、开关。
PIC16F87X系列单片机是美国微芯公司(Microchip)推出的单片机系列,采用精简指令集结构(RISC)的高性价比嵌入式控制器,其总线结构采取数据总线和指令线分离独立的哈佛(Harvard)结构,哈佛结构是数据存储器与程序存储器独立编址,也就是两种存储器位于不同的逻辑空间里,使得它在执行一条指令的同时,就可以提取下一条指令,因此具有很高的流水处理速度。其高速度、低电压工作,低功耗,强大驱动能力,低价OTP技术,体积小巧等都体现了单片机工业的新趋势;其FLASH在线编程功能可以极大地满足市场的需要,同时第三方开发的C语言开发工具,更使得研发工程师能够快速地开发升级产品,满足市场不断变化的需求。其节约成本的最优化设计,适于用量大、档次低、价格敏感的产品[4]。PIC16F877有40根接脚,每根接脚都有其特定功能,例如Pin11与Pin32(VDD)为正电源接脚,Pin12与Pin31(VSS)为地线接脚;而有些接脚有两种甚至三种以上功能,例如Pin2(RA0/AN0)代表PORTA的第一支接脚,在系统重置(Reset)后,可自动成为模拟输入接脚,接收模拟讯号,也可经由程序规划为数字输出输入接脚。PIC16F877引脚功能如图4.1所示。
图4.1MCU电路图
设计中以PIC16F877A单片机为主芯片,DS1302、DS18B20等为辅芯片,将结果在LCD上显示。具体总原理图如图4.2所示 。
图4.2总原理图电路图
4.2实时时钟电路的设计
主要元器件:DS1302、电容、5K\10K\20K电阻。DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路秒、分、时、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,公需用到三个口线:(1)RES(复位),(2)I/O(数据线),(3)SCLK(串行时钟)。时钟RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。
DS1302是由DS1202改进而来,Vcc1为可编程涓流充电电源,附加七个字节存储器。实时时钟具有能计算2100年之前的秒、分、时、日期、星期、月、年的能力、还有闰年调整的能力,这就使本来要通过复杂的算法来计算出的星期、闰年的计算简单了许多。
设计中我们要设计一个高稳定晶振电路,这里我们用二片电容和一个32.768MHz的晶振。具体电路连接如图4.3所示。
图4.3实时时钟电路图
4.3独立键盘和其它电路的设计
主要元器件:键盘、10千欧和100欧电阻、电源和地等等。键盘电路一般都是让端口检测低电平,有用扫描的方法检测哪个键有按下,也有用中断的方法检测。本设计中的独立键盘是前者,一般键盘可直接接地,但这里为了稳定起见,在挂键盘的端口用了个上拉电阻。具体电路连接如图4.4所示。
图4.4独立键盘电路图
5、软件设计
软件设计部分可分为:主程序、LCD显示子程序和DS1302实时时钟子程序、DS18B20温度计子程序、键盘服务子程序等。
5.1主程序设计
在主程序中,需要完成整体的功能构架并对各芯片的初始化,另外,在主程序模块中还需要设置定时器0,并对它们进行初始化。主程序一次循环流程图如图5.1所示。当打开电源开关时,各个模块初始化,然后显示固定在液晶上的用于美化显示的图形。之后读取温度信息,定时器0初始化,读取时间等信息,冒号闪烁,读取星期、农历信息,显示所有信息,结束一次循环。在实际运行时,显示完所有信息后,将返回到读取温度子函数前再往循环下执行。
图5.1主程序流程图
5.2键盘服务子程序设计
在主程序中,进入键盘服务程序后,开始扫描键盘,如果设置键没有键按下或是按下次数K=K%10=0,则本次扫描结束,若设置键按下次数K=K%10=1;则可通过加、减键调节秒;若设置键按下次数K=K%10=2,则可通过加、减键调节分;若设置键按下次数K=K%10=3,则可通过加、减键调节时;若设置键按下次数K=K%10=4,则可通过加、减键调节天;若设置键按下次数K=K%10=5,则可通过加、减键调节年;若设置键按下次数K=K%10=6,则可通过加、减键调节星期;若设置键按下次数K=K%10=7,则可通过加、减键调节闹铃开关;若闹铃关,则设置键按下次数K=K%10=8,将回到初始显示界面。若闹铃开,则设置键按下次数K=K%10=8,则可通过加、减键调节闹铃分;则可通过加、减键调节闹铃时;若设置键按下次数K=K%10=10,将回到初始显示界面。
图5.2独立键盘服务流程图
5.3LCD显示子程序设计
在LCD显示子程序中,初始化后,从LCD中读状态字,判断LCD是否在忙状态,不是则可向LCD写控制命令,再写数据,即显示数据。
图5.3LCD显示流程图
器材:LCD(LGM12641BS1R)一个
单片机PIC16F877A一个
红色法官二极管 一个
DS1302 一个
32768Hz的晶振一个
6pF的电容 二个
10k的电阻 五个
1k的电阻 四个
Button按键四个