仪器网(yiqi.com)欢迎您!

| 注册 登录
网站首页-资讯-专题- 微头条-话题-产品- 品牌库-搜索-供应商- 展会-招标-采购- 社区-知识-技术-资料库-方案-直播- 视频

问答社区

求一个51单片机控制的温度计显示程序

双爵22 2012-05-03 04:58:40 358  浏览
  • stc98c51控制2个4位数码管,温度传感器为DS18B20。数码管的a,b,c,d,e,f,g,dp端接在P0口... stc98c51控制2个4位数码管,温度传感器为DS18B20。数码管的a,b,c,d,e,f,g,dp端接在P0口 展开

参与评论

全部评论(2条)

  • 吾名心控丶0P3 2012-05-04 00:00:00
    下面写的好详细啊,其实还是很简单的,要是有不懂的可以问我

    赞(6)

    回复(0)

    评论

  • 仁渣wsl 2018-05-06 00:00:00
    这个程序完全没问题的,我做过实验。希望对你有帮助,,,, //DS18B20的读写程序,数据脚P3.3 // //温度传感器18B20汇编程序,采用器件默认的12位转化 // //Z大转化时间750微秒,显示温度-55到+125度,显示精度 // //为0.1度,显示采用4位LED共阳显示测温值 // //P0口为段码输入,P24~P27为位选 // /***************************************************/ #include "reg51.h" #include "intrins.h" //_nop_();延时函数用 #define Disdata P0 //段码输出口 #define discan P2 //扫描口 #define uchar unsigned char #define uint unsigned int sbit DQ=P3^3; //温度输入口 sbit 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++) //四位LED扫描控制 { 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); // 550us DQ=1; // delay(6); // 66us presence=DQ; // presence=0继续下一步 } delay(45); //延时500us presence = ~DQ; } DQ=1; } // // /**********18B20写命令函数*********/ //向 1-WIRE 总线上写一个字节 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; //Z低位移出 delay(6); //66us 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); // 发Skip ROM命令 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; } }//Z高位为0时都不显示 if(n) { display[3]=0x0b;//负温度时Z高位显示"-" flag3=0; } } // // /**************主函数****************/ main() { Disdata=0xff; //初始化端口 discan=0xff; for(h=0;h<4;h++){display[h]=8;}//开机显示8888 ow_reset(); // 开机先转换一次 write_byte(0xCC); // Skip ROM write_byte(0x44); // 发转换命令 for(h=0;h<500;h++) {scan();} //开机显示"8888"2秒 while(1) { read_temp(); //读出18B20温度数据 work_temp(); //处理温度数据 scan(); //显示温度值2秒 } } // //*********************结束**************************//

    赞(11)

    回复(0)

    评论

获取验证码
我已经阅读并接受《仪器网服务协议》

热门问答

求一个51单片机控制的温度计显示程序
stc98c51控制2个4位数码管,温度传感器为DS18B20。数码管的a,b,c,d,e,f,g,dp端接在P0口... stc98c51控制2个4位数码管,温度传感器为DS18B20。数码管的a,b,c,d,e,f,g,dp端接在P0口 展开
2012-05-03 04:58:40 358 2
求一段汇编程序,利用51单片机控制超声波传感器测距的程序。
 
2012-04-18 20:35:53 246 2
求一个正确的基于51单片机的函数信号发生器的C程序
要自己调试成功的,不要在网上找的,波形产生是用DAC0832,频率显示用数码管也行,LCD1602也行,多谢大神帮忙,小弟不胜感激... 要自己调试成功的,不要在网上找的,波形产生是用DAC0832,频率显示用数码管也行,LCD1602也行,多谢大神帮忙,小弟不胜感激 展开
2014-05-13 10:50:43 414 3
基于51单片机,ADC0804,光敏电阻,湿度传感器,求程序!!!!
我用的51单片机,采集光强度和空气湿度,利用了两个ADC0804进行转换(光敏电阻和电阻式湿度传感器),但是没有相应程序,哪位大哥能帮忙弄一个程序啊?如果是可行的程序,我账号里剩下... 我用的51单片机,采集光强度和空气湿度,利用了两个ADC0804进行转换(光敏电阻和电阻式湿度传感器),但是没有相应程序,哪位大哥能帮忙弄一个程序啊?如果是可行的程序,我账号里剩下的分全给你,虽然不多... 展开
2011-06-01 01:20:26 255 4
单片机控制直流电机调速,求程序!!
硬件电路已经搭好了,就差程序了,哪位高手指导一下程序,或者提供一下程序,不胜感激!... 硬件电路已经搭好了,就差程序了,哪位高手指导一下程序,或者提供一下程序,不胜感激! 展开
2013-12-23 01:22:36 283 1
汇编语言 51单片机 器程序
 
2017-04-19 08:39:13 340 1
51单片机信号发生器的正弦波程序
voidvout_sin(void)//输出正弦波{floatx;//用于正弦波发生器if(Voutsin())//“正弦波按键”被有效按下do{for(x=-3.1415;x<3.1415;x+=0.1)//正弦波发生器{vout=255*(1+sin(x))/2;//输出... void vout_sin(void) //输出正弦波
{ float x; //用于正弦波发生器
if(Voutsin()) //“正弦波按键”被有效按下
do{
for(x=-3.1415;x<3.1415;x+=0.1) //正弦波发生器
{ vout=255*(1+sin(x))/2; //输出值vout必须大于0
P1=vout;
delay_out();
} } while(P3_0==1&P3_1==1&P3_2==1&P3_4==1) } 此段程序中do{}内的内容不是很理解,希望好心网友帮忙解释一下,财富值不是很多,谢谢了。 展开
2013-04-02 06:51:20 489 3
51单片机的LED显示
secondminutehour三个内容显示在八个LED上。是做电子时钟的显示部分。可以加QQ聊,能用会给报酬。... second minute hour 三个内容显示在八个LED上。是做电子时钟的显示部分。可以加QQ聊,能用会给报酬。 展开
2018-07-26 06:05:17 270 2
求一段汇编程序,利用51单片机控制3个超声波传感器测距的C语言程序
 
2017-07-25 22:41:03 271 1
急求 基于51单片机 yl69土壤湿度传感器 lcd1602显示湿度c语言程序
 
2016-11-10 05:49:23 395 2
51单片机如何控制超声波传感器 求C语言程序(一定要能用)100追加
型号是DYP-ME007 VCC(DC5V)、Trig(发射端)、Echo(接收端)、 Out(空)、 GND(地) (1)采用IO触发测距,给8--15us的高电平信号即可; (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回,通过IO输出一高电平,高电平持续的... 型号是DYP-ME007 VCC(DC5V)、Trig(发射端)、Echo(接收端)、 Out(空)、 GND(地) (1)采用IO触发测距,给8--15us的高电平信号即可; (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间. 测试距离=(高电平时间*声速(340M/S))/2; 展开
2012-01-07 22:26:00 531 2
求一个简易单片机频率计设计程序
频率测量精度为1HZ 误差小于10HZ通过LCD1602显示出来
2010-07-11 07:06:44 473 2
51单片机制作简易数字频率计程序
 
2010-12-09 18:27:45 202 1
求51单片机设计数字频率计,附带Proteus仿真和程序
 
2014-05-13 23:13:37 332 1
温度控制51单片机,DS1820温度传感器的程序
只要一小段,温度加热时候的程序,我要用Keil和proteus编程仿真的,加热到40,60,80的时候分别需要恒定温度一段时间后,在继续加热....... 只要一小段,温度加热时候的程序,我要用Keil 和 proteus 编程仿真的,加热到40,60,80 的时候分别需要恒定温度一段时间后,在继续加热.... 展开
2014-11-16 03:23:05 278 2
求个51单片机超声波测距(距离+报警)的c程序
求个51单片机超声波测距(距离+报警)的c程序
2017-05-19 03:18:16 374 1
51单片机如何控制超声波传感器 ?
 
2018-12-04 16:38:54 355 0
求用51单片机与DS18B20测温的C程序。完整的。
 
2016-05-21 11:08:36 354 1
51单片机温度控制系统的C语言程序
设计基于单片计算机的温度控制器。用于控制电加热炉的温度。具体要求如下1.温度连续可调,范围为30℃~150℃2.超调量σ%≤20%3.温度误差≤±0.5℃4.人-机对话方便5.控制算法采用PID或改... 设计基于单片计算机的温度控制器。用于控制电加热炉的温度。具体要求如下 1. 温度连续可调,范围为30℃~150℃ 2. 超调量σ%≤20% 3. 温度误差≤±0.5℃ 4. 人-机对话方便 5. 控制算法采用PID或改进的PID或其他算法 .请发至3166109374@qq.com 谢谢帮忙 具体见http://wenku.baidu.com/view/e0feacf0f121dd36a22d822c 展开
2015-06-07 00:06:30 421 3
51单片机频率计的中断程序怎么设计
有一个信号由200hz的NRZ码控制输出两个频率不同的方波(1600,800)。现在要还原,如果检测到1600则p3.5输出高电平,800则输出低电平。我的设想是定时一个5ms的中断,对输入的方波电平0→1进行计数。计数值大于(8+4)/2=6的话输出1,小于输出0。请问这样可以... 有一个信号由200hz的NRZ码控制输出两个频率不同的方波(1600,800)。现在要还原,如果检测到1600则p3.5输出高电平,800则输出低电平。我的设想是定时一个5ms的中断,对输入的方波电平0→1进行计数。计数值大于(8+4)/2=6的话输出1,小于输出0。请问这样可以吗?对于定时器计时器还有中断的使用不大明白,可否简略写下程序。谢谢 展开
2015-05-26 01:56:14 430 1

10月突出贡献榜

推荐主页

最新话题