软件部分主要遇到的问题是温度采集保存到24c02模块,用一个字发送或者两个字节发送都会出问题,最后用八个字节发送就解决了此问题;关于显示部分,显示放在中断里执行会出现乱码,而放到主程序中则不会。 硬件部分主要是复位电路没焊好会使电路一直处于复位状态,反应出来结果就是无法显示任何内容。由于老师给的原理图是公头,而发下来的器件是母头,自己没有注意检查,到最后烧写程序的时候才发现,导致只能用开发板来烧写,给程序调试工作增加了很多工作量,并且单片机在拆卸过程中很容易损坏。
我们在调试过程一定要十分小心谨慎,因为有些芯片都是很容易烧坏的,稍有不慎就会导致某块芯片烧坏而导致实验结果出不来失败。其中我们在检查电路的时候一定要注意检查电路板的短路和虚焊的问题,要经过反复的用万用表不停的检测,由于电路连线比较复杂,所以在测试电路的问题上花了好多的时间。在本次实验中我们碰到的最大的问题就是LCD显示不能读取温度并显示,最终我们通过不断的检查电路和修改发现由于复位电路由一条线没有接地的原因,解决了就可以了啦。
心得与体会
在本次实验中,我们小组分工合作,首先要对所用的芯片进行了解和查找资料。在设计过程中protues仿真对设计来说也是很重要的,利用温
度传感器和时钟芯片进行对温度实践的检测,再将检测到的数据传送单片机经过程序的处理给LCD显示,在程序的调试过程中,主要注意的就是时间延迟函数和中断读取的设置。
通过这次对温度采集和显示的设计与制作,让我们了解了设计电路的程序,也让我们了解了关于单片机的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。 通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该动手实际操作才会有深刻理解。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
成员苏晓峰记——
在程序调试过程中,通过按键切换设置时间、当前温度和存储的温度一次显示在LCD上,在如何读取温度上的程序有些困惑,不知道用什么方法来写,自己上网查找各种资料,最后决定用中断来写,但调试过程而然碰
到了LCD显示出错了,而且并没有按照存储的数据顺序显示。通过几个晚上的思考和不断调试,不断的修改,总算是成功了。
成员郑元凯记——
在实验设计之前自己上网查找所用芯片的资料各种管脚接口和类似的一些这次实验作为参考,为设计过程中可能会产生的问题进行分析,尽可能的避免错误。但理论和实践还是有一定的差距的,不过在大家的努力下一一克服了。仿真后准备开始焊接电路前要进行电路的布局和线路的连接,最大化的减少交叉线和跑线,使电路板看上去简单明了。
成员梁斌记——
负责焊接的工作有点难度,不止考验焊接的功力还要有足够的耐心,根据已经布局好的电路进行焊接,省下了不少心力。每每焊接一部分,都要用万用表检查是否连接正确或者有存在虚焊的情况,尽可能的避免错误。完成后将程序烧录进去结果不能读取温度,大家都很着急,一起重新的检查,通过最后的补救总算是找到错误修改之后成功了。
程序码 主程序
#include
#define warn_35 350 #define warn_11 110 char miao,shi,fen,flag; uint s1num; uchar count,m,n; uint su,tt,mm; //uchar buff[4];
unsigned char pDat[7],pDat1[7]; sbit s1=P2^3; sbit s2=P2^4; sbit s3=P2^5;
sbit beep=P1^0;//蜂鸣器 void deal(uint tem) { }
void main() {
m=0; n=0; init(); EX0=1;
if((tem>warn_35)||(tem else beep=1; beep=0; //init_com(); while(1) { //包含了对定时器0的设定 tempchange(); tt=get_temp(); if(flag==1) { EA=0; flag=0; IRcvStr(0xa0,n,&pDat1[0],8); mm=pDat1[0]*100+pDat1[1]*10+pDat1[2]; //pDat1[7]=0; n=n+0x08; if(n==0xf8) // } } deal(tt); write_sfm(12,miao); write_sfm(9,fen); write_sfm(6,shi); dis_temp1(mm); n=0; EA=1; delay(5); dis_temp(tt); keyscan();