/*-----------------------------------------------
名称:DS18b20数码管显示
论坛:www.doflye.net
编写:shifang
日期:2009.5
修改:无
内容:显示格式 符号 xxx.x C
可以显示负温度
数码管显示同时通过串口发送到电脑端显示
使用dofly配套的测温软件 晶振使用11.0592M
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.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 UART_Init(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
//EA = 1; //打开总中断
//ES = 1; //打开串口中断
TI =1;
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
unsigned int TempH,TempL,temp;
Init_Timer0();
UART_Init();
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;//小数近似处理
printf("%d.%d\n",TempH,TempL);
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
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
146-串口测温电脑显示(51单片机C语言实例Proteus仿真和代码).rar
共18个文件
c:3个
obj:3个
lst:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 85 浏览量
2023-02-08
13:05:20
上传
评论
收藏 28KB RAR 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
146-串口测温电脑显示(51单片机C语言实例Proteus仿真和代码).rar (18个子文件)
146-串口测温电脑显示
串口测温电脑显示.Opt 1KB
18b20.c 2KB
18b20.h 658B
obj
串口测温电脑显示.m51 16KB
串口测温电脑显示.plg 1018B
delay.lst 2KB
main.lst 7KB
18b20.lst 4KB
delay.obj 1KB
串口测温电脑显示.hex 6KB
串口测温电脑显示 13KB
main.obj 7KB
18b20.obj 5KB
串口测温电脑显示.Uv2 2KB
串口测温电脑显示.plg 187B
delay.h 654B
delay.c 738B
main.c 4KB
共 18 条
- 1
资源评论
大富大贵7
- 粉丝: 389
- 资源: 8868
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功