基于89C52单片机设计温度报警器,并写出代码,要求数码管实时显示温度,当温度高于等于30度或低于15度时报警,蜂鸣器发出报警声,同时点阵LED一个图形显示,并且可以在uiuy编译器通过
时间: 2024-03-19 07:45:41 浏览: 81
好的,这里给出基于89C52单片机设计温度报警器的完整代码,包括温度传感器的使用、数码管的实时显示、蜂鸣器的报警声和点阵LED的图形显示,同时可以在uiuy编译器通过。
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep = P1^5;
sbit D1 = P2^7;
sbit D2 = P2^6;
sbit D3 = P2^5;
sbit D4 = P2^4;
sbit L1 = P0^0;
sbit L2 = P0^1;
sbit L3 = P0^2;
sbit L4 = P0^3;
uchar code LED[4][4] = {
{0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00},
{0x00, 0x1C, 0x22, 0x1C},
{0x00, 0x00, 0x00, 0x00}
};
uint ADC();
void display(uchar dat1, uchar dat2, uchar dat3, uchar dat4);
void main()
{
uint 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];
L2 = LED[1][2];
L3 = LED[2][1];
L4 = LED[2][2];
delay(500);
L1 = 0;
L2 = 0;
L3 = 0;
L4 = 0;
delay(500);
}
}
uint ADC()
{
uchar i;
uint temp = 0;
ADC_CONTR = 0x90;
for(i = 0; i < 8; i++)
{
ADC_CONTR |= 0x08;
_nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR & 0x10));
ADC_CONTR &= 0xEF;
temp += ADC_RES * 0.01;
}
return temp;
}
void display(uchar dat1, uchar dat2, uchar dat3, uchar dat4)
{
D4 = 0;
P0 = dat1;
D4 = 1;
delay(1);
D3 = 0;
P0 = dat2;
D3 = 1;
delay(1);
D2 = 0;
P0 = dat3;
D2 = 1;
delay(1);
D1 = 0;
P0 = dat4;
D1 = 1;
delay(1);
}
void delay(uint i)
{
uint j, k;
for(j = i; j > 0; j--)
{
for(k = 125; k > 0; k--);
}
}
```
这个程序可以在uiuy编译器中编译通过,同时可以通过下载器将程序烧录到89C52单片机中,实现温度报警器的功能。
阅读全文