基于51单片机温度检测LCD显示课程设计报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

大连民族学院单片机系统课程设计题目:温度计的设计班级:电子105姓名:赵萌同组人:张瑛笛指导教师:李绍民设计日期:一设计内容及要求设计内容:基于单片机的室内温度检测LCD显示要求:测量温度55℃—125℃温度上下限TH:32℃TL:16℃温度报警:超出温度上下限BEEP报警二设计方案测温部分:采用18B20作为温度传感器,有一个由高低电平触发的且不因掉电而丢失的报警功能。控制部分:89S52最小系统显示部分:1602液晶显示,模块内的字符发生存储器存储了160个不同的点阵图形,先是方便,同时好可以进行时间的显示。三硬件系统设计电源时钟晶振原理图AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52具有如下特点:40个引脚,8kBytesFlash片内程序存储器,256bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。AT89S52引脚图此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。I/O接口外围电路工作原理及硬件图四软件系统设计软件流程框图五仿真调试(1)KeilC51单片机软件开发系统的整体结构C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其系统设计原理:本次课程设计是基于单片机的数字温度计设计,在开始课程设计的时候我们要理解并掌握对单片机的开发,学会使用KEIL及Proteus等仿真软件。根据设计任务要求选择好器件,编写好程序运行成功之后进行软件联调,验证系统是否正确。通过筛选,我们组选用单片机AT89S52作为主控制系统;用1602液晶显示模块芯片作为温度数据显示装置;智能温度传感器采用DS18B20器件作为测温电路主要组成部分。它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。(2)使用独立的Keil仿真器时,注意事项仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。仿真器上的复位按钮只复位仿真芯片,不复位目标系统。仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。调试结果(3)结果分析在运行仿真结果时通过改变温度传感器DS18B20的温度,然后调用各种子函数,可以改变液晶显示1602的第二行显示数据,说明程序编写正确。(4)系统设计电路的特点和方案的优缺点我们组设计的数字温度计系统知识运用简单的AT89S52芯片的I/O口传输功能,通过几个小的读数据、传递数据、延时子函数实现温度的读取传输功能,是比较简单,容易实现的,所以我们的系统只是实现了一些简单的功能,系统整体来说比较简易,但好像这个温度计没有多大的应用价值,所以我们后续分析觉得这个系统可以加一个温度复位系统提高AT89S52芯片的功能价值,也提高数字温度计的智能价值,还可以增加一个报警子函数,实现智能数字温度计更高的应用价值。六结论虽然基本功能已经做好了,但还可以有很多的扩展功能,如串口设计和时钟显示,由于时间有限,但对于单片机的设计还在继续…参考文献附录一程序代码:#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitDQ=P2^2;//定义DS18B20端口DQsbitBEEP=P2^3;//蜂鸣器驱动线bitpresence,flag;bitcompare_th,compare_tl,alarm_on_off=0,temp_th,temp_tl;sbitLCD_RS=P3^5;sbitLCD_RW=P3^6;sbitLCD_EN=P3^4;ucharcodecdis1[]={READ_ROMCORD};ucharcodecdis2[]={};ucharcodecdis3[]={DS18B20ERR0R};ucharcodecdis4[]={PLEASECHECK};ucharcodecdis5[]={TEMP:};ucharcodecdis6[]={TH:TL:};unsignedchardatatemp_data[2]={0x00,0x00};unsignedchardatatemp_alarm[2]={0x20,0x10};unsignedchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//温度值显示unsignedchardatadisplay1[3]={0x00,0x00,0x00};//温度报警值显示unsignedchardataRomCode[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};unsignedcharcodemytab1[8]={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};unsignedcharTemp,temp_comp,timecount,count;unsignedcharcrc;voidDisp_Temp_alarm(ucharaddr,ucharnum);voidspk(ucharaddr);voidset_temp_alarm();voidtemp_compare();voidbeep();/*******************************************************************/voiddelay1(intms){unsignedchary;while(ms--){for(y=0;y250;y++){_nop_();_nop_();_nop_();_nop_();}}}/******************************************************************//**//*检查LCD忙状态*//*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。*//**//******************************************************************/bitlcd_busy(){bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(P0&0x80);LCD_EN=0;return(result);}/*******************************************************************//**//*写指令数据到LCD*//*RS=L,RW=L,E=高脉冲,D0-D7=指令码。*//**//*******************************************************************/voidlcd_wcmd(ucharcmd){delay1(10);LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/*******************************************************************//**//*写显示数据到LCD*//*RS=H,RW=L,E=高脉冲,D0-D7=数据。*//**//*******************************************************************/voidlcd_wdat(uchardat){delay1(10);LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/*******************************************************************//**//*自定义字符写入CGRAM*//**//*******************************************************************/voidwritetab(){unsignedchari;lcd_wcmd(0x40);//写CGRAMfor(i=0;i8;i++)lcd_wdat(mytab1[i]);for(i=0;i8;i++)lcd_wdat(mytab2[i]);}/*******************************************************************//**//*LCD初始化设定*//**//*******************************************************************/voidlcd_init(){delay1(15);lcd_wcmd(0x01);//清除LCD的显示内容lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据delay1(5);lcd_wcmd(0x38);delay1(5);lcd_wcmd(0x38);delay1(5);lcd_wcmd(0x0c);//显示开,关光标delay1(5);lcd_wcmd(0x06);//移动光标delay1(5);lcd_wcmd(0x01);//清除LCD的显示内容delay1(5);writetab();//自定义字符写入CGRAM}/*******************************************************************//**//*设定显示位置*//**//*******************************************************************/voidlcd_pos(ucharpos){lcd_wcmd(pos|0x80);//数据指针=80+地址变量}/***********************************************************

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功