/*-----------------------------------------------
名称:DS18b20数码管显示
论坛:www.doflye.net
编写:shifang
日期:2009.5
修改:无
内容:显示格式 符号 xxx.x C
可以显示负温度
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "18b20.h"
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
sbit LATCH2=P2^3;// 位锁存
bit ReadTempFlag;//定义读时间标志
unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量
void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数
void Init_Timer0(void);//定时器初始化
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
unsigned int TempH,TempL,temp;
Init_Timer0();
while (1) //主循环
{
if(ReadTempFlag==1)
{
ReadTempFlag=0;
temp=ReadTemperature();
if(temp&0x8000)
{
TempData[0]=0x40;//负号标志
temp=~temp; // 取反加1
temp +=1;
}
else
TempData[0]=0;
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//小数近似处理
if(TempH/100==0)
TempData[1]=0;
else
TempData[1]=dofly_DuanMa[TempH/100]; //十位温度
if((TempH/100==0)&&((TempH%100)/10==0))//消隐
TempData[2]=0;
else
TempData[2]=dofly_DuanMa[(TempH%100)/10]; //十位温度
TempData[3]=dofly_DuanMa[(TempH%100)%10]|0x80; //个位温度,带小数点
TempData[4]=dofly_DuanMa[TempL];
TempData[6]=0x39; //显示C符号
}
}
}
/*------------------------------------------------
显示函数,用于动态扫描数码管
输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
如输入0表示从第一个显示。
Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i=0;
DataPort=0; //清空数据,防止有交替重影
LATCH1=1; //段锁存
LATCH1=0;
DataPort=dofly_WeiMa[i+FirstBit]; //取位码
LATCH2=1; //位锁存
LATCH2=0;
DataPort=TempData[i]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;
i++;
if(i==Num)
i=0;
}
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
static unsigned int num;
TH0=(65536-2000)/256; //重新赋值 2ms
TL0=(65536-2000)%256;
Display(0,8); // 调用数码管扫描
num++;
if(num==300) //
{
num=0;
ReadTempFlag=1; //读标志位置1
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
51单片机的1个18B20 温度传感器 数码管显示.rar
共19个文件
c:3个
lst:3个
obj:3个
0 下载量 138 浏览量
2022-10-23
18:10:37
上传
评论
收藏 25KB RAR 举报
温馨提示
内容:显示格式 符号 xxx.x C 可以显示负温度
资源详情
资源评论
资源推荐
收起资源包目录
122-1个18B20 温度传感器 数码管显示.rar (19个子文件)
122-1个18B20 温度传感器 数码管显示
delay.c 738B
18b20温度传感器数码管显示.plg 210B
18b20温度传感器数码管显示.Opt 2KB
main.c 3KB
obj
18b20.lst 4KB
18b20温度传感器数码管显示.plg 210B
main.lst 6KB
18b20.obj 5KB
18b20温度传感器数码管显示.m51 14KB
main.obj 6KB
delay.lst 2KB
18b20温度传感器数码管显示 10KB
delay.obj 1KB
18b20温度传感器数码管显示.hex 3KB
18b20温度传感器数码管显示.Uv2 2KB
18b20.c 2KB
18b20温度传感器数码管显示_Opt.Bak 2KB
delay.h 654B
18b20.h 658B
共 19 条
- 1
白茶丫
- 粉丝: 4w+
- 资源: 1789
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0