DS18B20数码管显示.zip

  • Flin2020
    了解作者
  • C/C++
    开发工具
  • 28KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2020-06-02 11:24
    上传日期
温度传感器DS18B20的采集与数码管显示
DS18B20数码管显示.zip
  • DS18B20数码管显示
  • Objects
  • DS18B20数码管显示.lnp
    141B
  • DS18B20数码管显示.build_log.htm
    1.1KB
  • MAIN.obj
    5.7KB
  • DS18B20数码管显示.hex
    3.5KB
  • STARTUP.obj
    819B
  • Listings
  • STARTUP.lst
    13.8KB
  • MAIN.lst
    8.7KB
  • DS18B20数码管显示.m51
    11.9KB
  • DS18B20数码管显示.uvgui.ASUS
    88.3KB
  • STARTUP.A51
    6.2KB
  • MAIN.c
    5.5KB
  • DS18B20数码管显示.uvproj
    14.1KB
  • DS18B20数码管显示.uvopt
    5.6KB
内容介绍
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include"temp.h" typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; sbit beep=P1^5; sbit M = P1^0; //typedef unsigned int u16; //对数据类型进行声明定义 char num=0; u8 DisplayData[8]; u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : datapros() * 函数功能 : 温度读取处理转换函数 * 输 入 : temp * 输 出 : 无 *******************************************************************************/ void datapros(int temp) { float tp; if(temp< 0) //当温度值为负数 { DisplayData[0] = 0x40; // - //因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp; temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算加上0.5,还是在小数点后面。 } else { DisplayData[0] = 0x00; tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量 //如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算加上0.5,还是在小数点后面。 } DisplayData[1] = smgduan[temp / 10000]; DisplayData[2] = smgduan[temp % 10000 / 1000]; DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80; DisplayData[4] = smgduan[temp % 100 / 10]; DisplayData[5] = smgduan[temp % 10]; } /******************************************************************************* * 函数名 :DigDisplay() * 函数功能 :数码管显示函数 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void DigDisplay() { u8 i; for(i=0;i<6;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 } P0=DisplayData[5-i];//发送数据 delay(200); //间隔一段时间扫描 P0=0x00;//消隐 } } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { M = 0; while(1) { datapros(Ds18b20ReadTemp()); //数据处理函数 DigDisplay();//数码管显示函数 while(Ds18b20ReadTemp()>512||Ds18b20ReadTemp()<480) { if(Ds18b20ReadTemp()>512) { u8 i; for(i=0;i<100;i++) //循环100次,也就是大约5S { M = 1; //开启电机 delay(50); //大约延时50ms beep=~beep; delay(10); //延时大约100us 通过修改此延时时间达到不同的发声效? DigDisplay(); } i =0; DigDisplay(); break; } else if(Ds18b20ReadTemp()<480) { delay(10); beep=~beep; delay(10); //延时大约100us 通过修改此延时时间达到不同的发声效果 break; } } M = 0; } }
评论
    相关推荐