51单片机

该程序实现了一个51单片机控制的DS18B20温度监测系统,包括读取温度、设置温度范围、数码管显示、键盘控制及蜂鸣器报警功能。通过独立按键进行温度设定,当实际温度超出设定范围时,系统会通过LED和蜂鸣器发出警告。
摘要由CSDN通过智能技术生成

#include<reg52.h>     //

#include<math.h>

#include<INTRINS.H>

 

#define uchar unsigned char

#define uint   unsigned int

 

/******************************************************************/

/*                    定义端口                                    */

/******************************************************************/

sbit buzzer=P1^0;//蜂鸣器端口

sbit led1=P1^1;  //led指示灯

sbit led2=P1^2;  //led指示灯

sbit DQ=P1^4; //ds18b20 端口

 

sbit key1=P3^4;  //按键

sbit key2=P3^5;

sbit key3=P3^6;

sbit key4=P3^7;

 

/******************************************************************/

/*                    全局变量                                    */

/******************************************************************/

uint temp;//当前温度值

uchar TempH=0,TempL=0;

int temp_max,temp_min;//设定温度的最大值和最小值

uchar flag_get,count,num;

uchartab[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0~~9段码

uchar str[4];//四位数码管显示字符

uchar display_mod;//数码管显示模式

/******************************************************************/

/*                   函数声明                                     */

/******************************************************************/

unsigned int ReadTemperature(void);//读取温度函数

void Init_DS18B20(void);//18b20初始化函数

unsigned char ReadOneChar(void);//18B20读一个字节

void WriteOneChar(unsigned chardat);//18B20写一个字节

void delay(unsigned int i);//短延时

void delay_ms(uint z);//长延时

void alarm();//报警

void keyscan();//键盘扫描

/******************************************************************/

/*                    主函数                                      */

/******************************************************************/

main()

{

        

         display_mod=0;//显示当前温度

         temp_min=10;//设置最低温 

         temp_max=40;//设置最高温

         TMOD|=0x01;//定时器设置

         TH0=0xef;  //定时器初值

         TL0=0xf0;

         IE=0x82;//EA=1,ET0=1

         TR0=1;  //开定时器

         P2=0xff; 

         count=0;

         while(1)

         {

                keyscan();//独立按键扫描

                           

                   if(flag_get==1)

                   {

                            flag_get=0;//获取温度标志清零

                            temp=ReadTemperature();//读温度值

                   }                          

 

                  

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值