DS18B20温度传感器、51单片机最小系统、PL2303USB转串口模块,杜邦线
电脑和软件keil c51、pl2303驱动、stc-isp、串口调试助手
打开keil软件,点,选择project-new uvision project新建工程文件
选择atmel下的at89c51单片机
点“是”确认添加启动文件
双击打开”target1”,右键add new item添加新项目,选c语言
/*输入定义代码*/#include
/*编写初始化温度传感器的代码*/void initcgq(void){ uchar x=0; io=1; delay(8); io=0; delay(80); io=1; delay(14); delay(20);}
/*编写读写温度传感器的代码*/uchar read(void){ uchar i=0,dat=0; for(i=8;i>0;i--) { io=0; dat>>=1; io=1; if(io)dat|=0x80; delay(4); } return(dat);}void write(uchar dat){ uchar i=0; for(i=8;i>0;i--) { io=0; io=dat&0x01; delay(5); io=1; dat>>=1; }}
/*编写转温度的代码*/uint readt(void){uchar x=0,y=0;uint t=0;float tt=0;initcgq();write(0xCC);write(0x44);initcgq();write(0xCC); write(0xBE);x=read();y=read();t=y;t<<=8;t=t|x;tt=t*0.0625; t= tt*10+0.5; return(t);}
/*编写初始化串口的函数和主函数*/void chuankou4800(){ SCON=0X50; TMOD=0X20; PCON=0X80; TH1=0XF3; TL1=0XF3; EA=1; TR1=1;}void main(){ chuankou4800(); while(1){ SBUF=readt(); while(!TI); TI=0; }}
点击target options按钮
切换到output选项卡,勾选create hex file
点击rebuild按钮全部编译
编译完成后提示错误为0,警告为0,编译成功
在工程文件的相同目录里会生成对应的hex文件
准备好单片机,杜邦线和PL2303模块
将pl2303的5.0V连接单片机最小系统的VCC;将pl2303的txd连接单片机最小系统的rxd;将pl2303的rxd连接单片机最小系统的txd;将pl2303的gnd连接单片机最小系统的gnd;
将pl2303插入电脑,打开stc-isp,找到单片机对应的型号,选择之前生成的hex文件
点击下载-编程按钮,之后断开单片机最小系统上的vcc线,一秒之后再将vcc接回原处
软件提示操作成功
拿出DS18B20,面对文字,引脚向下,从左向右分别接入单片机的GND,P3.7,VCC
连接完成之后插入电脑
打开串口调试助手,选择对应的串口,波特率调制4800,勾选hex显示,即可得到16进制的温度
十六进制数转换为十进制,除以10,就得到了十进制的摄氏度(比如我的是fb,转10进是251,温度为25.1摄氏度)
如果测得温度过低,可能是数据溢出.只需要在原始数据加上FF(25.5)即可
电源不要接反,不然可能会烧坏元件!!