如下单片机温度报警器程序的意思(画问号的地方都不太明白,计算机小白求大佬帮忙解释)

如下单片机温度报警器程序的意思(画问号的地方都不太明白,计算机小白求大佬帮忙解释),第1张

distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7};❓

uchar dismod=0,xiaodou1=0,xiaodou2=0,currtemp;

bit flag;❓定义一个位变量

void t0isr() interrupt 1

{

TH0=(65536-5000)/256;❓定时器0  5ms溢出一次参数高八位

TL0=(65536-5000)%256;❓定时器0  5ms溢出一次参数低八位

switch(number)❓显示第number位

{

case 0:

P2=0x08;❓第一位选

P0=distab[TempBuffer1[0]];❓第一段码

break;❓退出switch

case 1:

P2=0x04;

P0=distab[TempBuffer1[1]];

break;

case 2:

P2=0x02;

P0=distab[TempBuffer1[2]]&0x7f;

break;

case 3:

P2=0x01;

P0=distab[TempBuffer1[3]];❓第四段码

break;

default:

break;

}

number++;

if(number>3)number=0;

}

void delay_18B20(unsigned int i)❓延时

{

while(i--);

}

/ds18b20初始化函数/

void Init_DS18B20(void) 

{

bit x=0;

do{

DQ=1;

delay_18B20(8);

DQ = 0; //单片机将DQ❓数据位送0

delay_18B20(90); //精确延时 大于 480us

DQ = 1; //拉高总线❓数据位送1

delay_18B20(14);

x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败,继续初始化

}while(x);

delay_18B20(20);

}

/ds18b20读一个字节/ 

unsigned char ReadOneChar(void)

{

unsigned char i=0;

unsigned char dat = 0;

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

{

DQ = 0; // 给脉冲信号❓数据送0

dat>>=1;

DQ = 1; // 给脉冲信号

i

#include < reg51h >

#include < intrinsh >

#define uchar unsigned char

#define uint unsigned int

#define temp_high 60 //温度报警限设置

uchar data temph;

uchar data templ;

uchar data dat;

uchar temp_buzzer,b,fuhao;

uchar code tab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};

uchar shi,ge,shifen; //全局变量

bit flag;

sbit DQ=P1^0;

sbit buzzer=P1^7;

void delay_50us(unsigned int t) //每次50us延时,最大误差13us

{

unsigned char j;

for(;t>0;t--)

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

;

}

void delay_2us(unsigned char i) //每次2us精确延时,最大误差6us

{

while(--i);

}

void buzzer_sound() //蜂鸣器报警函数

{

if (temp_buzzer>temp_high)

buzzer=0;

else

buzzer=1;

}

void Display() //LCD 显示函数

{

P2=tab[shi];

P3=0xfd;

delay_50us(20);//十位 延时1ms

P3=0xff;

P2=tab[ge]+0x80;

P3=0xfb;

delay_50us(20);//个位 延时1ms

P3=0xff;

P2=tab[shifen];

P3=0xf7;

delay_50us(20);//十分位 延时1ms

P3=0xff;

}

Ds_Reset() //初始化

{

DQ=1;

_nop_();

_nop_();

DQ=0;

delay_50us(10); //延时513us

DQ=1;

delay_2us(23);//延时53us

flag=DQ;

delay_50us(4);//延时200us

DQ=1;//拉伸至高电平

return(flag);

}

Ds_Read() //读函数

{

uint i;

uchar dat=0x00;

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

{

DQ=0;

_nop_(); //延时1us

dat>>=1;

DQ=1; //释放

_nop_();

_nop_();

_nop_();

if(DQ)

{

dat|=0x80;}

delay_2us(30); // 延时67us

DQ=1;

}

return(dat);

}

void Ds_Write(unsigned char datt)

{

uchar j;

bit bitt;

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

{

bitt=datt&0x01;

DQ=0;

_nop_();

_nop_(); //延时2us

if(bitt)

{

DQ=1;

delay_2us(28);

}

else delay_2us(28); //延时56us

datt>>=1;

DQ=1;

_nop_();

}

}

void Set_Tempchange() //温度转换指令

{

Ds_Reset();

Ds_Write(0xcc);// 跳过读序号列号的 *** 作

Ds_Write(0x44);// 启动温度转

}

void Read_Temp() //读出温度

{

Ds_Reset();

Ds_Write(0xcc);// 跳过读序号列号的 *** 作

Ds_Write(0xBE);// 读RAM数据

templ=Ds_Read();//温度的低八位

temph=Ds_Read();//温度的高八

}

void Change_Temp() //转换温度

{

uchar intn,xiaoshu;

uchar k,temp;

fuhao=temph&0xf8;

if(!fuhao) //正数

{

intn=(temph<<4)|(templ>>4);

xiaoshu=(templ&0x0f)625;

}

else //负数

{

intn=((~temph<<4)|(~templ>>4))+1;

xiaoshu=(((~templ)&0x0f)+1)625;

}

k=templ;

temp=intn;

temp=temp&0x80;

if(temp==0x80)

k=~k+1;

k=k&0x0f;

temp_buzzer=intn;

switch (k)

{

case 0x00: b=0;break;

case 0x01: b=1;break;

case 0x02: b=1;break;

case 0x03: b=2;break;

case 0x04: b=2;break;

case 0x05: b=3;break;

case 0x06: b=3;break;

case 0x07: b=4;break;

case 0x08: b=4;break;

case 0x09: b=5;break;

case 0: b=5;break;

case 0x0b: b=6;break;

case 0x0c: b=7;break;

case 0x0d: b=8;break;

case 0x0e: b=9;break;

case 0x0f: b=9;break;

}

shi=intn%100/10;//十位

ge=intn%10; //个位

shifen=b;//xiaoshu/1000;//十分位

buzzer_sound();

}

void main()

{

uchar i,j;

while(1)

{

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

{

Set_Tempchange();

_nop_();

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

{

Display();

}

Read_Temp(); //将读RAM的函数放到这儿是因为温度的转换要用750ms时间,这里用Display()函数来达到延时效果

Change_Temp();

}

}

}

参考一下喔

以上就是关于如下单片机温度报警器程序的意思(画问号的地方都不太明白,计算机小白求大佬帮忙解释)全部的内容,包括:如下单片机温度报警器程序的意思(画问号的地方都不太明白,计算机小白求大佬帮忙解释)、求用AT89C51单片机和DS18B20做温度报警器,报警器用蜂鸣器,温度显示用数码管,用c语言编写程序最好有注释、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10089401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存