武汉理工大学《单片机应用》实习报告书目录1.摘要...........................................................................................................................12.项目要求和说明.......................................................................................................12.1.键盘、显示电路............................................................................................12.2.数字时钟........................................................................................................12.3.数字温度计....................................................................................................22.4.数字频率计....................................................................................................23.硬件设计...................................................................................................................34.软件流程设计...........................................................................................................44.1.温度显示和传送流程图................................................................................44.2.时钟显示和调整流程图................................................................................54.3.频率计流程图................................................................................................54.4.从机程序流程图............................................................................................65.调试分析...................................................................................................................66.实验数据分析...........................................................................................................86.1.温度显示和数值传送子模块的数据分析....................................................86.2.时钟模块的数据分析....................................................................................96.3.频率计的数据的分析..................................................................................107.答辩.........................................................................................................................128.结论.........................................................................................................................139.参考文献.................................................................................................................1310.附录.......................................................................................................................1410.1.实验板原理图............................................................................................1410.2.程序代码清单............................................................................................15武汉理工大学《单片机应用》实习报告书1.摘要单片微型计算机(Single-ChipMicrocomputer),是集CPU,RAMROM,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。通过对一个基于单片机的温度计、可调时钟和频率计的设计学习,详细介绍单片机应用中的数据转换显示,液晶显示原理,键盘扫描原理,单片机的定时中断原理。从而达到学习、了解单片机相关指令在各方面的应用。系统由AT89S52、温度检测芯片、液晶显示器、稳压电源等部分构成,能实现时钟显示的功能,能进行时、分、秒的显示,频率检测和实时温度显示以及通信。关键字:单片机,频率计,电子时钟,温度计,串口通信2.项目要求和说明利用材料完成单片机最小系统的设计、焊接、调试;完成ISP下载电路的设计、焊接;完成应用系统扩展电路部分的设计、焊接、调试,应用系统扩展电路的具体要求如下:2.1.键盘、显示电路利用单片机最小系统、6个7段LED数码管、12个按键,设计制作一个键盘、显示电路。可以使用8279键盘显示接口电路,也可以使用单片机的并行接口作为键盘显示接口。2.2.数字时钟在键盘、显示电路的基础上完成一个数字时钟的设计,完成以下功能:1.要求以24小时计时方式显示时、分、秒;2.时、分、秒可以通过按键分别调整。1武汉理工大学《单片机应用》实习报告书2.3.数字温度计在上题的硬基础上,制作一个数字温度计。完成以下功能:1.利用DS18B20可编程1-Wire数字温度传感器芯片,或利用AD590温度传感器芯片和A/D转换器芯片采集温度温度信号;2.当按下键盘上的温度显示按键时将实时温度信息显示在LED显示器上,当按下键盘上的时钟显示按键时,恢复时钟的正常显示;3.通过串行通信的方式,将采集到的实时温度信息送至第二个单片机系统,并在二个单片机系统显示实时温度。2.4.数字频率计在上题的硬基础上,制作一个数字频率计。完成以下功能:1.利用MCU设计一个数字频率计,用于检测0~500kHz周期信号的频率,输入信号幅度范围:0.1~10V;2.当按下键盘上的频率显示按键时将测量的频率信息显示在LED显示器上,当按下键盘上的时钟显示按键时,恢复时钟的正常显示。利用仿真软件完成系统仿真工作;完成系统软件的设计,包括程序结构设计、流程图绘制、程序设计。2武汉理工大学《单片机应用》实习报告书硬件设计总电路原理设计如下:图13武汉理工大学《单片机应用》实习报告书4.软件流程设计主程序流程设计图24.1.温度显示和传送流程图图34武汉理工大学《单片机应用》实习报告书4.2.时钟显示和调整流程图图44.3.频率计流程图图55武汉理工大学《单片机应用》实习报告书4.4.从机程序流程图图65.调试分析问题一:子程序切换问题在最初的程序里,flag值的变换在子函数中没有经过判断,直到最后进入第一个温度计的显示和数值的传输的函数中就不会回到主函数中,进而不能进入到下一个子函数。解决的方法是在子函数中每次的显示扫描都加上了一句对flag的判断,确保在每次运行函数的时候都确保能正常的跳出和转换。问题二:中断资源的分配和使用上出现了冲突问题可以细化为两个方面:T0中断被不同的子函数在不同的时间里用到,中断函数功能不能很好的识别。解决的办法是在每个子函数里添加函数的识别变量function,在进入T0中断之后首先做的是对function的识别和判断,在判断是1是就进入对应时钟的的计时功能,在判断是2时,就进行频率计的加一运算。用一个函数识别的变量来区别中断函数在每个子函数的初始化的控制下的功能,T0能正常的计数或者计时。中断的优先级判别不清,加上切换出每个子函数时,中断的控制寄存器没有初始6武汉理工大学《单片机应用》实习报告书化,导致在下一个子函数的运行中,中断申请没有被响应,或者发生错误响应。解决的方法是在INT0的中断函数中写入控制寄存器的初始语句,在INT0使得子函数切换的同时也把中断刷新,在进入下一个子函数之后,重新进行中断的配置。问题三:切换出时钟子函数时,再次进入的时钟子函数时,数值没有更新,后台时钟的跳动时停止的。问题的分析是这样的:在程序的设计中,中断是在不断的调用和刷新的。所以在把时钟的显示字符存入到显示数组中之后,切换到下一个子函数中,就不在进行对显示数组的更新了,而是运行其他的程序,所以再次回到时钟函数中时,时钟显示的数值就不会更新,也就是后台不会更新了。程序的设计中没有用到T2,解决的思路是把单片机换成52型号的,再把T2利用起来,就可以在单片机不掉点的情况下在切换出时钟函数之后还是可以对时钟显示数组的内容进行更新的。问题四:在Protues软件仿真的过程中,在矩阵键盘的驱动和实际烧录到单片机里的程序是一样的情况下,实际电路能正常运行而矩阵键盘的仿真是失效的。这个问题是我一直没有解决的问题。在仿真过程中,按键引脚的电平显示是正常的。问题五:在书写温度数值传送函数的过程中,尝试用中断的方法书写发送函数失败后,采用的是查询方式,调试中断发送方式是不成功的。在串口中断全部配置完成之后,主机的发送函数在中断方式下,就是没有正确的发送到从机中去,误码率很高只是首次发送显示是正确的。分析的结果是发送的数值的位置和从机显示的位置是有错开,因为没有正确的校验过程。在调试的过程中,尤其是软件程序的调试中遇到了大大小小的问题,有的修正了,有的就用其他的方法代替了,还有遗留的。但是经过细致的分析很划分,程序的层次是分明的,基于仿真和实际的调试,功能实现是稳定的。7武汉理工大学《单片机应用》实习报告书6.实验数据分析6.1.温度显示和数值传送子模块的数据分析基于Protues软件的仿真结果,有如下的数据分析:温度设置如下:图7初始温度显示如下:图8稳定温度显示如下:图9分析:在温度的设置是正数的时候,能够稳定显示,显示是正常的,初始的温度显示是因为:DS18B20在上电复位时,其温度寄存器里的初始值是85°C。温度设置如下:8武汉理工大学《单片机应用》实习报告书稳定温度显示如下:图10图11分析:在温度输入时低于0时,显示的是乱码。程序的局限性和健壮性还有待提高。没有把温度的输入范围扩展到零下。从机显示如下:图12分析:在从机的显示上,和主机的显示是一致的,说明传输函数对于温度的传输是可用的。6.2.时钟模块的数据分析时钟的正常显示如下:图139武汉理工大学《单片机应用》实习报告书时钟调整时的显示:时钟运行时从机显示:图14图15分析:在时钟的正常显示情况下,时钟的仿真结果是正常的。在调整的状态下,在被调整的位数上,数字是在闪烁的,表明是被选中的。在时钟运行的时候从机是接收不到数据的,所以在时钟运行的时候,不管是正常的运行还是在调整的情况下,都不会变动,保留切换之前的状态。6.3.频率计的数据的分析前置电路的设计:图1610武汉理工大学《单片机应用》实习报告书前置电路整形结果波形:图17仿真输入的频率(较低)如下:图18频率显示如下:图1911武汉理工大学《单片机应用》实习报告书仿真输入的频率(较高)如下:图20频率显示如下:图21分析:频率仿真的结果显示,在较高和较低的频率下都能在允许的误差范围内显示出数据,表示在要求的频率范围内,设计的检测程序是可以完成任务的。7.答辩问:51单片机的中断都有哪些,在你设计的系统中,共用到了那些中断资源,有没有发生冲突的,怎么解决的?答:51单片机的中断包括外部中断0和1,定时计数器0和1,还有串口中断。共五个。在我设计的系统中,这五个中断都用到了。定时器0有复用的情况。在每个子程序中赋值各自的标志位,就可以在中断调用中区分开。问:矩阵键盘的工作原理是什么?答:矩阵键盘的工作原理是以行列相交叉的矩阵,节点接上按键,以列赋高电位,检测行是否也为高电位,若是就说明导通,行列相交的节点按键就按下了。进行软件的按键去抖会使得按键的准确性提高。12武汉理工大学《单片机应用》实习报告书8.结论在本次的实习过程中,对单片机的软件设计有了综合的设计,设计的工程中运用了模块化的设计,使得设计的条理更加的明确,代码更加的易懂,移植性更强。但是在设计的过程中存在问题和是不少的,在硬件的设计上,没有花很大的功夫。软件的仿真里还有关于矩阵键盘的错误,和零下温度错误检测的不足,是以后在学习单片机的时候更应该注意的。9.参考文献[1]谢自美.电子线路设计·实验·测试(第三版).武汉:华中科技大学出版社[2]李群芳.单片微型计算机与接口技术(第3版).电子工业出版社,2008[3]刘教瑜.单片机原理及应用.武汉理工大学出版社,2011[4]张东亮.单片机原理与应用.人民邮电出版社,2009[5]郭天祥.51单片机C语言教程.电子工业出版社,200913武汉理工大学《单片机应用》实习报告书附录10.1.实验板原理图图2214武汉理工大学《单片机应用》实习报告书10.2.程序代码清单主程序头文件代码#include
#defineuintunsigned#defineucharunsignedcharuintfun=0;uintsect;//uintflag_mode;/******************//*****延时程序*****//******************/voiddelay(uinttime){while(time--);}voiddelayms(uinttime){uinti,j;for(i=time;i>0;i--){for(j=110;j>0;j--);}}15武汉理工大学《单片机应用》实习报告书/******************//***LCD配置代码****//******************/sbitLCDEN=P1^2;sbitLCDRW=P1^1;sbitLCDRS=P1^0;voidwrite_com(ucharcom){LCDRW=0;LCDRS=0;P0=com;LCDEN=1;delayms(5);LCDEN=0;}voidwrite_dat(uchardat){LCDRW=0;LCDRS=1;P0=dat;LCDEN=1;delayms(5);LCDEN=0;}16武汉理工大学《单片机应用》实习报告书voidlcd_clear(){write_com(0x01);}voidinit_lcd(){write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}voidshow_string(uchar*p,uintq){uinti=0;while(*p!='\\0'){if(q==1){write_com(0x84+i);write_dat(*p);}elseif(q==2){write_com(0xc4+i);write_dat(*p);}17武汉理工大学《单片机应用》实习报告书p++;i++;}}/******************//**18B20配置程序***//******************/sbitDQ=P3^4;sbitFLAG=P0^0;ucharTH,TL;intj;uinttemp_tem;uchartable[4]={0,0,0,0};ucharcodestr[]=\"temperature\";voidinit18b20(){ucharx=0;DQ=1;delay(4);DQ=0;delay(100);DQ=1;delay(40);}18武汉理工大学《单片机应用》实习报告书voidwrite_to_18b20(uchardat){uinti=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay(10);DQ=1;dat>>=1;}}ucharread_from_18b20(void){uinti=0;uchardat=0;for(i=8;i>0;i--){DQ=0;dat>>=1;DQ=1;if(DQ){dat|=0x80;}delay(10);19武汉理工大学《单片机应用》实习报告书}return(dat);}voidstart18b20(void){init18b20();write_to_18b20(0xcc);write_to_18b20(0x44);}voidget_from_18b20(){init18b20();write_to_18b20(0xcc);write_to_18b20(0xbe);TL=read_from_18b20();TH=read_from_18b20();}voidtransform(void){uinti;floatTemp;uintvalue;temp_tem=TH;temp_tem<<=8;temp_tem=temp_tem|TL;20武汉理工大学《单片机应用》实习报告书Temp=temp_tem*0.0625;value=(uint)(Temp*100);for(i=0;i<=3;i++){table[i]=0;}i=3;while((value/10)&&(i>0)){table[i]=value%10;value/=10;i--;}table[i]=value;}voiddisplay_tem(){uinti;for(i=0;i<5;i++){write_com(0x84+i);delayms(10);if(i==2){write_dat('.');delayms(5);}elseif(i<2){21武汉理工大学《单片机应用》实习报告书{write_dat(table[i]+'0');delayms(5);}else{write_dat(table[i-1]+'0');delayms(5);}}}voidtem(){TMOD=0x20;TH1=0xe6;TL1=0xe6;TR1=1;SCON=0x40;fun=0;init_lcd();while(1){if(sect!=0)break;else{init18b20();show_string(str,2);22武汉理工大学《单片机应用》实习报告书show_string(str,2);start18b20();get_from_18b20();transform();display_tem();for(j=0;j<4;j++){SBUF=table[j];while(!TI);TI=0;}}}}/*********************//*******键盘配置******//*********************/ucharcodeline_value[4]={0xfe,0xfd,0xfb,0xf7};ucharkey=0xff;voidscan(){ucharline_num,temp;for(line_num=0;line_num<4;line_num++){P2=line_value[line_num];temp=P2;temp&=0xf0;23武汉理工大学《单片机应用》实习报告书switch(temp){case0xe0:key=line_num;break;case0xd0:key=line_num+4;break;case0xb0:key=line_num+8;break;case0x70:key=line_num+12;break;default:break;}}}bitflag=0;ucharkey_scan(){ucharv1=0,v2=0;P2=0xf0;delayms(90);v1=P2;if((v1&0xf0)!=0xf0){delayms(35);v2=P2;if(v1==v2){scan();flag=1;}}24武汉理工大学《单片机应用》实习报告书elseflag=0;returnkey;}/************************//*******时钟控制*********//************************/uintcount=0;uintsec=0,min=0,hour=0;uchartitle[]=\"clock\";ucharclock[]=\"00:00:00voidclo(){\";fun=1;init_lcd();lcd_clear();show_string(title,2);TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;IT1=0;ET0=1;EX1=1;while(1){if(sect!=1)break;25武汉理工大学《单片机应用》实习报告书break;else{show_string(clock,1);}}}voidnum2clock(){clock[0]='0'+hour/10;clock[1]='0'+hour%10;clock[3]='0'+min/10;clock[4]='0'+min%10;clock[6]='0'+sec/10;clock[7]='0'+sec%10;}/************************//*********频率计配置*****//************************/uchartemp_freq[]={0,0,0,0,0,0,0,0};ucharini[]=\"freqency\";ucharT0count=0;ucharT1count=0;ucharflag_freq;unsignedlongnum_freq=0;uinti_freq=0;26武汉理工大学《单片机应用》实习报告书voidfreq(){fun=2;TMOD=0x15;TH0=0;TL0=0;TH1=(65536-50000)/256;TL1=(65536-50000)%256;TR0=1;TR1=1;ET1=1;ET0=1;EA=1;init_lcd();while(1){if(sect!=2)break;else{if(flag_freq==1){flag_freq=0;num_freq=T0count*65536+TH0*256+TL0;for(i_freq=0;i_freq<8;i_freq++)/*importantresetting*/{temp_freq[i_freq]=0;27武汉理工大学《单片机应用》实习报告书temp_freq[i_freq]=0;}i_freq=0;while(num_freq/10){temp_freq[i_freq]=num_freq%10;num_freq/=10;i_freq++;}temp_freq[i_freq]=num_freq;show_string(ini,2);write_com(0x8c);write_dat('H');write_com(0x8d);write_dat('z');for(i_freq=0;i_freq<8;i_freq++){write_com(0x84+i_freq);write_dat(temp_freq[7-i_freq]+'0');}T1count=0;T0count=0;TH0=0;TL0=0;TR0=1;TR1=1;i_freq=0;}28武汉理工大学《单片机应用》实习报告书}}}}/************************//*******中断配置*********//************************/bitconf1,conf2;voidinterrupt0()interrupt0{conf1=P3^2;delayms(500);conf2=P3^2;if(conf1==conf2){sect++;if(sect>=3){sect=0;}IE=0x81;TCON=0x40;}}29武汉理工大学《单片机应用》实习报告书voidinterrupt1()interrupt1{if(fun==1){TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==20){count=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;hour++;if(hour==24){hour=0;}}}}num2clock();}30武汉理工大学《单片机应用》实习报告书elseif(fun==2){T0count++;}}sbitnext=P3^3;voidmode_change()interrupt2{ucharmode=0,dial=0;TR0=0;EX1=0;do{switch(mode){case0:break;case1:write_com(0x84);write_dat('');write_com(0x85);write_dat('');dial=key_scan();if(flag){switch(dial){case0:hour++;31武汉理工大学《单片机应用》实习报告书if(hour==24)hour=0;break;case1:if(hour==0)hour=23;elsehour--;break;default:break;}}num2clock();write_com(0x84);write_dat(clock[0]);write_com(0x85);write_dat(clock[1]);delayms(100);break;case2:write_com(0x87);write_dat('');write_com(0x88);write_dat('');dial=key_scan();if(flag){switch(dial){case0:min++;32武汉理工大学《单片机应用》实习报告书if(min==60)min=0;break;case1:if(min==0)min=59;elsemin--;break;default:break;}}num2clock();write_com(0x87);write_dat(clock[3]);write_com(0x88);write_dat(clock[4]);delayms(100);break;case3:write_com(0x8a);write_dat('');write_com(0x8b);write_dat('');dial=key_scan();if(flag){switch(dial){case0:sec++;if(sec==60)sec=0;33武汉理工大学《单片机应用》实习报告书sec=0;break;case1:if(sec==0)sec=59;elsesec--;break;default:break;}}num2clock();write_com(0x8a);write_dat(clock[6]);write_com(0x8b);write_dat(clock[7]);delayms(100);break;default:break;}if(!next){delayms(200);if(!next){mode++;}if(mode==4){mode=0;}}34武汉理工大学《单片机应用》实习报告书sec=0;break;case1:if(sec==0)sec=59;elsesec--;break;default:break;}}num2clock();write_com(0x8a);write_dat(clock[6]);write_com(0x8b);write_dat(clock[7]);delayms(100);break;default:break;}if(!next){delayms(200);if(!next){mode++;}if(mode==4){mode=0;}}35武汉理工大学《单片机应用》实习报告书}}while(mode);TR0=1;EX1=1;}voidtimer1()interrupt3{TH1=(65536-50000)/256;TL1=(65536-50000)%256;T1count++;if(T1count==20){TR0=0;TR1=0;T1count=0;flag_freq=1;}}36武汉理工大学《单片机应用》实习报告书主函数代码#includevoidmain(){init_lcd();sect=0;while(1){EX0=1;EA=1;switch(sect){case0:tem();break;case1:clo();break;case2:freq();break;default:break;}}}37武汉理工大学《单片机应用》实习报告书从机头文件代码#include#defineuintunsignedint#defineucharunsignedchar/******************//*****延时程序*****//******************/voiddelayms(uinttime){uinti,j;for(i=time;i>0;i--){for(j=110;j>0;j--);}}/******************//***LCD配置代码****//******************/sbitLCDEN=P1^2;sbitLCDRW=P1^1;sbitLCDRS=P1^0;voidwrite_com(ucharcom){LCDRW=0;LCDRS=0;38武汉理工大学《单片机应用》实习报告书P0=com;LCDEN=1;delayms(5);LCDEN=0;}voidwrite_dat(uchardat){LCDRW=0;LCDRS=1;P0=dat;LCDEN=1;delayms(5);LCDEN=0;}voidinit_lcd(){write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}voidshow_string(uchar*p,uintq){uinti=0;while(*p!='\\0'){39武汉理工大学《单片机应用》实习报告书if(q==1){write_com(0x84+i);write_dat(*p);}elseif(q==2){write_com(0xc4+i);write_dat(*p);}p++;i++;}}40武汉理工大学《单片机应用》实习报告书从机主函数#includeinti=0,j=0;chartable[4]={0,0,0,0};charcodet[]=\"temperature\";char*p=table;voidmain(){TMOD=0x20;TH1=0xe6;TL1=0xe6;TR1=1;SCON=0x50;init_lcd();EA=1;ES=1;while(1){show_string(t,2);p=table;while(*p!='\\0');for(j=0;j<5;j++){write_com(0x84+j);delayms(5);if(j==2){write_dat('.');delayms(5);41武汉理工大学《单片机应用》实习报告书delayms(5);}elseif(j<2){write_dat(table[j]+'0');delayms(5);}elseif(j>2){write_dat(table[j-1]+'0');delayms(5);}}}}voidcom()interrupt4{RI=0;*p=SBUF;p++;}42