预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共19页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

DS18B20测温模块: #defineucharunsignedchar #defineuintunsignedint #include<reg51.h> #include<intrins.h> sbitDQ=P1^0; bdatauchardat; sbitdat0=dat^0; sbitdat7=dat^7; //以下为四个传感器的序列号 /*ucharcodeid[8][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e}, {0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9}, {0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0}, {0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}, {0x28,0x34,0xc5,0xb8,0x00,0x00,0x00,0x52}, {0x28,0x35,0xc5,0xb8,0x00,0x00,0x00,0x65}, {0x28,0x36,0xc5,0xb8,0x00,0x00,0x00,0x3c}, {0x28,0x37,0xc5,0xb8,0x00,0x00,0x00,0x0b}}; */ voiddelay15(ucharn)//约15us延时 {do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); n--; }while(n); } voidlate()//延时700ms {uchari; for(i=0;i<200;i++)delay15(200); } //该函数返回为0,表示有DS1820,否则没有 bitreset(void) {biterr; DQ=0; delay15(40); DQ=1; delay15(6); err=DQ; delay15(18); return(err); } voidwrbyte(uchard)//向总线写入一个字节 {uchari; dat=d; for(i=8;i>0;i--) {DQ=0; delay15(1); DQ=dat0; dat=dat>>1; delay15(1); DQ=1; } } ucharrdbyte(void)//从总线上读取一个字节 {uchari; dat=0; for(i=8;i>0;i--) {dat=dat>>1; DQ=0; _nop_(); DQ=1; delay15(1); dat7=DQ; delay15(4);//新增在位与位之间加入50US的延时 } return(dat); } voidconvert(void) {biterr; err=reset(); //复位DS18B20 wrbyte(0xcc); //发READROM命令 wrbyte(0x44); //发READROM命令 } intreadt(void) { ucharh,l; //复位DS18B20 reset(); //复位DS18B20 wrbyte(0xcc); //发READROM命令 wrbyte(0xbe); //发READROM命令 l=rdbyte(); //读取温度低字节、高字节 h=rdbyte(); return(h*256+l); //保存16位温度值 } LCD12864I/O液晶显示模块: #include<reg51.h> #include<intrins.h> #include<absacc.h> #defineucharunsignedchar #defineuintunsignedint sbit LCD_RST=P3^7; sbit DI=P3^4; sbit RW=P3^5; sbit CS=P3^3; sbit EN=P3^6; sbit RDY=P0^7; sfr LCD=0x80; #define LCD_DISPON 0x3f//打开LCM显示命令 #defineLCD_STARTROW0xc0 //设置起始行命令,用LCD_STARTROW+x设置起始行(x<64) #define LCD_ADDRSTRY0xb8 //设置页地址命令,用LCD_ADDRSTRX+x设置当前页(x<8) #define LCD_ADDRSTRX0x40 //设置列地址命令,用LCD_ADDRSTRY+x设置当前列(x<64) #de