第一范文网 - 专业文章范例文档资料分享平台

课程设计--基于51单片机与DS18B20的数字温度计设计

来源:用户分享 时间:2025/6/3 3:47:25 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

Y

Y

Y

N

Y

N

Y

N

Y

N

N

Y

N

N

Y

N

图19 温度设定、报警模块流程图

5.6 数码管驱动模块

本设计数码管通过锁存器接单片机P0口,采用动态扫描驱动7段LED数码管进行显示,需调用延时子程序以稳定显示。 模块流程图如下:

图20 数码管驱动模块流程图

6 源程序

#include

#define uchar unsigned char #define uint unsigned int

/*************************变量定义************************************/ sbit DQ=P2^2;//ds18b20 端口 sbit beep=P2^3;//蜂鸣器使能端 sbit dula=P2^6;//数码管段选使能 sbit wela=P2^7;//数码管位选使能 sbit add=P3^5;//加键 sbit sub=P3^4;//减键

sbit alarm=P3^6;//设定报警功能键

sbit record=P3^7;//查询温度记录功能键 uchar code tabled[]={

0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, //0~9的七段数码管段码 0x40,0x63,0x39};//- c 的段码

uchar code tablew[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};//1~8个数码管的位选码 uchar recordtable[10];//存储过去的十个温度值 uchar temperature;//温度值

uchar countsec,recordnum,count;//计数变量 uint countmin;//计数变量

uchar alanum=30;//报警温度值,初始值为30摄氏度 uchar z=65;//消抖延时函数入口参数

/**********************函数声明***************************************/ void delay1(uchar MS);//动态扫描延时子程序 void delay(uchar i);//DS18B20工作延时子程序 void Init_DS18B20();//DS18B20初始化子程序

void WriteOneChar(unsigned char dat);//向DS18B20写一字节数据 uchar ReadOneChar(void);//向DS18B20读一字节数据 void GetTemperature();//由DS18B20产生温度值

void Display(uchar wei,uchar duan);//数码管驱动子程序 void Alarm();//温度报警

void Showtemperature(uchar tt);//温度显示 void Keeprecord();//记录温度值

void Showrecord();//显示记录的温度值

/*********************主函数*******************************************/ void main() { TMOD=0x01;//定时器初始化,定时器0方式1 TH0=(65536-50000)/256;//50ms TL0=(65536-50000)%6; EA=1;//开中断

ET0=1;

TR0=1;//启动定时器 while(1) {

Showtemperature(temperature);//显示实时温度 Alarm();//温度设定、报警 Showrecord();//查询温度记录值 } }

/************************动态扫描延时函数********************************/ void delay1(uchar MS) { int i,j; for(i=80;i>0;i--) for(j=MS;j>0;j--); }

/************************DS18B20工作延时函数*****************************/ void delay(uchar i) {

while(i--); }

/*************************DS18B20初始化函数******************************/ void Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复位 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay(10); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(5); while(!x) { x=DQ; } }

/*************************读一个字节**************************************/ uchar ReadOneChar(void) {

unsigned char i=0;

课程设计--基于51单片机与DS18B20的数字温度计设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3bsni976nx6c4rp7oypx5gf8x599ez00sz9_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top