完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
要求如下:传感器用DS18B20型号的,单片机用AT89C51型号的,使用数码管显示(显示有一位小数点)。那位好心人有这个程序和原理图。分享一下,非常感谢啊!
|
|
相关推荐
8个回答
|
|
这是我做过的东东!
|
|
|
|
给我发一个啊
|
|
|
|
你好,你做过的 基于单片机的温度测控系统 可以发给我一份吗?我想吸取一下经验,谢谢。QQ380848536 万分感谢!!{:soso_e102:} |
|
|
|
|
|
{:soso_e100:}
|
|
|
|
很好的东西!
|
|
|
|
#include "reg51.h"
#include "intrins.h" //_nop_();延时函数用 #define Disdata P0 //段码输出口 #define discan P2 //扫描口 #define uchar unsigned char #define uint unsigned int ***it DQ=P3^3; //温度输入口 ***it DIN=P0^7; //LED小数点控制 uint h; uchar flag; //**************温度小数部分用查表法***********// uchar code ditab[16]= {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; // uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" uchar code scan_con[4]={0x7f,0xbf,0xdf,0xef}; //列扫描控制字 uchar data temp_data[2]={0x00,0x00}; //读出温度暂放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用 // // // /***********11微秒延时函数**********/ // void delay(uint t) { for(;t>0;t--); } // /***********显示扫描函数**********/ scan() { char k; for(k=0;k<4;k++) { Disdata=0xff; Disdata=dis_7[display[k]]; if(k==1){DIN=0;} discan=scan_con[k];delay(90); discan=0xff; } } // // /***********18B20复位函数**********/ ow_reset(void) { char presence=1; while(presence) { while(presence) { DQ=1;_nop_();_nop_(); DQ=0; delay(50); DQ=1; delay(6); presence=DQ; } delay(45); presence = ~DQ; } DQ=1; } // // /**********18B20写命令函数*********/ void write_byte(uchar val) { uchar i; for (i=8; i>0; i--) // { DQ=1;_nop_();_nop_(); DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us DQ = val&0x01; delay(6); val=val/2; } DQ = 1; delay(1); } // /*********18B20读1个字节函数********/ uchar read_byte(void) { uchar i; uchar value = 0; for (i=8;i>0;i--) { DQ=1;_nop_();_nop_(); value>>=1; DQ = 0; // _nop_();_nop_();_nop_();_nop_(); //4us DQ = 1;_nop_();_nop_();_nop_();_nop_(); //4us if(DQ)value|=0x80; delay(6); //66us } DQ=1; return(value); } // /***********读出温度函数**********/ // read_temp() { ow_reset(); //总线复位 write_byte(0xCC); // write_byte(0xBE); // 发读命令 temp_data[0]=read_byte(); //温度低8位 temp_data[1]=read_byte(); //温度高8位 ow_reset(); write_byte(0xCC); // Skip ROM write_byte(0x44); // 发转换命令 } // /***********温度数据处理函数**********/ void work_temp() { uchar n=0; uchar doth,dotl; uchar flag3=1,flag2=1; if((temp_data[1]&0xf8)!=0x00) { temp_data[1]=~(temp_data[1]); temp_data[0]=~(temp_data[0])+1; n=1; flag=1; } if(temp_data[0]>255) { temp_data[1]++; } display[4]=temp_data[0]&0x0f; display[0]=ditab[display[4]]; doth=display[0]/10; dotl=display[0]%10; display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x07)<<4); display[3]=display[4]/100; display[2]=display[4]/10%10; display[1]=display[4]%10; if(!display[3]) { display[3]=0x0a; flag3=0; if(!display[2]) { display[2]=0x0a; flag2=0; } }//最高位为0时都不显示 if(n) { display[3]=0x0b;//负温度时最高位显示"-" flag3=0; } } main() { Disdata=0xff; discan=0xff; for(h=0;h<4;h++){display[h]=8;} ow_reset(); write_byte(0xCC); write_byte(0x44); for(h=0;h<500;h++) {scan();} while(1) { read_temp(); work_temp(); scan(); } } |
|
|
|
谢谢分享
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
828 浏览 0 评论
824 浏览 0 评论
861 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
836 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1292 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11821 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 07:00 , Processed in 0.663068 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号