福州大学PIC课程设计报告 数字钟.docx
《福州大学PIC课程设计报告 数字钟.docx》由会员分享,可在线阅读,更多相关《福州大学PIC课程设计报告 数字钟.docx(16页珍藏版)》请在冰豆网上搜索。
![福州大学PIC课程设计报告 数字钟.docx](https://file1.bdocx.com/fileroot1/2022-11/16/de29f7a1-3107-424f-a53a-7347aac77d53/de29f7a1-3107-424f-a53a-7347aac77d531.gif)
福州大学PIC课程设计报告数字钟
《PIC单片机》
课程设计
学生姓名:
学号:
指导教师:
鲍光海
2014年6月26日
目录
1.课程设计题目描述和功能……………………………………………1
2.课程设计所用硬件……………………………………………………1
3.课程设计所用软件……………………………………………………6
4.课程设计所得结果……………………………………………………13
5.课程设计心得体会……………………………………………………14
6.参考书目………………………………………………………………15
1、课程设计题目描述和功能
⏹题目:
利用单片机PIC16F887设计数字钟
⏹设计原理:
利用单片机的IIC通信功能,将时钟芯片DS1307中的时间,和TC74芯片中的温度,用LCD液晶屏显示,并可以通过按键来修改时间和切换数字钟的功能模式。
⏹设计所能实现功能:
1 显示年、月、日、星期、时、分、秒并且可通过按键进行修改。
2 显示当前温度。
3 可设置重要日期并倒计天数。
2、课程设计所用硬件
TC74温度传感器
PIC16F887
LCD
按键
DS1307时钟芯片
①单片机PIC16F887:
a.硬件原理图:
b.硬件介绍:
本课设板所用的单片机为PIC16F887,是877A的升级,其主要参数与877A类似,但使用更为灵活、有的参数更为细化(如异步通信的波特率为双字节),而价格比877A更低。
887的程序存储器、通用RAM、EEPROM与877A完全相同。
但个别参数不同。
PIC16F887单片机是本次课设的核心模块,是实现与LCD显示模块、TC74温度传感器模块、DS1307时钟模块和按键模块等硬件连接部分进行通信的中心。
②LCD
a.硬件原理图:
b.硬件介绍:
LCD模块型号为YB1602A,每行显示16个字符,共2行,为了节省单片机的I/O口,采用4位数据线接线方式,将D4~D7分别与RD0~RD3相连,RD7用于背光显示,上电后要延时20ms,才能进行初始化。
③按键
a.硬件原理图:
b.硬件介绍:
4个按键用于修改时间和切换数字钟工作模式,分别为设置(SET)、加(ADD)、减(DEC),切换屏幕(COU)。
接到RB0~RB3,采用电平变化中断。
按下SET时,依次闪烁年、月、日、星期、时、分、秒。
按下COU时,屏幕切换为倒计时界面。
通过加(ADD)、减(DEC)按键修改时间。
④TC74:
a.硬件原理图:
b.硬件介绍:
TC74芯片用于提供温度数据,时钟线SCL和数据线SDA通过IIC接口RC3和RC4与单片机通信。
再在LCD上显示温度值。
⑤DS1307时钟芯片
a.硬件原理图:
b.硬件介绍:
DS1307是低功耗、IIC接口、日历和时钟数据,按BCD码存取的时钟/日历芯片。
它提供秒、分、小时、星期、日期、月和年等时钟日历数据。
时钟芯片DS1307用于提供时间数据,时钟线SCL和数据线SDA通过IIC接口RC3和RC4与单片机通信。
时钟芯片的SQW输出1Hz脉冲,输出到RA4,控制修改时间时的闪烁频率。
3、课程设计所用软件
⏹整体软件流程图
⏹部分程序:
●倒计时所用程序:
intdiff(void)
{
inti;
intdiff=0;
constintmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
MA=(AAAA[5]>>4);
MA=MA*10;
MA=MA+(AAAA[5]&0X0F);
MB=(BBBB[5]>>4);
MB=MB*10;
MB=MB+(BBBB[5]&0X0F);
DA=(AAAA[4]>>4);
DA=DA*10;
DA=DA+(AAAA[4]&0X0F);
DB=(BBBB[4]>>4);
DB=DB*10;
DB=DB+(BBBB[4]&0X0F);
YA=(AAAA[6]>>4);
YA=YA*10;
YA=YA+(AAAA[6]&0X0F);
YB=(BBBB[6]>>4);
YB=YB*10;
YB=YB+(BBBB[6]&0X0F);
if(AAAA[6]==BBBB[6])
{
if(AAAA[5]==BBBB[5])
{
diff=DB-DA;
}
else
{
for(i=MA+1;i{
diff+=month[i];
}
diff+=month[MA]-DA+DB;
if(leapyear(AAAA))
if(AAAA[5]<=2&&BBBB[5]>2)
diff++;
}
}
else
{
for(i=YA+1;i{
if(leapyear(i))
diff+=366;
else
diff+=365;
}
for(i=MA+1;i<=12;i++)//date1距离年末多少天
{
diff+=month[i];
}
diff+=month[MA]-DA;
if(MA<=2)
if(leapyear(YA))
diff++;
for(i=1;i{
diff+=month[i];
}
diff+=DB;
if(MB>2)
if(leapyear(YB))
diff++;
}
returndiff;
}
intleapyear(char*year)
{
GW=(year[6]>>4);
GW=GW*10;
GW=GW+(year[6]&0X0F);
GW=GW%4;
if(GW==1)
return1;
else
return0;
}
●闪烁程序:
//闪烁年
voidyear(void)
{if(RA4==1)
{LCD_WRITE(LINE1,COM);
LCD_WRITE('2',DATA);
LCD_WRITE('0',DATA);
LCD_WRITE(((AAAA[6]&0xF0)>>4)+0x30,DATA);
LCD_WRITE((AAAA[6]&0x0F)+0x30,DATA);
}
else
{LCD_WRITE(LINE1,COM);
LCD_WRITE('',DATA);
LCD_WRITE('',DATA);
LCD_WRITE('',DATA);
LCD_WRITE('',DATA);
}
}
●加法日期校正:
//日校正
if(X==3)
{AAAA[4]+=1;//X=3,日期自动加1
if((AAAA[4]&0x0F)>9)
{AAAA[4]=AAAA[4]&0xF0;
AAAA[4]=AAAA[4]+0x10;//日期的低4位大于9时,低4位清零高4位进1位
}
if((AAAA[5]==1)|(AAAA[5]==3)|(AAAA[5]==5)|(AAAA[5]==7)|(AAAA[5]==8)|(AAAA[5]==0x10)|(AAAA[5]==0x12))
{
if(AAAA[4]>0x31)
{
AAAA[4]=0x01;//日期大于0x31,则改为0x01
}
}
if((AAAA[5]==2))
{
GW=(AAAA[6]>>4);
GW=GW*10;
GW=GW+(AAAA[6]&0X0F);
GW=GW%4;
NOP();
if(GW==0)
{
if(AAAA[4]>0x29)
{
AAAA[4]=0x01;//日期大于0x29,则改为0x01
}
}
else
{
if(AAAA[4]>0x28)
{
AAAA[4]=0x01;//日期大于0x28,则改为0x01
}
}
}
else
{
if(AAAA[4]>0x30)
{
AAAA[4]=0x01;//日期大于0x30,则改为0x01
}
}
4、课程设计所得结果
开机显示欢迎页面
开机欢迎页面延时1后,自动跳转到正常显示时间、温度界面
按COU按键切换到倒计时界面
5、课程设计心得体会
通过这两周周的课程设计,收获颇多:
首先,加深了我对单片机PIC16F887A的理解,提高了编程能力,分析问题和解决问题的能力,还有熟练操作PROTEUS、MAPLAB的能力。
同时我发现设计中仅仅靠电脑仿真是远远不够的,实际烧写中可以发现许多仿真中不能发现的问题,例如按键的抖动和LCD的清屏显示乱码等。
同时很感谢老师上课和课程设计过程中对我们的耐心指导。
虽然老师的要求相对其他大学老师来说可能较为严格,但是我觉得这样还是很有必要的。
PIC这一门课也许是我大学中学习的最认真的一门课了。
我感觉学的很扎实,真正学到了了将来工作中可以用到的知识和技术。
在此向鲍老师再次表示感谢!
6、参考书目:
[1]《PIC16系列单片机C程序设计与PROTEUS仿真》,江和,北京航空航天大学出版社,2010
[2]《福州大学PIC单片机课程设计指导书》江和,2012年8月
[3]DS1307时钟芯片简要说明江河2011年9月