您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页基于51单片机的18b20数码管C语言代码

基于51单片机的18b20数码管C语言代码

来源:爱go旅游网
#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P1^4;

sbit bell=P0^6;

uchar code table[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar code led_t[]={25,30};

uchar led_quan[],led_n=0,t_n=0;

bit mim;

bit flag;

void delay1(uint t)

{

while(t--);

}

void delay(uchar del)

{

uchar x,y;

for(x=0;x{

for(y=0;y<=148;y++);

}

}

//DS18B20初始化函数

bit init_ds18b20(void)

{

bit initflag = 0;

DQ = 1;

delay1(12);

DQ = 0;

delay1(80); // 延时大于480us

DQ = 1;

delay1(10); // 14

initflag = DQ; // initflag等于1初始化失败

delay1(5);

return initflag;

}

//通过单总线向从器件写一个字节

void wr_ds18b20(unsigned char byt)

{

unsigned char i;

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

{

DQ = 0;

DQ = byt&0x01;

delay1(5);

DQ = 1;

byt >>= 1;

}

delay1(5);

}

//通过单总线从从器件读一个字节

unsigned char rd_ds18b20(void)

{

unsigned char i;

unsigned char byt;

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

{

DQ = 0;

byt >>= 1;

DQ = 1;

if(DQ)

{

byt |= 0x80;

}

delay1(5);

}

return byt;

}

//温度转换、读取及数据处理器函数

unsigned char rd_temperature(void)

{

unsigned char low,high;

char temp;

init_ds18b20();

wr_ds18b20(0xCC);

wr_ds18b20(0x44); //启动温度转换

delay1(200);

init_ds18b20();

wr_ds18b20(0xCC);

wr_ds18b20(0xBE); //读取寄存器

low = rd_ds18b20(); //低字节

high = rd_ds18b20(); //高字节

temp = high<<4;

temp |= (low>>4);

return temp;

}

void dingwen()

{

if(rd_temperature()>=30)

{ bell=1;

P2|=0xa0;

P2&=0x5f;

}

if(rd_temperature()<=25)

{ bell=1;

P2|=0xa0;

P2&=0x5f;

}

}

void tine0()

{

TMOD=0X01;

TH0 = 0xDC; // 定时10ms

TL0 = 0x00;

EA=1;

ET0=1;

TR0=1;

}

void time1_isr() interrupt 1

{

TH0 = 0xDC; // 定时10ms

TL0 = 0x00;

t_n++;

if (t_n == 100) // 1s

{

t_n = 0;

flag=~flag;

}

}

void led_shuju()

{

led_quan[0]=table[rd_temperature()%10];

led_quan[1]=table[rd_temperature()%100/10];

led_quan[2]=table[led_t[1]%10];

led_quan[3]=table[led_t[1]/10];

led_quan[4]=0xbf;

led_quan[5]=table[led_t[0]%10];

led_quan[6]=table[led_t[0]/10];

}

void flash1(mim)

{ switch(mim)

{case 0:

led_quan[0]=table[rd_temperature()%10];

led_quan[1]=table[rd_temperature()%100/10];

led_quan[2]=table[led_t[1]%10];

led_quan[3]=table[led_t[1]/10];

led_quan[4]=0xbf;

led_quan[5]=table[led_t[0]%10];

led_quan[6]=table[led_t[0]/10];

case 1:

led_quan[0]=table[rd_temperature()%10];

led_quan[1]=table[rd_temperature()%100/10];

led_quan[2]=0xff;

led_quan[3]=0xff;

led_quan[4]=0xbf;

led_quan[5]=table[led_t[0]%10];

led_quan[6]=table[led_t[0]/10];

}

}

void flash2(mim)

{ switch(mim)

{case 0:

led_quan[0]=table[rd_temperature()%10];

led_quan[1]=table[rd_temperature()%100/10];

led_quan[2]=table[led_t[1]%10];

led_quan[3]=table[led_t[1]/10];

led_quan[4]= 0xbf;

led_quan[5]= 0xff;

led_quan[6]= 0xbf;

case 1:

led_quan[0]=table[rd_temperature()%10];

led_quan[1]=table[rd_temperature()%100/10];

led_quan[2]=table[led_t[1]%10];

led_quan[3]=table[led_t[1]/10];

led_quan[4]=0xff;

led_quan[5]=table[led_t[0]%10];

led_quan[6]=table[led_t[0]/10];

}

}

void display( uchar *del)

{

switch(led_n)

{

case 0:

P0=del[0];

P2=0xe0;

P2&=0x1f;

P0=0x80;

P2=0xc0;

P2&=0x3f;

delay(3);

break;

case 1:

P0=del[1];

P2=0xe0;

P2&=0x1f;

P0=0x40;

P2=0xc0;

P2&=0x3f;

delay(3);

break;

case 2:

P0=del[1];

P2=0xe0;

P2&=0x1f;

P0=0x40;

P2=0xc0;

P2&=0x3f;

delay(3);

break;

case 3:

P0=del[1];

P2=0xe0;

P2&=0x1f;

P0=0x40;

P2=0xc0;

P2&=0x3f;

delay(3);

break;

case 4:

P0=del[1];

P2=0xe0;

P2&=0x1f;

P0=0x40;

P2=0xc0;

P2&=0x3f;

delay(3);

break;

case 5:

P0=del[1];

P2=0xe0;

P2&=0x1f;

P0=0x40;

P2=0xc0;

P2&=0x3f;

delay(3);

break;

case 6:

P0=del[1];

P2=0xe0;

P2&=0x1f;

P0=0x40;

P2=0xc0;

P2&=0x3f;

delay(3);

break;

}

if(led_n==7)

led_n=0;

else

led_n++;

}

void main()

{

init_ds18b20();

while(1)

{

display();

dingwen();

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务