福州大学课程设计格式.docx
《福州大学课程设计格式.docx》由会员分享,可在线阅读,更多相关《福州大学课程设计格式.docx(9页珍藏版)》请在冰豆网上搜索。
![福州大学课程设计格式.docx](https://file1.bdocx.com/fileroot1/2023-1/7/2e807e59-1ce6-4ce6-96aa-95561e506f5a/2e807e59-1ce6-4ce6-96aa-95561e506f5a1.gif)
福州大学课程设计格式
福州大学课程设计格式
《PIC单片机》
课程设计
学生姓名:
邱荣华
学号:
011100225
专业班级:
电气工程与自动化2011级2班
指导教师:
江和
2014年6月13日
2.3protues仿真图的绘制:
初步了解此次课程设计所用的开发板,并根据所选课题,进一步了解该课题用到的相应模块。
在protues中找到相信模块中的元件,绘制好仿真图。
2.4最小系统
最小系统包括16F887单片机、复位模块、4M外部晶振、排针等部件组成如下最基本电路,其中芯片供电的引脚略去。
本课设板所用的单片机为PIC16F887,是877A的升级,其主要参数与887A类似。
2.5LCD显示模块
如图所示,为了节省I/O口,采用4位接线法,RD口的低四位和LCD的高4位连接,RD7用于背光显示(RD7=1),RD4、RD5、RD6用于读写和使能控制.上电后要延时15ms后,才能进行初始。
编写LCD初始化程序、写4位数据/命令子程序、写8位数据/命令子程序、显示整行子程序、读LCD子程序、忙时检测子程序。
定义常数字符数组,在开机后显示”qiuronghua011100225”等字样
2.6时钟和温度模块
选用始终芯片DS1307、温度芯片TC74,皆通过IIC和单片机通信,时钟芯片带备用3V电池,电阻RA4和RA5设置为数字电阻。
DS1307是实时时钟芯片,它提供秒、分、时、日、月、、年和星期等数据,并能自动计算闰年至2100年。
通常时钟芯片是要接备用电池,当主电源掉电时,备用电源为DS1307提供维持电源,此电源只供DS1307使用,此时时钟仍正常运行,时钟晶振是典型的32.768kHz。
始终和温度模块的实现首先要进行正确的IIC初始化:
voidIIC_CSH()
时钟程序要通过编写和调用始终读写子程序实现:
voidwrite_DS1307(charaddr,chardata)
voidREAD_DS1307(charaddr,charn)
从时钟芯片读出的是BCD码,需要进行转换才可以送入LCD显示。
至于温度模块是比较简单的,设置好好就只需要定时从里面读数显示即可。
显示温度需要注意当其值为负数时候需要进行取补码再显示,同时显示负号。
2.7按键模块
采用普通按键实现时间的修改、设定,mod键进入时间设置,time_set实现位置(秒、分、时,日,月,年)的选择,其他两个按键是加减功能。
部分检测消抖程序:
if(mod==0)
{
delaynms(30);//消抖
if(mod==0)
{
while(!
mod);//等待按键释放
M++;
if(M==3)
{M=0;flag=0;f=0;
}
}
}
由于星期几和日期有对应关系,所以只需要调整日期,就可改变星期几。
相关程序:
voidGregorianDay(void)
{
intleapsToDate;
intday1;
intMonthOffset[]={0,31,59,90,120,151,181,212,243,273,304,334};
if(year==0)
{if(month<=2)
day1=MonthOffset[month-1]+day;
else
day1=MonthOffset[month-1]+day+1;
}
else
{leapsToDate=year/4;
if((year%4==0)&&(month>2))
day1=1;
else
day1=0;
day1+=year*365+leapsToDate+1+MonthOffset[month-1]+day;
}
week=(day1+5)%7;
write_DS1307(3,dec_bcd(week));//转换为BCD码后,将秒写入芯片
}
2.8程序流程图
否
是
3调试
程序编译成功后,选择调试工具为protues仿真,观察仿真结果并根据仿真中出现的问题对程序进行进一步的修改。
调试成功后出现的效果:
3.1仿真调试出现的问题
1、程序出现类似";"expected、noidentifierindeclaration等错误。
处理:
此类错误一般是由于大括号、封号漏写或者多写,也可能是在中文环境下的符号。
仔细检查出错程序位置附近,检查封号、大括号的数量和格式。
2、出现functiondeclaredimplicitint、undefinedidentifier"N"等错误。
处理:
函数未声明、变量为定义所引起的错误,在相应的地方添加函数声明,变量定义。
3.2烧写程序及硬件调试
将程序烧写至picket3烧写器中,进行硬件调试。
出现的问题:
1.无法显示时间和温度,IIC通信停止。
解决办法:
TC74仿真和实物的地址不一样,只需把地址1001101改为1001000
2.按键调整时光标没有和仿真一样闪动
解决办法:
由于程序刷新太快,人眼无法分辨,所以只需在按键后面加50ms的延时即可。
3.不能掉电保护,每次脱机或者复位都会进行时钟初始化
解决办法:
DS1307初始化前先进行判断秒的最高位是否为1,为1则进行初始化
4心得体会
通过本次的课程设计任务,我掌握学会了MPLABIDE,PROTUES仿真软件的使用基础。
单片机是现在科技研究的潮流,各种电子产品都可以见到单片机的身影。
而本课设正是帮助我把课堂上所学习到的理论,运用到了实际中,是我受益匪浅。
在此次课程设计初期,本来想拷贝一份程序过来进行修改,经过一些挣扎后,最后还是决定通过自己编写。
对于一个单片机初学者,对于课堂所学的知识还只有个模糊的认识,再加之课程设计在课程结束一段时间才进行选题,一些编程知识有些淡忘,所以只好重新复习了课本。
在编写过程中遇到了不少问题,就之前提到的配置位问题,由于疏漏,配置位设置错误,导致做了6个小时的无用功在查程序。
或者是因为大大小小的失误,都耗费了很多的时间。
这也让我明白了,作为一个工科学生,做事要严谨认真,虽然都是小问题,但恰恰是细节的问题决定一件事情的最终走向。
随着编程的继续,我的查错能力也慢慢有了提升。
总之,本次课程设计让我受益匪浅,让我战胜自己的惰性,提高了分析解决问题的能力,也提高了自己的逻辑能力,当然,更关键的是让我明白,不注意细节性问题会付出很大的代价。