1电子装置与系统课程设计班级:电科1班姓名:周奇超学号:Xb11640119前言AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系列可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,也适用于常规编程。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89C52为众多嵌入式控制应用系统提供高灵活、超高效的解决方案。课程设计的目的和要求使学生通过本次课程设计,得到一次综合性的工程和动手能力的锻炼,它要求学生从系统的性能指标出发,在理解硬件总体方案的基础上设计系统的软件总体方案。在软件方案中还应对传感器建模、补偿等。进行电路调试,软件设计、制作及调试。学生经过本课题的训练能为今后的学习打下良好的基础。单片机常规应用综合设计要求如下:(1)LCD部分:液晶屏1602只需要显示自己的学号,12864的液晶屏上还需要显示自己的中文姓名。显示要求如:XB123200101张三(2)实时时钟:能够控制时钟芯片DS1302,读写当前日期,并显示到LCD上。显示要求如:2012/10/2608:18:00(3)温度检测:利用传感器DS18B02检测温度。并在LCD上显示最高温度,最低温度和当前温度,显示要求如:TEMP:25.5OC基于51单片机的压力测量仪设计要求如下:(1)理解硬件总体方案,掌握硬件电路工作原理。(2)编写程序,实现LCD显示。(3)编程实现对压力传感器的数据转换和显示。(4)综合调试。总体设计一、单片机常规应用:2图1单片机常规应用系统图二、压力测量仪:图2压力采集放大电路硬件设计一、单片机常规应用:3AT89C52主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。图3AT89C52单片机LCD1602工业字符型液晶,能够同时显示16x02即32个字符。管脚定义:第1脚:GND为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。4第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。图4LCD1602DS1302DS1302的在实时显示时间中的应用。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302的引脚排列,其中Vcc2为主电源,VCC1为后备电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据传送的方法。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;5位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。图5DS1302DS18B20DS18B20,常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。若指令成功地使DS18B20完成温度测量,数据存储在DS18B20的存储器。一个控制功能指挥指示DS18B20的演出测温。测量结果将被放置在DS18B20内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。温度报警触发器TH和TL都有一字节EEPROM的数据。如果DS18B20不使用报警检查指令,这些寄存器可作为一般的用户记忆用途。在片上还载有配置字节以理想的解决温度数字转换。写TH,TL指令以及配置字节利用一个记忆功能的指令完成。通过缓存器读寄存器。所有数据的读,写都是从最低位开始。控制命令:指令约定代码操作说明温度转换44H启动DS18B20进行温度转换读暂存器BEH读暂存器9字节二进制数字写暂存器4EH将数据写入暂存器的TH、TL字节复制暂存器48H把暂存器的TH、TL字节写到E2PROM中重新调E2PROMB8H把E2PROM中的TH、TL字节写到暂存器TH、TL字节读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主CPU图6DS18B20二、压力测量仪:6将读取到的微小电压值通过放大器进行放大,再将放大的电压值被单片机的I/O口接收,经内部ad转换成数字信号,再通过算法将真实的电压值及压力值算出,最后控制LCD1602进行显示。软件设计一、单片机常规应用:1、LCD:液晶屏1602显示自己的学号。软件部分主要包括lcd1602相关控制及显示部分、延时程序等。其主要流程是通过单片机的I/O口接收数据,并将数据写入到液晶显示屏,并将数据进行显示。主程序图7主程序流程图主程序:#includereg51.h//包含头文件#includeintrins.hsbitrs=P2^0;//1602的数据/指令选择控制线sbitrw=P2^1;//1602的读写控制线sbitep=P2^2;//1602的使能控制线unsignedcharcodedis2[]={Xb11640119};//输入要显示的内容voiddelay(unsignedcharms)//延时函数{7unsignedchari;while(ms--){for(i=0;i250;i++){_nop_();_nop_();_nop_();_nop_();}}}bitlcd_bz(){bitresult;rs=0;rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P0&0x80);ep=0;returnresult;}voidlcd_wcmd(unsignedcharcmd)//1602写命令函数{while(lcd_bz());//判断LCD是否忙碌rs=0;//选择指令寄存器rw=0;//选择写ep=0;//置低电平_nop_();_nop_();P0=cmd;//把命令字送入P0_nop_();_nop_();_nop_();_nop_();ep=1;//置高电平_nop_();_nop_();8_nop_();_nop_();ep=0;}voidlcd_pos(unsignedcharpos){lcd_wcmd(pos|0x80);}voidlcd_wdat(unsignedchardat)//1602写数据函数{while(lcd_bz());//判断LCD是否忙碌rs=1;//选择数据寄存器rw=0;//选择写ep=0;//置低电平P0=dat;//把要显示的数据送入P0_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidlcd_init()//1602初始化函数{lcd_wcmd(0x38);//8位数据,双列,5*7字形delay(1);lcd_wcmd(0x0c);//开启显示屏,关光标,光标不闪烁delay(1);lcd_wcmd(0x06);//显示地址递增,即写一个数据后,显示位置右移一位delay(1);lcd_wcmd(0x01);//清屏delay(1);}voidmain(void)//主函数{unsignedchari;9lcd_init();//液晶初始化delay(10);lcd_pos(0x01);//设置显示位置i=0;while(dis1[i]!='\0'){lcd_wdat(dis1[i]);//显示字符i++;}lcd_pos(0x42);//设置显示位置i=0;while(dis2[i]!='\0'){lcd_wdat(dis2[i]);//显示字符i++;}while(1);//动态停机}初始化初始化液晶显示屏程序清单如下:voidLcdInitiate(void){delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间WriteInstruction(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口delay(5);//延时5msWriteInstruction(0x38);delay(5);WriteInstruction(0x38);delay(5);WriteInstruction(0x0f);//显示模式设置:显示开,有光标,光标闪烁delay(5);WriteInstruction(0x06);//显示模式设置:光标右移,字符不移delay(5);WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除delay(5);}写数据将数据写入到液晶显示屏程序清单如下:voidWriteData(unsignedchary){while(BusyTest()==1);RS=1;//RS为高电平,RW为低电平时,可以写入数据RW=0;10E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲,//就是让E从0到1发生正跳变,所以应先置0P0=y;//将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}2、实时时钟:控制时钟芯片DS1302,读写当前日期,并显示到LCD上。主程序11图8实时时钟主程序流程即总体流程,以下是主程序清单:voidmain(void){timer1_init();init();write_pos(0x06);write_data('-');write_pos(0x08);write_data(':');while(1){dates();times();marixKeyscan();if(counter==50){counter=0;tmiao++;if(tmiao=60){tmiao=0;tfen++;if(tfen=60){tfen=0;tshi++;if(tshi=