oled显示温度报警的51单片机程序

2020-02-13来源: 51hei关键字:oled  显示温度报警  51单片机

温度报警限制上下值
由oled显示
制作出来的实物图如下:

image.png

单片机源程序如下:

#include

#include "oled.h"

#define uchar unsigned char

#define uint unsigned int

unsigned char set=0;

unsigned char code table[]="0123456789";

uchar shi,bai,ge,xiaoshu;

sbit DSPORT=P3^7;

sbit k1=P2^7;

sbit k2=P2^6;

sbit k3=P3^2;

bit N_flag;

int shangxian=22;

int xiaxian=10;

int temp;

sbit beep=P1^5;

sbit alam=P1^6;

uchar H1,H2,L1,L2;

void delay(uint c)

{

   uint x,y;

        for(x=c;x>0;x--)

        for(y=123;y>0;y--);

}

void Delay1ms(unsigned int y)

{

        unsigned int x;

        for( ; y>0; y--)

        {

                for(x=110; x>0; x--);

        }

}



uchar Ds18b20Init()

{

        uchar i;

        DSPORT = 0;                         //将总线拉低480us~960us

        i = 70;        

        while(i--);//延时642us

        DSPORT = 1;                        //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低

        i = 0;

        while(DSPORT)        //等待DS18B20拉低总线

        {

                Delay1ms(1);

                i++;

                if(i>5)//等待>5MS

                {

                        return 0;//初始化失败

                }

        

        }

        return 1;//初始化成功

}




void Ds18b20WriteByte(uchar dat)

{

        unsigned int i, j;


        for(j=0; j<8; j++)

        {

                DSPORT = 0;                       //每写入一位数据之前先把总线拉低1us

                i++;

                DSPORT = dat & 0x01;  //然后写入一个数据,从最低位开始

                i=6;

                while(i--); //延时68us,持续时间最60us

                DSPORT = 1;        //然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值

                dat >>= 1;

        }

}




uchar Ds18b20ReadByte()

{

        uchar byte, bi;

        unsigned int i, j;        

        for(j=8; j>0; j--)

        {

                DSPORT = 0;//先将总线拉低1us

                i++;

                DSPORT = 1;//然后释放总线

                i++;

                i++;//延时6us等待数据稳定

                bi = DSPORT;         //读取数据,从最低位开始读取

                /*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/

                byte = (byte >> 1) | (bi << 7);                                                  

                i = 4;                //读取完之后等待48us再接着读取下一个数

                while(i--);

        }                                

        return byte;

}



void  Ds18b20ChangTemp()

{

        Ds18b20Init();

        Delay1ms(1);

        Ds18b20WriteByte(0xcc);                //跳过ROM操作命令                 

        Ds18b20WriteByte(0x44);            //温度转换命令

        //Delay1ms(100);        //等待转换成功,而如果你是一直刷着的话,就不用这个延时了

   

}



void  Ds18b20ReadTempCom()

{        


        Ds18b20Init();

        Delay1ms(1);

        Ds18b20WriteByte(0xcc);         //跳过ROM操作命令

        Ds18b20WriteByte(0xbe);         //发送读取温度命令

}



uint Ds18b20ReadTemp()

{

        int temp = 0;

        uchar tmh, tml;

        Ds18b20ChangTemp();                                 //先写入转换命令

        Ds18b20ReadTempCom();                        //然后等待转换完后发送读取温度命令

        tml = Ds18b20ReadByte();                //读取温度值共16位,先读低字节

        tmh = Ds18b20ReadByte();                //再读高字节

        temp = tmh;

        temp <<= 8;

        temp |= tml;

        if(temp>0x0fff)

        {

    N_flag=1;

                temp=temp-1;

                temp=~temp;

  }

        else

        {

    N_flag=0;

  }

        temp=temp*0.625;

        

         bai=temp/1000;

         shi=temp%1000/100;

   ge=temp%1000%100/10;

   xiaoshu=temp%10;


        return (temp);

}

void keyscan()

{  

        

        if(set==0)

    {        

                if(k1==0)

                {

                        delay(10);

                        if(k1==0)shangxian++;

                }

        if(k2==0)

                {

                        delay(10);

                        if(k2==0)shangxian--;

                }  

        }


    if(set==1)

        {

                if(k1==0)

                { 

                        delay(10);

                        if(k1==0)xiaxian++;

                }

        if(k2==0)

                { 

                        delay(10);

                        if(k2==0)xiaxian--;

        }

     }


         H1=shangxian/10;

         H2=xiaxian/10;

         L1=shangxian%10;

         L2=xiaxian%10;


}

void alarm()

{

        temp=Ds18b20ReadTemp();

   if(temp/10>=shangxian)

         {

      beep=0;

                  alam=0;

                  delay(10);

                  beep=1;

                  alam=1;

                  delay(10);

   }

         else

         {

      beep=1;

                  alam=1;

   }

         if(temp/10<=xiaxian)

         {

      beep=~beep;

                  alam=~alam;

delay(10);

[1] [2]
关键字:oled  显示温度报警  51单片机 编辑:什么鱼 引用地址:http://news.estoresdeals.com/mcu/ic488117.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。www.66607.com_【官方首页】-彩票会所如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机OLED+dht11显示温度
下一篇:基于单片机的PM2.5空气质量检测

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430F5529LP(一)IIC与OLED的HELLOWRLD
(void);//OLED屏初始化void LCD_ShowChar(unsigned char x,unsigned char y,unsigned char chr,unsigned char Char_Size);//显示字符void LCD_ShowString(unsigned char x,unsigned char y,unsigned char *chr,unsigned char Char_Size);//显示字符串void LCD_ShowNum(unsigned char x,unsigned char y,unsigned long num,unsigned char len,unsigned char size2
发表于 2020-02-20
MSP430F5529LP(一)IIC与OLED的HELLOWRLD
OLED喷墨打印设备商Kateeva欲解雇高管在内的144名员工!
据一份向加利福尼亚州提交的文件,OLED 制造初创企业 Kateeva 计划将裁掉 144 名员工。根据外媒 Crunchbase消息,Kateeva 的首席人力官莫妮卡·卡尔达尼·纳西夫(Monica Kaldani-Nasif)在 1 月 27 日致国家就业发展部的一封信中写道,该公司将裁员 144 名员工。www.66607.com_【官方首页】-彩票会所美国就业发展部随后发出的通知指出,本次裁员将在 1 月 31 日生效。www.66607.com_【官方首页】-彩票会所 信中写到:“公司计划在裁员当日裁掉 144 名员工,以缩小目前公司的人力。不过,对于其中一部分员工,我们会提供 60 天的过渡时间”。  记者注意到,60 天的过度时间将只适用于上面所摘录
发表于 2020-02-14
OLED喷墨打印设备商Kateeva欲解雇高管在内的144名员工!
LG将为通用汽车供应OLED屏幕
日前,LG电子宣布将为全新凯迪拉克凯雷德ESCALADE提供基于OLED曲面屏打造的数字化座舱,并将与通用汽车展开合作。上周,全新凯迪拉克凯雷德ESCALADE正式发布,其车厢内最瞩目的部分无疑便是其38英寸的OLED曲面屏。据悉,该屏幕由LG电子供应,是数字化座舱中重要的一环,该系统由两个车载信息娱乐屏幕以及一个仪表盘屏幕组成,其像素密度是4k电视的两倍。LG电子表示,未来将为通用汽车其他车型提供OLED屏幕。www.66607.com_【官方首页】-彩票会所一直以来,LG电子都试图在汽车以及飞机领域应用OLED屏幕。随着汽车产业的发展,车载屏幕的需求越来越多,品质诉求越来越高,相信未来将会有更多的屏幕供应商会与车企建立合作关系。
发表于 2020-02-14
51单片机OLED+dht11显示温度
入门51单片机一个多月,参加一个比赛熬夜写出了OLED+DHT11程序。单片机源程序如下:#include "REG51.h"#include "oled.h"#include<intrins.h>typedef unsigned char BYTE;typedef unsigned int WORD;#define uint unsigned int #define uchar unsigned char sbit io=P1^2;//dht11data端接单片机的P1^0口//sbit IN1 = P1^0;     
发表于 2020-02-13
51单片机OLED时钟显示
oled时钟单片机源程序如下:#include "REG52.h"#include "oled.h"#define uchar unsigned char#define uint  unsigned int#include <intrins.h>sbit         DQ = P3^6;                       //数据口define interface
发表于 2020-02-12
单片机LM75温度报警LCD1602显示实验
一个由lm75构成的温度报警器例程LM75数字温度传感器报警测试程序1、程序说明:  该例程演示了接在单片机端口上的数字温度传感器LM75测试实验。www.66607.com_【官方首页】-彩票会所  并在1602液晶上显示当前温度。www.66607.com_【官方首页】-彩票会所同时判断是否超过了温度上限和下限,  如果超过,液晶屏将有提示闪烁。2、实验操作1、将跳线插座J4的跳线帽调至1602端2、将LCD1602液晶屏插入J3插座中,注液管脚方向。3、通过调节电位器VR1可以改变显示的对比度。    单片机源程序如下:/************************************************* 文件描述
发表于 2020-02-12
小广播
何立民专栏 单片机及嵌入式宝典

www.66607.com_【官方首页】-彩票会所北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 estoresdeals.com, Inc. All rights reserved

页面底部区域 foot.htm