单片机期末课程设计报告.pdf
单片机与嵌入式系统课程设计报告课题名称:基于单片机控制的数字温度计学院:XXXXXXXXXXXXXXX 学 院系:XXXXXXXXXXXXXXXXXXX 系班级:X XXXXXX班学号:X XX姓名:X xx【中文摘要】随着科学技术的发展,单片机技术在人们的生活中发挥着越来越重要的作用,其应用的领域也在不断扩大,在现代工业、科研、生活等各个领域得到了广泛的应用,本文将介绍一种基于单片机控制的数字温度计,可以随时显示当前环境中的温度,其附加功能是通过4x4键盘修改进入系统的密码和退出系统。【关键词】AT89c51,温度计,DS18B20,AT24C02,12864【英文摘要】With the development of science andtechnology,SCM technology in playing an increasinglyimportant role in peoples life,its application fields are alsogrowing,living in the modern industry,scientific research,andother fields has been widely used,this article introduces a kindof digital thermometer based on single-chip microcomputercontrol,can display the current at any time in the environmenttemperature,the additional function is modified by 4 x4keyboard enter the system password and exit system.【关键词】AT89c51,The thermometer,DS18B20,AT24C02,12864目录引言.4第一章系统总体设计.5第二章硬件详细设计.52.1 单片机主控模块.52.2 按键输入模块.92.3 液晶显不模块.102.4 EEPROM 模块.122.5 温度传感器模块.14第三章软件详细设计.173.1 系统主程序流程图.173.2 按键输入程序流程图.183.3 液晶显不程序流程图.193.4 EEPROM读写程序流程图.203.5 温度采集程序流程图.22第四章系统仿真.234.1 系统仿真原理图.234.2 仿真结果.23第五章小结.24第六章附录.25引言随着科学技术的发展,单片机技术在人们的生活中发挥着越来越重要的作用,其应用的领域也在不断扩大,在现代工业、科研、生活等各个领域得到了广泛的应用,如工业测控、智能仪器仪表、日用家电、通信产品,等等,这些都离不开单片机的应用。单片机已成为现代电子系统中最重要的智能化核心部件。本课程设计是在学习了单片机的基本原理的基础上进行的,综合所学单片机知识完成一个单片机应用系统设计并进行仿真,从而加深对单片机知识的理解;进一步熟悉和掌握单片机的内部结构和工作原理,了解单片机应用系统设计的基本方法和步骤。课程设计的目标是用单片机和温度传感器及相关部件实现温度的测量和液晶显示,并通过4x4键盘实现密码的输入及修改,对各个功能模块进行相应的设计和程序的编写,最后在proteus软件上进行仿真,实现目标功能。第一章系统总体设计基于单片机控制的数字温度计总体设计方框图如下所示,主控制器用AT89c5 1,温度传感器用DS18B20,用 12864液晶显示温度信息及相关设计信息,用 4x4键盘实现进入系统的密码控制。图1;基于单片机控制的数字温度计总体设计方框图第二章硬件详细设计2.1 单片机主控模块2.1.1 AT89C51简要介绍AT89C51是 一 种 带 4 K 字节闪烁可编程可擦除只读存储器(FPEROM一Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8 位 CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。2.1.2引脚功能介绍GND:接地。P0 0:P0 口为一个双向8位三态I/O 口,每个口可独立控制,内部没有上拉电阻,为高阻状态,不能正常地输出高低电平,在使用时务必要外接上拉电阻,一般选择接入10千欧的上拉电阻。Pl:P1 口是一个内部提供上拉电阻的8位双向I/O 口,P1 缓冲器能接收输出4TTL门电流。P1 口管脚写入1后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1 口作为第八位地址接收。P2 口:P2 口为一个内部上拉电阻的8位双向I/O 口,P2 口缓冲器可接收,输 出4个TTL门电流,当P2 口被写“1”时 一,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。P2 口在FLASH编程和校验时接收高八位地址信号和控制信号。P3 0:P3 口管脚是8个带内部上拉电阻的双向I/O 口,可接收输出4个TTL门电流。当P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3 口将输出电 流(ILL)这是由于上拉的缘故。P3 口也可作为AT89c51的一些特殊功能口,如下表所示:P3.0 RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3 口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要 保 持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/P S E N有效。但在访问外部数据存储器时,这两次有效的/P S E N信号将不出现。EA/VPP:当/E A保持低电平时,则在此期间外部程序存储器(OOOOH-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/E A将内部锁定为RESET;当/E A端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加1 2 V编 程 电 源(VPP)oXTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.1.3最小系统(晶振、复位)电路图最小系统(晶振、复位)电路图如下图所示。R1D1470RLED-BIBY1-1=土31EAALEPSEN10uFP|R210kT 3RSTXTAL2XTAL1P3.7TOP3.6/VVRP3.5/T1P3.4/T0P3.3)lNTrP 3.2 A WP3.1/TXDP3.0RXDP2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A8P0.7/AD7P0.6/AD6P0.5/AD5P0.4/AD4P0.3/AD3P0.2/AD2P0.1/AD1P0.0/AD0H iH iHHigl浸H iH ihg口H i嚏gL-aa.AT89C51C333pFX1CRYSTALC233pF图2-1最小系统(晶振、复位)电路图2,2 按键输入模块2.2.1矩阵键盘与单片机硬件连接下图为protues中按键输入模块矩阵键盘与AT89C51连接的电路图,由图可知,矩阵键盘的4 行分别与单片机的PPOP1A3相连,矩2.2.2按键扫描原理矩阵键盘两端都与单片机的I/O 口相连,在检测时需认为通过单片机I/O 口送出低电平。检测时,先拉低第一行的电平,检测厂4 列有无键按下,如有则等待按键松开,返回键值,如无看第二行;拉低第二行的电平,检测14列有无键按下,如有则等待按键松开,返回键值,如无看第三行;拉低第三行的电平,检测厂4 列有无键按下,如有则等待按键松开,返回键值,如无看下行;拉低第四行的电平,检测14列有无键按下,如有则等待按键松开,返回键值,如无则返回无键按下。2.3 液晶显示模块简要介绍12864引脚功能。介绍12864与单片机的硬件连接。给出电路图。说明液晶显示字符的原理。2.3.1 12864引脚功能12864引脚功能说明如下:CS1,CS2一片选输入信号,分别用于选择左屏和右屏,低电平有效GND一模块的电源地VCC一模块的电源正端VO LCD驱动电压输入端DI寄存器选择控制线,D l=l时,表示进行的是数据操作;DI=O时,表示进行的是写指令或者读状态操作R/W一读写选择信号,R/W=l表示读,R/W=O表示写E一读写使能信号,在E的下降沿,数据被锁存到列驱动器KS0108B,在E高电平期,数据被读出DB0DB7双向数据总线,传输数据的通道RST一复位,低电平有效2.3.2 12864与单片机的硬件连接下图为protues中液晶显示模块12864液晶与AT89C51连接的电路图,由单片机的P2A3和P2A4引脚控制片选输入信号,DI、R/W、E三个引脚分别由单片机的P2A0P2A2三个引脚控制,DBCTDB7分别与单片机的POAfTPO”相连。LCD1LGM12641BS1R图2-3 12864液晶与AT89C51连接的电路图2.3.3液晶显示字符的原理12864点阵液晶显示模块就是由128*64个液晶显示点组成的一个128歹 64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAMo左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。显示点在6 4*6 4液晶屏上的位置由行号(line,063)与列号(column,0-6 3)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,07)和列地址(Yaddress,063)确定。每个存储单元存储8个液晶点的显示信息。为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*6 4列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括页地址(Xpage,07)和列地址(Yaddress,063)o2.4 EEPROM 模块2.4.1 AT24C02 的引脚AT24co2的引脚如图,各引脚功能如下:SCL:串行时钟输入管脚,用于产生器件所有数据发送或接收的时钟。SDA:双向串行数据/地址管脚,用于器件所有数据的发送或接收。A O、A l、A 2:器件地址输入端。这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。使用A T 2 4 c o 2最大可级联8个器件,如果只有一个2 4 c o 2被总线寻址,这三个地址输入脚A O、A l、A 2可悬空或连接到V S S。WP:写保护。如果WP管脚连接到V c c,所有的内容都被写保护,只能读。当WP管脚连接到V s s或悬空,允许器件进行正常的读/写操作。V S S:电源地(G N D)。V C C:电源电压(5 V)2.4.2 A T 2 4 C 0 2与单片机的硬件连接AQCP至 vc cAT2482芯片有8个引脚,其中i27 WPA2A0地址引期SDA串行数据地址引划,A 2 J36 SCLSCL串行时钟?倒V s s匚,2 _ SOAW P因注到区械写保妒只能读,连到Y ss或悬空允讦进行正常的读写操作AT24O1菅脚示意图V C C电源漏G N D接 出tA T 2 4 C 0 2的时钟引脚和数据地址引脚分别接在单片机的P 3 A 6引脚和P 3 A 7弓|脚,三个地址引脚和WP引脚直接接地。图2-4 AT24C02与单片机的硬件连接2.4.3 AT24C02数据读写的原理它通过SDA(串行数据线)及SCL串行时钟线)两根线在连到总线上的器件之间传送信息、,并根据地址识别每个器件。数据传送:当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号,起始状态应处于任何其他命令之前;当SCL线处于高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。2.5 温度传感器模块2.5.1 DS18B20 引脚功能:DS18B20引脚功能如下:GND一电压地DQ一单数据总线VDD电源电压NC一空引脚引脚排列D4UJ0引脚说明GND-地g -数据1加依 可选VDDMC-空脚图 2-5 DS18B20引脚图2.5.2 DS18B20与单片机的硬件连接DS18B20的DQ端与单片机的外部中断0引脚相连,并通过上拉电阻连到电源,VCC端连接电源,GND端接地。P3.0/RXDP3.1/TXDP3.2)iNT0P3.3/iNlFP3.4/T0P3.5/I1P3.6/WRP3.7WP2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15图 2-6 DS18B20与单片机的硬件连接2.5.3 温度采集的原理DS18B20工作原理及应用:DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20的内部存储器资源。18B20共有三种形态的存储器资源,它们分别是:ROM只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后 面48位是芯片唯一的序列号,最 后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B2O共64位ROM。RAM数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后的数据值信息、,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。EEPROM非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B2O共3位EEPROM,并 在RAM都存在镜像,以方便用户操作。DS18B20只需要接到控制器(单片机)的一个I/O 口上,由于单总线为开漏所以需要外接一个4.7K的上拉电阻。如要采用寄生工作方式,只要将-VDD电源引脚与单总线并联即可。第三章软件详细设计3.1系统主程序流程图3.2按键输入程序流程图3.3液晶显示程序流程图3.4 EEPROM读写程序流程图写操作流程读操作流程3.5温度采集程序流程图第四章系统仿真4.1 系统仿真原理图4.2 仿真结果LCD1LGU12G1B81R请输入密码:余丹Z013Z56Z简易温度计设计bb L L b x:N o a o-g 5 5 z iu iS SIMN)sE)r,二ftnft;3wI3r-第五章小结本系统实现了期末设计题目的所有要求,包括进入系统前先输入密码,判断密码正确再进入系统,进入系统后显示设计者信息,延时显示主菜单,按键选择菜单内容,按键修改系统密码,按键退出系统等功能。在这次的课程设计中,我学到了很多东西。在 画protues仿真图前要先确定自己做的设计的目的功能,选好每个功能对应的的函数模块需要的芯片,将芯片与单片机主控制模块的引脚进行正确有条理的连接,最后再根据仿真图以及各芯片的驱动程序编写源代码。在编写程序的过程中,一定要注意各个引脚与单片机I/O 口的对应的连接,否则即使源代码写好了仿真还会出错,且很难找到错误点O老师是在四周前布置的期末设计作业,在这四周中,老师也讲解了很多关于这个课程设计的思路以及代码的编写,在写这份课程设计报告的时候我还通过翻阅资料和查阅文库加深了更多关于AT24co2、DS18B20.12864液晶、4x4键盘等的硬件知识的了解。但系统还有一些不足之处,比如在显示温度的时候第一次总会显示+85.0C,以自己目前的知识还不能做到将这个缺点进行更好的改正,我会在日后的学习中对此进行更加完善的改进。第六章附录#include#include#define uchar unsigned char#define uint undsigned intextern void LCDInitialize();extern void DisplayString(uchar p,uchar l,uchar*s);extern void ClearScreen();extern float ReadTemperature();extern void DisplayChar8X16(uchar p,uchar I,uchar c);extern void WriteString(uchar add,uchar*s);extern void ReadString(uchar*s,uchar add.uchar n);extern uchar keyscan();uchar Password7;uchar UserPassword口=000000;使用者输入的密码uchar keyval;uchar TempBuffer=+000.0C;void Delayxms(int x)(int i;uchar j;for(i=0;ix;i+)for(j=0;j120;j+);void lnputPassword()(uchar i,keyJine=O;for(i=0;i9)key=keyscan();)UserPassword i=key+48;DisplayChar8X16(2,line/*,);line=line+8;)while(key!=15)(key=keyscan();)void CheckPassword()(ReadStringfPassword.OxOO/G);Delayxms(200);while(strcmp(UserPassword,Password)!=0)ClearScreen();DisplayString(O,O,密码错误);Delayxms(2000);ClearScreen();Displaystring。,请重新输入lnputPassword();)ClearScreenf);DisplayString(O,O,密码 Right);DisplayString(2,0,欢迎进入系统);Delayxms(2OOO);)void Designerlnformation()(DisplayString(O,O,余 丹)DisplayString(2,0;20132562);DisplayString(4,0,简易温度计设计);Delayxms(2000);)void DispMainMenu()DisplayString(O,O,l.简易温度计)DisplayString(2,0/2 修改密码);DisplayString(4,0,3.退出系统);void FloatToString(float x,uchar*s)(unsigned int temp;if(x=0)(s0=+;)else(s0=-;x=-x;temp=x*10;sl=temp/1000+48;s2=temp%1000/100+48;s3=temp%100/10+48;s4=.;s5=temp%10+48;void DispTempO(float temp;uchar key;ClearScreen();Displaystring。,当前温度:);while(l)(temp=ReadTemperature();FloatToString(temp,TempBuffer);DisplayString(2,0/TempBuffer);Delayxms(lOOO);key=keyscan();while(keyval!=15)keyval=keyscan();break;void Ed it Pa ss wo rd()uchar temp7;ClearScreen();DisplayString(O,O,请输入密码:);lnputPassword();strcpy(temp/UserPassword);ClearScreen();Displaystring。,请再次输入密码:);lnputPassword();if(strcmp(temp,UserPassword)=0)(ClearScreen();Displaystring。,”密码修改成功!WriteString(OxOO,UserPassword);elseClearScreen();Displaystring。,密码修改失败!keyval=keyscan();while(keyval!=15)keyval=keyscan();void ExitSystem()(ClearScreen();(void(code*)(void)OxOOOO)();)void main()(LCDInitialize();/WriteString(OxOO,123456);Displaystring。,请输入密码lnputPassword();CheckPassword();ClearScreen();Designer!nformation();Delayxms(2000);while(l)ClearScreen();DispMainMenu();keyval=keyscan();while(keyval31|keyvall)keyval=keyscan();switch(keyval)(case l:DispTemp();break;case 2:EditPassword();break;case 3:ExitSystem();break;)