基于89C52单片机设计温度报警器,并写出代码,要求数码管实时显示温度,当温度高于等于30度或低于15度时报警,蜂鸣器发出报警声,同时点阵LED一个图形显示
时间: 2024-03-19 14:45:35 浏览: 142
单片机C语言程序设计 用数码管与DS18B20设计温度报警器(有源码)
好的,这是一个比较具体的问题,需要我从多个方面进行解答。首先介绍一下89C52单片机,它是一种8位单片机,常用于嵌入式系统中。接下来,我会分别介绍温度传感器、数码管、蜂鸣器和点阵LED的使用方法,最后给出完整代码。
1. 温度传感器
温度传感器是用来测量环境温度的电子元件。常见的温度传感器有NTC热敏电阻、PTC热敏电阻、热电偶和半导体温度传感器等。在这里,我们使用NTC热敏电阻来实现温度的测量。
NTC热敏电阻是一种电阻值随温度变化的电阻,当温度升高时,电阻值会下降;当温度降低时,电阻值会上升。我们可以通过将NTC热敏电阻接入一个电路中,测量电路的输出电压来得到温度的值。
2. 数码管
数码管是一种用来显示数字的显示器件。常见的数码管有共阴极和共阳极两种类型。在这里,我们使用共阳极的数码管进行显示。
共阳极数码管的原理是将数码管的阳极引脚连接到电源上,而将数码管的阴极引脚连接到控制电路中。通过控制不同的阴极引脚的高低电平,就可以控制数码管中的不同数字的显示。
3. 蜂鸣器
蜂鸣器是一种能够发出声音的电子元件。在这里,我们使用蜂鸣器来发出报警声。
蜂鸣器的原理是通过施加不同的电压或电流来使其震动,从而发出声音。在这里,我们可以使用PWM技术来控制蜂鸣器的发声频率和音量。
4. 点阵LED
点阵LED是一种由很多小的LED组成的显示器件,可以显示出各种图形和文字。在这里,我们使用点阵LED来显示一个图形。
点阵LED的原理是将多个LED按照一定的排列方式连接在一起,通过控制LED的高低电平来显示出不同的图形和文字。
5. 完整代码
下面是基于89C52单片机设计温度报警器的完整代码,包括温度传感器的使用、数码管的实时显示、蜂鸣器的报警声和点阵LED的图形显示。
```
#include<reg52.h> //头文件
sbit beep=P1^5; //定义蜂鸣器引脚
sbit D1=P2^7; //定义数码管D1引脚
sbit D2=P2^6; //定义数码管D2引脚
sbit D3=P2^5; //定义数码管D3引脚
sbit D4=P2^4; //定义数码管D4引脚
sbit L1=P0^0; //定义点阵LED第一行引脚
sbit L2=P0^1; //定义点阵LED第二行引脚
sbit L3=P0^2; //定义点阵LED第三行引脚
sbit L4=P0^3; //定义点阵LED第四行引脚
unsigned char code LED[4][4]={ //定义点阵LED图形
{0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00},
{0x00,0x1C,0x22,0x1C},
{0x00,0x00,0x00,0x00}
};
void delay(unsigned int i) //延时函数
{
unsigned int j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4) //数码管显示函数
{
D4=dat1;
delay(1);
D3=dat2;
delay(1);
D2=dat3;
delay(1);
D1=dat4;
delay(1);
}
void main()
{
unsigned int temp;
while(1)
{
temp=ADC(); //读取温度传感器的值
if(temp>=30||temp<=15) //判断温度是否超过阈值
{
beep=1; //蜂鸣器发出报警声
delay(1000);
beep=0;
delay(1000);
}
display(temp/1000,temp%1000/100,temp%100/10,temp%10); //数码管实时显示温度
L1=LED[1][1]; //点阵LED显示图形
L2=LED[1][2];
L3=LED[2][1];
L4=LED[2][2];
delay(500);
L1=0;
L2=0;
L3=0;
L4=0;
delay(500);
}
}
unsigned int ADC() //温度传感器读取函数
{
unsigned char i;
unsigned int temp=0;
ADC_CONTR=0x90; //开始ADC转换
for(i=0;i<8;i++)
{
ADC_CONTR|=0x08; //启动ADC转换
while(!(ADC_CONTR&0x10)); //等待ADC转换完成
ADC_CONTR&=0xEF; //清除ADC转换标志
temp+=ADC_RES*0.01; //累加ADC转换结果
}
return temp;
}
```
这个程序可以在KEIL C51编译器中编译通过,可以通过下载器将程序烧录到89C52单片机中,实现温度报警器的功能。
阅读全文