《PIC单片机》 课程设计
二○一四年十二月二十七日
目 录
1、课程设计目的………………………………………………………1 2、课程设计题目描述和要求…………………………………………1 3、课程设计报告内容…………………………………………………1 4、结论…………………………………………………………………9 5、参考目录……………………………………………………………10
1.课程设计目的
1、《PIC单片机课程设计》是电气工程与自动化专业一门重要的专业实践课,通过课程设计能够进一步熟悉PIC单片机原理与应用,巩固并提高对这学期PIC单片机知识的学习和应用;
2、熟悉对PIC16F887各个模块的编程与调试,最后综合各个模块,最后综合各个模块达到提高综合实践水平的能力;
3、掌握实验板上的操作和运用,学会使用PICKIT3下载器进行现场的实物的调试;
2.课程设计题目描述和要求
1、利用 DS1307 时钟芯片,LCD液晶显示屏,TC74 温度传感器,蜂鸣器,按键做一个实时时钟,将时间和温度实时的显示在液晶上。编写相应的程序,最终可以在仿真软件上正常运行,可以在单片机开发板实物上也正常的运行,并且能脱机运行。
2、在时钟和温度实时显示的过程中,允许外部的按键中断,通过按键可以对时间进行修改,也可以设定闹钟时间,实现闹钟报警。
3、设计出硬件电路图,设计出软件编程方法,写出源代码,用PROTEUS进仿真在软件仿真可行后,下载到实验板上进行演示。
3.课程设计报告内容
运用PIC16F887芯片、DS1307时钟芯片和TC74温度传感器,用C语言编程,通过ICD2烧写进芯片,在LCD液晶显示屏上实现时间显示、运行的功能和温度显示功能。液晶显示屏显示着年、月、日、时、分、秒、星期。数字钟有调整时间的功能,通过对按键的操作可以对时间进行调整以及设定闹钟。 3.1系统功能说明
显示屏分两行显示,第一行显示日期:年/月/日、星期,第二行显示格式为时间(时:分:秒)、温度。显示秒由00一直加到59,分钟由00加到59,小时采用24小时制,由00加到23,星期由1一直加到7,日由01一直加到31(或30、29、28),月由01一直加到12,年由2000一直加到2099,温度为℃。
1
按键操作时,按键RB0按下选择要修改的部分;按键RB1按下时,数字加;按键RB2按下时,数字减;按键RB3可以进入闹钟设定模式。
3.2设计步骤
1、按照题目要求设计仿真图; 2、对数字钟各个模块进行编程; 3、将程序写入芯片,用仿真图仿真;
4、若仿真图可实现,则把程序下载到实验板上运行; 5、根据实验板情况进行调试。
3.3 硬件电路的设计 3.3.1 总电路图
根据所要实现的预期功能,硬件必须要有最小系统模块、LCD显示模块、时钟模块、闹铃模块、温度模块、按键模块等。根据所提供的实验板资料,可以设计如下电路(proteus图):
2
3.3.2 单片机最小系统模块
本次课程设计的最小系统包括16F887单片机、复位模块、4M外部晶振等部件组成如上最基本电路,其中芯片供电的引脚略去。本课设板所用的单片机为PIC16F887,是877A 的升级,其主要参数与887A类似,但使用更为灵活、有的参数更为细化(如异步通信的波特率为双字节),而价格比887A更低,887引脚与877A兼容。
3.3.3 时钟和温度模块的设计
DS1307芯片通过SCL连接RC3,SDA连接RC4,跟887进行通信。通信过程中,先判断时钟芯片是否工作,若“秒”的最高位“CH”为1,说明时钟还未运行,则通过写程序,对时钟芯片赋初值同时使“秒”的最高位“CH”为0。时钟芯片DS1307工作后,在引脚7发出1Hz脉冲,引脚7连接一个LED灯。脉冲的输出,会使LED灯一亮一灭,可通过LED灯的亮暗可判断时钟芯片DS1307是否
3
运行。
时钟芯片 DS1307:
DS1307 是实时时钟芯片,它提供秒、分、时、日、月、年和星期等数据。通常时钟芯片是要接备用电池,当主电源掉电时,备用电源为DS1307 提供维持电源此电源只供DS1307 使用,此时时钟仍正常运行,时钟晶振是典型的32.768kHz。 温度模块:
TC74也是IIC器件,它一出厂就配有一个固定的地址,单片机通过寻址来实现对不同IIC器件的访问和操作。单片机只要有一个IIC接口,就可以实现对外围不同地址的IIC器件进行操作。TC74温度范围为-40℃~+125℃, 在+25℃~+85℃范围的精度为±2℃(最大值),在0℃~+25℃ 的范围精度为±3℃(最大值)。TC74的默认的7位地址为0b1001101。TC74的读温度命令是0b00000000,在温度数据寄存器中,每单位值代表1℃ ,数据用二进制补码格式。
3.3.4 LCD液晶显示模块
本课设所使用的字符型LCD型号为YB1602,1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点,采用4位接线法,RD口的低四位和LCD的高4位连接,RD4、RD5、RD6用于读写和使能控制.上电后要延时15ms 后,才能进行初始。
4
3.3.5 闹钟模块的设计
通过设定闹钟时间将闹钟时间存储在CCCC[]数组中,当时钟时间与闹钟时间相等时启动蜂鸣器,蜂鸣器发出声响。
3.3.6 按键模块
按键采用普通按键,按键另一端接B口,由于B口可通过程序编写为弱上拉,所以仿真图中按键不需画出上拉电阻。RB0代表时间设置,RB1代表加,RB2代表减,RB3代表闹钟设置。
3.4软件编程的设计及其说明 3.4.1 软件设计执行的总体流程 程序流程图:
5
程序流程图
对各模块的初始化,和对单片机的端口的初始化 开始
判断时钟是否
工作
否
是 时钟初始化 读取温度和时间寄存
器值
判断是否到达 是 闹钟设定时间 蜂鸣器响 否 是 判断是否有闹
钟设定中断 进入闹钟设定 模式,频幕静止 否
是 是 判断是否有选判断是否有选 择调时中断 择调时中断 根据不同的中断类型,进根据不同的中断类型,进 否 入不同的中断子程序, 对 否 入不同的中断子程序,对 时钟进行相应的修改 闹钟进行相应的修改 在LCD上显示出温度 和时间值
结束 6 3.4.2 温度传感器 TC74 程序操作 //温度传感器模块宏定义
#define TC74_ADD 0b1001000 //TC74的7位地址 #define RTR 0b00000000 //TC74的读温度命令 signed char READ_T(void) {
signed char R2;
SEN=1; //while (SEN==1); //IIC_SEND(TC74_ADD<<1); //IIC_SEND(RTR); //RSEN=1; //while (RSEN==1); //IIC_SEND((TC74_ADD<<1)+1); //RCEN=1; //while (RCEN==1); //R2=SSPBUF; //PEN=1; //while(PEN==0); return(R2); }
TC74的读温度的步骤如下: 1) 发送启始位;
2) 发送TC74的7位地址+0(写);3) 发送TC74的写命令(RTR); 4) 重新开始条件;
5) 发送TC74的7位地址+1(读);6) 接收使能,接收TC74的温度; 7) 发送停止条件;
开始条件
检测开始条件是否完成?送TC74地址(写) 写RTR命令(写) 重新开始条件 等待重新开始条件结束 发送TC74地址(读) 接收使能 等待接收完成 接收数据存入R2 停止位 7
3.4.3 闹钟模块的程序操作 #define FMQ RC1 //=====蜂鸣器的初始化 void SPEAKER_CSH(void) {
TRISC1=0; FMQ=0; }
if((CCCC[2]==AAAA[2])&&(CCCC[1]==AAAA[1])&&(c==2)) { FMQ=1; } //当设定的时间到时,蜂鸣器响 else
{ FMQ=0; }
3.4.4时钟芯片 DS1307 的程序操作 //========对DS1307进行初始化 void DS1307_CSH() {
READ_DS1307(0,1);; //读秒寄存器
WRITE_DS1307(0x07,0x10); //SOUT输出1HZ的方波频率 if((AAAA[0]&0x80)==0x80) //判断位秒寄存器最高位是否为1 { LCD_WRITE(0b00000001,COM); //清屏 WRITE_DS1307(0x07,0x10); WRITE_DS1307(0x00,0x00); WRITE_DS1307(0x01,0x00);
//写控制字到LCD //00秒 //00分
WRITE_DS1307(0x02,0x08); //08时 WRITE_DS1307(0x03,0x06); WRITE_DS1307(0x04,0x01); WRITE_DS1307(0x05,0x11); WRITE_DS1307(0x06,0x14);
//星期6 //01日 //11月 //14年}
8
3.5 设计成果
LCD显示屏第一行前面的字符显示显示日期,第一行后面的字符显示星期几;第二行前面的字符显示时间,后面的字符当前温度值。当按下RB3按键时,屏幕静止进入闹钟设定模式,通过设定时间可实现闹钟提醒功能。 目标达成情况:
1、单片机液晶显示屏可以实时的显示时间和温度(达到); 2、当时间达到某个闹钟设定值时蜂鸣器响(达到); 3、能够实现脱机运行(达到); 4、可区分闰年、闰月(达到); 4.结论
4.1 调试问题分析
用PIC16F887实验板,通过PIC3连接,进行在线调试和脱机运行,出现了一些问题,经过独立思考以及和老师同学的交流后得以解决。
问题一:不能掉电保护,每次脱机或者复位都会进行时钟初始化; 解决办法:DS1307初始化前用(AAAA[0]&0x80)==0x80先进行判断秒的最高位是否为1,为1则进行初始化;
问题二:闰年、闰月识别错误;
解决办法:用数组DDDD[]先储存闰年年份,当时钟时间AAAA[]=DDDD[]时为闰年;
4.2 实验所得和体会
这次的数字钟是我第一次完成的课程设计,让我懂得了实践是验证理论的最好途径。通过该课程设计,进一步掌握了PIC单片机的应用,熟练PIC单片机的C程序的编写与调试,让我对于理论课上一些疑惑的地方豁然开朗,加深了对于理论课程的理解。整个课程设计下来,认识了LCD 液晶显示、TC74温度、实时时
9
钟显示等模块的应用,懂得了对时钟芯片、温度传感器的操作方法及原理,懂得了对相应模块的简单编程。实物仿真时,学会了怎么使用PICKIT3下载器进行程序的烧写,更懂得了遇到问题是要耐心查找错误,先自己独立思考解决,如果自己不能解决要积极与同学讨论、向老师请教。
数字钟的成功设计也激发了我对单片机的浓厚兴趣,积累了一定的设计经验。让我感受到了单片机的伟大之处,可以依据人的思维进行各种运算和工作,学好单片机对我们以后的工作以及日常应用都有很大的作用。
这次的课程设计接近尾声,感谢江和老师的耐心指导,让我的第一次课程设计得以成功完成,让我知道如何发现问题和解决问题,为我以后更多的实践乃至工作奠定了良好基础。
五:参考书目:
[1]江和,《PIC16系列单片机C程序设计与PROTEUS仿真》 ,北京航空航天大学出版社,2010
[2]江和,《福州大学PIC单片机课程设计指导书》,2012年8月
10
因篇幅问题不能全部显示,请点此查看更多更全内容