基于Proteus的温湿度采集系统设计

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

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

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

资源描述

基于Proteus的温湿度采集系统设计一.设计目的:1.熟悉Proteus的操作环境,能够使用keilu-vision和Proteus对单片机程序进行联合调试的方法。2.熟悉单片机的编程,学习根据时序图编写程序的方法,理解模块化编程的思想。3.掌握1602液晶显示模块程序的编写。二.设计要求:通过SHT10土壤温湿度传感器对当前的温度和湿度进行采集,并将采集的结果送1602液晶进行实时显示。三.设计方案:1.硬件电路设计(1)单片机最小系统单片机最小系统由晶振电路和上电复位电路组成。d0d1d2d3d4d5d6d7RSRWEXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51C122pfC222pfC310uFX1CRYSTALR110k图一单片机最小系统(2)1602液晶显示电路本设计采用LCD1602液晶作为显示器件,1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。d0d1d2d3d4d5d6d7ERSRWd7d6d5d4d3d2d1d0D714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3LCD1LM016L234567891RP1RESPACK-8图二液晶显示电路(3)SHT10温湿度传感器电路SHT10系列单芯片传感器是一款含有已校准数字信号输出的温湿度复合传感器。该传感器包括一个电容式聚合体测湿元件和一个能隙式测温元件组成,并与一个14位的AD转换器和串行接口电路进行无缝连接。采用两线式串行方式与单片机进行通信,但通信协议并不是IIC总线式。43.018.0%RH癈DATA2SCK3U2SHT102.软件设计(1)液晶显示部分程序/*************端口定义***************P1.0------SCK(SHT10)P1.1------DATA(SHT10)P0------DB0~DB7(LCD1602)P2.0------RS(LCD1602)P2.1------RW(LCD1602)P2.2------E(LCD1602)************************************/#includereg52.h#includeintrins.h#includestdio.h#includestring.h#includeabsacc.h#includemath.h#defineucharunsignedchar#defineuintunsignedint//1602液晶端口定义sbitLcdRs=P2^0;sbitLcdRw=P2^1;sbitLcdEn=P2^2;sbitACC0=ACC^0;sbitACC7=ACC^7;ucharstr[7];uchardis[4];//向LCD写入命令或数据#defineLCD_COMMAND0//Command#defineLCD_DATA1//Data#defineLCD_CLEAR_SCREEN0x01//清屏#defineLCD_HOMING0x02//光标返回原点//设置显示模式************************************************************#defineLCD_SHOW0x04//显示开#defineLCD_HIDE0x00//显示关#defineLCD_CURSOR0x02//显示光标#defineLCD_NO_CURSOR0x00//无光标#defineLCD_FLASH0x01//光标闪动#defineLCD_NO_FLASH0x00//光标不闪动//设置输入模式************************************#defineLCD_AC_UP0x02#defineLCD_AC_DOWN0x00//default#defineLCD_MOVE0x01//画面可平移#defineLCD_NO_MOVE0x00//defaultunsignedcharLCD_Wait(void);voidLCD_Write(bitstyle,unsignedcharinput);/****1602液晶显示部分子程序******/voiddelay(uintz){uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voidLCD_Write(bitstyle,unsignedcharinput){LcdRs=style;P0=input;delay(5);LcdEn=1;delay(5);LcdEn=0;}voidLCD_SetDisplay(unsignedcharDisplayMode){LCD_Write(LCD_COMMAND,0x08|DisplayMode);}voidLCD_SetInput(unsignedcharInputMode){LCD_Write(LCD_COMMAND,0x04|InputMode);}//初始化LCD*********************************voidLCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);//开启显示,无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);//AC递增,画面不动}//液晶字符输入的位置************************voidGotoXY(unsignedcharx,unsignedchary){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}//将字符输出到液晶显示voidPrint(unsignedchar*str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}voidzhuanhuan(floata)//浮点数转换成字符串函数{memset(str,0,sizeof(str));sprintf(str,%f,a);}voidDataconv(unsignedchardat){uchartemp;temp=dat/100;dis[0]=temp+0x30;temp=dat%100;dis[1]=temp/10+0x30;dis[2]=temp%10+0x30;}voidwelcome(){LCD_Initial();GotoXY(0,0);Print(Welcome!);GotoXY(0,1);Print(Codeofsht10);delay(200);}/*--------------------------------------;模块名称:delay_n10us();;功能:延时函数,延时约n个10us较精确的延时函数,_nop_()延时1us@12M晶振;-------------------------------------*/voiddelay_n10us(uintn)//延时n个10us@12M晶振{uinti;for(i=n;i0;i--){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}}2.SHT10测量温湿度程序sbitSCK=P2^3;//定义通讯时钟端口sbitDATA=P2^4;//定义通讯数据端口typedefunion{unsignedinti;//定义了两个共用体floatf;}value;enum{TEMP,HUMI};//TEMP=0,HUMI=1#definenoACK0//用于判断是否结束通讯#defineACK1//结束数据传输//adrcommandr/w#defineSTATUS_REG_W0x06//00000110#defineSTATUS_REG_R0x07//00000111#defineMEASURE_TEMP0x03//00000011#defineMEASURE_HUMI0x05//00000101#defineRESET0x1e//00011110/****************定义函数****************/voids_transstart(void);//启动传输函数voids_connectionreset(void);//连接复位函数chars_write_byte(unsignedcharvalue);//DHT90写函数chars_read_byte(unsignedcharack);//DHT90读函数chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode);//测量温湿度函数voidcalc_dht90(float*p_humidity,float*p_temperature);//温湿度补偿/*--------------------------------------;模块名称:s_transstart();;功能:启动传输函数;-------------------------------------*/voids_transstart(void)//generatesatransmissionstart{DATA=1;SCK=0;//Initialstate_nop_();SCK=1;_nop_();DATA=0;_nop_();SCK=0;_nop_();_nop_();_nop_();SCK=1;_nop_();DATA=1;_nop_();SCK=0;}/*--------------------------------------;模块名称:s_connectionreset();;功能:连接复位函数;-------------------------------------*/voids_connectionreset(void)//communicationreset:DATA-line=1andatleast9SCKcyclesfollowedbytransstart//{unsignedchari;DATA=1;SCK=0;//Initialstatefor(i=0;i9;i++)//9SCKcycles{SCK=1;SCK=0

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

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

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

×
保存成功