《PIC单片机课程设计》-数字钟设计报告.doc_第1页
《PIC单片机课程设计》-数字钟设计报告.doc_第2页
《PIC单片机课程设计》-数字钟设计报告.doc_第3页
《PIC单片机课程设计》-数字钟设计报告.doc_第4页
《PIC单片机课程设计》-数字钟设计报告.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

X X X X PIC单片机课程设计数字钟设计报告学生姓名: x x x 学 号: * 专 业: * 班 级: * 指导教师: * 二一二 年 12 月 16 日目 录1. 课程设计目的22. 课程设计要求23. 课程设计内容24. 问题分析65. 设计体会66. 参考书目67. 附:PIC程序及仿真图 71.课程设计目的1 进一步熟悉PIC单片机原理与应用;2 巩固并提高对这学期PIC单片机知识的学习和应用;3 熟悉对PIC16F887的编程;4 掌握实验板上的操作和运用;5 了解数字钟的组成和原理,编写程序并在实验板上运行。2. 课程设计要求1) 运用所学的PIC单片机知识,对PIC16F887进行编程,实现数字钟的功能。2) 在软件仿真可行后,下载到实验板上进行演示。3) 在基本功能实现的基础上,可以适当的添加一些附加功能。4) 设计完毕后,总结和整理资料,写成设计报告。3. 课程设计内容运用PIC16F887芯片和DS1307时钟芯片,用C语言编程,通过ICD2烧写进芯片,在1602液晶显示屏上实现时间显示、运行的功能称为数字钟。液晶显示屏显示着年、月、日、时、分、秒、星期。数字钟有调整时间的功能,通过对按键的操作可以对时间进行调整。3.1系统功能说明显示屏分两行显示,第一行显示日期:年月日、星期,第二行显示格式为时间(时:分:秒)。显示秒由00一直加到59,分钟由00加到59,小时采用24小时制,由00加到23,星期由1一直加到7,日由01一直加到31,月由01一直加到12,年由2000一直加到2099。按键操作时,按键S1按下时,数字加;按键S5按下时,数字减;按键S9按下时,位左移;按键S13按下时,位右移。3.2设计步骤1、先画好仿真图;2、把数字钟分为几个模块,分别完成一个一个模块的编程;3、各个模块程序编写完成后,用仿真图仿真;4、若仿真图可实现,则把各个模块程序下载到实验板上运行;5、各个模块完成后再把各个模块串联起来,进行调试。3.3设计原理由DS1307芯片完成时间的运行,通过IIC通信,与887单片机进行数据传输,887再把接收到的数据通过D口发送到液晶显示屏,并显示出来。按键接B口,采用循环扫描的方式,读取按键状态,并写入时钟芯片设置时间。3.4设计思路与仿真图数字钟的程序大致分为3个模块,可以逐个编程和仿真。仿真完毕后,下载到实验板上,进行调试和运行。【1】液晶显示模块:仿真图中显示屏用LM016L代替实验板中的LCD YB1602A,采用4位数据线方式与887进行数据传输,采用背光显示。程序编写步骤:1 读取程序;2 忙检测程序;3 写入程序;4 初始化程序;5 数据显示程序。先定义两个常数组“2012-00-00 000”和“00:00:00”,通过编写程序显示在显示屏上,仿真后的图:【2】IIC读写时钟模块:在仿真软件中,R20、R21改为数字型电阻。DS1307芯片通过SCL连接RC3,SDA连接RC4,跟887进行通信。通信过程中,先判断时钟芯片是否工作,若不工作,则通过写程序,对时钟芯片赋初值。时钟芯片DS1307工作后,在引脚7发出1Hz脉冲,引脚7连接一个LED灯。脉冲的输出,会使LED灯一亮一灭,可通过LED灯的亮暗可判断时钟芯片DS1307是否运行。用TIM0定时500ms,溢出中断,每中断一次,887读取时钟芯片里的数据,然后显示在液晶屏上。相关的电路图:时钟芯片PIC16F887芯片程序编写步骤:1 IIC写程序;2 IIC读程序;3 IIC初始化程序;4 时钟读并显示在液晶上的程序;5 时钟写并显示在液晶上的程序;6 时钟初始化程序;【3】按键模块:按键采用普通按键,只用到按键S1、S5、S9、S13,按键另一端接B口,由于B口可通过程序编写为弱上拉,所以仿真图中按键不需画出上拉电阻。按键S1按下时,数字加;按键S5按下时,数字减;按键S9按下时,位左移;按键S13按下时,位右移。模块相关图:各个模块完成,整合后的仿真图和仿真结果:3.6设计调试与分析1、软件调试在PICC编译器中编译,与proteus所画的仿真图用Debugger连接,通过在proteus环境中,对结果进行调试和分析。用于观察IIC数据的传输2、硬件调试程序经PICC编译后,通过ICD2与课设板进行连接,并把相应的短路帽插上,在实验板进行调试和分析。4. 问题分析1、在仿真软件上不需要液晶的背光设置,在实验板上运行时,RD7要置1.2、IIC通信模块比较难,可用仿真软件中的IIC仿真观察数据的传输。3、按键设置,要把握好防抖时间。5. 设计体会PIC单片机课程设计是电气工程及其自动化专业及相近专业的一门重要的专业实践课。通过本次的课程设计,我学会了运用PIC单片机来设计。由于自学过51单片机,所以对数字钟的原理还算了解。但是要完全自己编写程序还是有一定的困难,经过老师的讲解,把数字钟分为几个模块,然后经过自己阅读完相关的资料后,我才有了一个比较清晰的思路。在这次课设中,首先按照实验板的原理图画出了仿真图,然后一个一个模块开始编程、仿真、调试,我学习到了不少东西。通过实践,让我明白了在设计过程中只有书面知识是不够的,这还是需要多实践多积累的。有时仿真可以运行很好的程序,下载到板上时,不一定可以运行的出来。但通过自己判断和不断检查,还是解决了这些问题。在这过程中,学会了如何排除自己程序里的错误。通过该课程设计,进一步掌握了PIC单片机的应用,熟练PIC单片机的C程序的编写与调试,是毕业设计前的一次重要的实践,为今后走上工作岗位打下坚实的单片机应用基础。参考书目:1PIC16系列单片机C程序设计与PROTEUS仿真,江和 编,北京航空航天大学出版社,2010.62PIC单片机课程设计指导书,江和 编,2012.8附PIC程序#include_CONFIG(0X20F1);_CONFIG(0X3FFF);#define ELCD RD6/数据使能:下降沿送入有效#define RWLCD RD5/读/写选择: 1,读; 0,写#define RSLCD RD4/命令/数据选择: 1,数据; 0,命令char NUM116=2012-00-00 000;/LCD数据char NUM216=00:00:00;/LCD数据char shu;char wei;char Y;/时钟年char M;/时钟月char D;/时钟日char W;/时钟周char H;/时钟时char T;/时钟分char S;/时钟秒char x;#define L1 0X80#define L2 0XC0/延时n(ms)void delay(unsigned int n)unsigned int a,b;for(a=0;an;a+)for(b=0;b246;b+)NOP();/*=1602LCD=*/读char RLCD(void)unsigned char p;TRISD|=0X0F;RSLCD=0;NOP();RWLCD=1;NOP();ELCD=1;NOP();p=(PORTD4)&0x0F;W4LCD(r,t);t=p&0x0F;W4LCD(r,t);delay(1);/液晶初始化void CSHLCD(void)delay(20);W4LCD(0,0B0011);delay(1);W4LCD(0,0B0011);delay(1);W4LCD(0,0B0011);delay(1);W4LCD(0,0B0010);W8LCD(0,0B00101000);/4位为数据,2行,5x7W8LCD(0,0B00001100);W8LCD(0,0B00000001);delay(2);W8LCD(0,0B00001100);/LCD显示L行(L1,L2);w位(015);*p显示数据;pw数据位数;void LCD(char L,char w,char *p,char pw)char i;W8LCD(0,L+w);for(i=0;i7;if(f=1) WIIC(0x00,0);WIIC(0x07,0B10010000);wei=7;/=时钟读取void second(void)S=RIIC(0x00);/时钟秒NUM27=(S&0x0F)+48;W8LCD(0,L2+11);W8LCD(1,NUM27);NUM26=(S&0X70)4)+48;W8LCD(0,L2+10);W8LCD(1,NUM26);void minuter(void)T=RIIC(0x01);/时钟分NUM24=(T&0x0F)+48;W8LCD(0,L2+8);W8LCD(1,NUM24);NUM23=(T&0X70)4)+48;W8LCD(0,L2+7);W8LCD(1,NUM23);void hour(void)H=RIIC(0x02);/时钟时NUM21=(H&0x0F)+48;W8LCD(0,L2+5);W8LCD(1,NUM21);NUM20=(H&0X70)4)+48;W8LCD(0,L2+4);W8LCD(1,NUM20);void week(void)W=RIIC(0x03);/时钟周switch(W)/星期函数case 1:NUM112=M;/星期1NUM113=O;NUM114=N; break;case 2:NUM112=T;/星期2NUM113=U;NUM114=E; break;case 3:NUM112=W;/星期3NUM113=E;NUM114=D; break;case 4:NUM112=T;/星期4NUM113=H;NUM114=U; break;case 5:NUM112=F;/星期5NUM113=R;NUM114=I; break;case 6:NUM112=S;/星期6NUM113=T;NUM114=A; break;case 7:NUM112=S;/星期7NUM113=U;NUM114=N; break;W8LCD(0,L1+15);W8LCD(1,NUM114);W8LCD(0,L1+14);W8LCD(1,NUM113);W8LCD(0,L1+13);W8LCD(1,NUM112); void day(void)D=RIIC(0x04);/时钟日NUM19=(D&0x0F)+48;W8LCD(0,L1+10);W8LCD(1,NUM19);NUM18=(D&0X30)4)+48;W8LCD(0,L1+9);W8LCD(1,NUM18);void month(void)M=RIIC(0x05);/时钟月NUM16=(M&0x0F)+48;W8LCD(0,L1+7);W8LCD(1,NUM16);NUM15=(M&0X10)4)+48;W8LCD(0,L1+6);W8LCD(1,NUM15);void year(void)Y=RIIC(0x06);/时钟年NUM13=(Y&0x0F)+48;W8LCD(0,L1+4);W8LCD(1,NUM13);NUM12=(Y&0XF0)4)+48;W8LCD(0,L1+3);W8LCD(1,NUM12);void TIME(char mode)/mode模式选择:1,全扫描;0,选择扫描second();if(S=0|mode)minuter();if(T=0|mode)hour();if(H=0|mode)week();day();if(D=1|mode)month();if(M=1|mode)year();/=时钟设置=void TIMESET(void)char i=0;char p=0;char doshu=0;char dowei=0;delay(30);/防抖延时30msif(PORTB!=0X0F)i=PORTB0X0F;delay(30);if(i=1)/数字加一shu+;doshu=1;switch(wei)/进位分类case 0:if(shu=60)shu=0;break;case 1:if(shu=60)shu=0;break;case 2:if(shu=24)shu=0;break;case 3:if(shu=8)shu=1;break;case 4:if(shu=32)shu=1;break;case 5:if(shu=13)shu=1;break;case 6:if(shu=100)shu=0;break;case 7:shu=0;break;if(i=2)/数字减一switch(wei)/借位分类case 0:if(shu=0)shu=60;break;case 1:if(shu=0)shu=60;break;case 2:if(shu=0)shu=24;break;case 3:if(shu=1)shu=8;break;case 4:if(shu=1)shu=32;break;case 5:if(shu=1)shu=13;break;case 6:if(shu=0)shu=100;break;case 7:shu=1;break;shu-;doshu=1;if(i=4)/位加一,光标左移wei+;dowei=1;if(wei=8)wei=0;if(i=8)/return(R);/光标右移if(wei=0)wei=8;wei-;dowei=1;if(doshu=1)W8LCD(0,L2);/=W8LCD(1,shu+48);/=if(wei7)p=(shu/104)+(shu%10);WIIC(wei,p);switch(wei)/选择扫描case 0:second();break;case 1:minuter();break;case 2:hour();break;case 3:week();break;case 4:day();break;case 5:month();break;case 6:year();break;if(dowei=1)W8LCD(0,L2+1);/=W8LCD(1,wei+48);/=if(wei4)*10+(p&0x0F);switch(wei)/光标分类case 0:W8LCD(0,L2+11);W8LCD(0,0b00001111);break;case 1:W8LCD(0,L2+8);W8LCD(0,0b00001111);break;case 2:W8LCD(0,L2+5);W8LCD(0,0b00001111)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论