找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1292|回复: 0
收起左侧

18b20报警按键可设值1602显示

[复制链接]
ID:383209 发表于 2018-8-5 20:52 | 显示全部楼层 |阅读模式
18b20报警按键可设值1602显示51程序
#include<reg52.h>
#include<1602.h>
#include<intrins.h>
sbit ds   = P2^2;
sbit beep = P2^3;
sbit rd = P3^7;
bit flag;
uchar ds_rom[8];
uchar H,L,Key_value;
void TempDelay(uchar us)
{
        while(us--); //6.51us
}
void ds_reset()
{
        ds=1;
        _nop_();
        ds=0;
        TempDelay(80);//520us
        ds=1;
        TempDelay(5);
        if(ds==0)
                flag=1;
        else
                flag=0;
        TempDelay(20);
        ds=1;
}
bit ds_read_bit()
{
        bit dat;
        ds=0;
        _nop_();
        _nop_();
        ds=1;
        _nop_();
        dat=ds;
        TempDelay(12);
        return dat;
}
uchar ds_read_byte()
{
        uchar i,j,value;
        for(i=0;i<8;i++)
        {
                j=ds_read_bit();
                value=(j<<7)|(value>>1);
        }
        return value;
}
void ds_write_byte(uchar dat)
{
        uchar i,onebit;
        for(i=0;i<8;i++)
        {
                onebit=dat&0x01;
                if(onebit)           //д1
                {
                        ds=0;
                        TempDelay(1);
                        ds=1;
                        _nop_();
                }
                else  //д0
                {
                        ds=0;
                        TempDelay(11);
                        ds=1;
                        _nop_();
                }
                dat>>=1;
        }
}

void ds_change()
{
        ds_reset();
        ds_write_byte(0xcc);
        ds_write_byte(0x44);
}
uchar get_temperature()
{
        uint temp;
        uchar a,b,c;
        ds_reset();
        ds_write_byte(0xcc);
        ds_write_byte(0xbe);
        a=ds_read_byte();
        b=ds_read_byte();
        temp=b;
        temp<<=8;
        temp|=a;
        c = temp*0.0625;
        return c;
}

void key()
{
        Key_value = P3;
        Key_value = Key_value & 0x0f;
        if ( Key_value != 0x0f )
        {
                delay(5);
                if ( Key_value != 0x0f )
                {
                        switch(Key_value)
                        {
                                case 0x0e: H++; break;
                                case 0x0d: H--; break;
                                case 0x0b: L++; break;
                                case 0x07: L--; break;
                        }
                }
        }
}

void main()
{
        uchar i;
        rd = 0;
        init_1602();

        write_com( 0x80 + 0 + 3);
        write_data( 'H' );
        write_com( 0x80 + 0 + 8);
        write_data( 'L' );

        lcd_distostr(1,1,0);

        H = 40;
        L = 10;
        while(1)
        {
                ds_change();
                i = get_temperature();
                lcd_dis( 1,14,uchartostr( i ) );
                lcd_dis( 0,5,uchartostr( H ) );
                lcd_dis( 0,10,uchartostr( L ) );
                if ( i >= H || i <= L)
                {
                         beep = 0;
                }
                else
                {
                         beep = 1;
                }
                key();
        }  
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表